结合层

作者

塔玛斯塞克勒斯

联系

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

功能属性

在层定义中,您可以引用每个源层支持的任何属性。除了源层属性外,联合层还提供以下附加属性:

  1. Union_SourceLayerName-要素所属的源图层的名称

  2. 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中的黄色功能。

../_images/union.png
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);
...

?>