结合层¶
- 作者
塔玛斯塞克勒斯
- 联系
gmail.com上的szekerest
- 作者
杰夫麦克纳
- 联系
jmckenna在gatewaygeomatics.com
- 最后更新
2021-03-30
描述¶
从版本6.0开始,MapServer就能够显示来自多个矢量层(称为 “源层” )在单个映射文件层中。此功能是通过 MS RFC 68:支持组合多层功能 . 不能使用此功能组合栅格图层。
要求¶
这是一个本机MapServer选项,不使用任何外部库来支持它。
映射文件配置¶
ConnectionType参数必须设置为Union。
连接参数必须包含以逗号分隔的源层名称列表。
所有源层和联合层必须是相同的类型(例如,所有都必须是类型点或所有类型多边形等)。
备注
您可能希望禁用源层的可见性(更改其状态),以避免显示两次功能。
例如:
LAYER
NAME "union-layer"
TYPE POINT
STATUS DEFAULT
CONNECTIONTYPE UNION
CONNECTION "layer1,layer2,layer3" # reference to the source layers
PROCESSING "ITEMS=itemname1,itemname2,itemname3"
...
END
LAYER
NAME "layer1"
TYPE POINT
STATUS OFF
CONNECTIONTYPE OGR
CONNECTION ...
...
END
LAYER
NAME "layer2"
TYPE POINT
STATUS OFF
CONNECTIONTYPE OGR
CONNECTION ...
...
END
LAYER
NAME "layer3"
TYPE POINT
STATUS OFF
CONNECTIONTYPE OGR
CONNECTION ...
...
END
功能属性¶
在层定义中,您可以引用每个源层支持的任何属性。除了源层属性外,联合层还提供以下附加属性:
Union_SourceLayerName-要素所属的源图层的名称
Union_SourceLayerGroup-要素所属的源图层组
在选择/要素查询操作期间,默认情况下只提供‘Union_SourceLayerName’和‘Union_SourceLayerGroup’属性。通过使用项目处理选项(参见上面的示例),可以手动覆盖所提供的属性集(并且可以显示更多属性)。
类和样式¶
我们可以通过指定类和样式,以与任何其他层相同的方式定义联合层的符号和标签。此外,Union层还支持样式项自动选项,该选项提供显示源层中指定的功能。如果基础数据源提供了样式项自动设置,那么源层也可以使用样式项自动设置。
预测¶
对于速度,建议始终对联合层和源层使用相同的投影。但是,如果请求,MapServer会将源层重新投影到联合层。(有关MapServer中投影的详细信息,请参阅 PROJECTION )
支持的处理选项¶
以下处理选项可用于联合层:
- 联合状态检查(对或错)
控制是否应检查源层的状态以及是否应跳过不可见层(状态=关闭)。默认值为FALSE。
- 联合秤检查(对或错)
控制是否应检查源层的比例范围以及是否应跳过不可见层(超出比例范围和缩放范围)。默认值为True。
- UNION_SRCLAYER_CLOSE_CONNECTION
覆盖源层的连接池设置。通过引入此设置,我们改变当前行为,相当于:
UNION_SRCLAYER_CLOSE_CONNECTION=ALWAYS
实例¶
Mapfile 示例¶
下面的示例包含3个不同格式的源层,以及一个不同投影中的层(黄色)。联合层使用**styleitem“auto”**参数从源层绘制样式。(在这种情况下,MapServer将为联合层(EPSG:3978)重新投影EPSG:4326中的黄色功能。

MAP
...
PROJECTION
"init=epsg:3978"
END
...
LAYER
NAME 'unioned'
TYPE POLYGON
STATUS DEFAULT
CONNECTIONTYPE UNION
CONNECTION "red,green,yellow"
STYLEITEM "AUTO"
# Define an empty class that will be filled at runtime from the color and
# styles read from each source layer.
CLASS
END
PROJECTION
"init=epsg:3978"
END
END
LAYER
NAME 'red'
TYPE POLYGON
STATUS OFF
DATA 'nb.shp'
CLASS
NAME 'red'
STYLE
OUTLINECOLOR 0 0 0
COLOR 255 85 0
END
END
END
LAYER
NAME 'green'
TYPE POLYGON
STATUS OFF
CONNECTIONTYPE OGR
CONNECTION 'ns.mif'
CLASS
NAME 'green'
STYLE
OUTLINECOLOR 0 0 0
COLOR 90 218 71
END
END
END
LAYER
NAME 'yellow'
TYPE POLYGON
STATUS OFF
CONNECTIONTYPE OGR
CONNECTION 'pei.gml'
CLASS
NAME 'yellow'
STYLE
OUTLINECOLOR 0 0 0
COLOR 255 255 0
END
END
PROJECTION
"init=epsg:4326"
END
END
END # Map
php mapscript示例¶
<?php
// open map
$oMap = ms_newMapObj( "D:/ms4w/apps/osm/map/osm.map" );
// create union layer
$oLayer = ms_newLayerObj($oMap);
$oLayer->set("name", "unioned");
$oLayer->set("type", MS_LAYER_POLYGON);
$oLayer->set("status", MS_ON);
$oLayer->setConnectionType(MS_UNION);
$oLayer->set("connection", "red,green,yellow");
$oLayer->set("styleitem", "AUTO");
$oLayer->setProjection("init=epsg:3978");
// create empty class
$oClass = ms_newClassObj($oLayer);
...
?>