CLUSTER¶
描述¶
自6.0版以来,MapServer能够根据点图层的相对位置将多个功能组合为单个(聚合)功能。只有 POINT 支持层。此功能是通过添加的 MS RFC 69:支持点图层中的特征聚类 .
支持的层类型¶
只有一层层 TYPE POINT 是受支持的。
映射文件参数¶
- 最大距离[双]
指定搜索区域(矩形或椭圆)在像素位置中的距离。必须大于0。
- 区域[字符串]
定义在要素周围协商相邻要素的搜索区域。可以是“矩形”或“椭圆”。
- 缓冲器[双]
以像素为单位定义地图范围周围的缓冲区。默认值为0。使用缓冲区可以在创建集群期间考虑地图周围的相邻形状。
- GROUP [弦乐]
此表达式的计算结果为字符串,并且只协商具有相同组值的功能。此参数可以省略。评估的组值在“clusteru group”功能属性中可用。
- FILTER [弦乐]
我们可以定义过滤器表达式从最终输出中过滤一些特性。此表达式计算为布尔值,如果该值为假,则筛选出相应的形状。此表达式在功能协商完成后进行计算,因此也可以使用“cluster_featureCount”参数,该参数提供了筛选搜索区域中具有太多或太少邻居的形状的选项。
支持的处理选项¶
以下处理选项可用于群集层:
- CLUSTER_GET_ALL_SHAPES=ON
返回群集包含的所有形状,而不是单个形状。此设置同时影响绘图和查询处理(尤其对GetFeatureInfo请求有用)。示例用法:“processing”cluster“get”all“shapes=on”`
- CLUSTER_KEEP_LOCATIONS=ON
设置是否应保留簇形状的位置(设置此设置将显示簇中的所有点)。示例用法:processing“clusteru keepu locations=on”,
- CLUSTER_ALGORITHM=SIMPLE
从MapServer6.2中,我们可以选择一种更简单的聚类算法,该算法比原来的(更准确的)方法执行得更好。用法: PROCESSING "CLUSTER_ALGORITHM=SIMPLE" 有关详细信息,请参阅:
错误5503
- CLUSTER_USE_MAP_UNITS=ON
提供与比例无关的聚类(最大距离和缓冲区参数以地图单位指定)。示例用法:processing“clusteru useu mapu units=on”
- ITEMS
指定群集中要在查询期间公开的功能属性,用逗号分隔。示例用法:processing“items=attribute_x,attribute_y,attribute_z”,
Mapfile 片段¶
LAYER
NAME "my-cluster"
TYPE POINT
...
CLUSTER
MAXDISTANCE 20 # in pixels
REGION "ellipse" # can be rectangle or ellipse
GROUP (expression) # an expression to create separate groups for each value
FILTER (expression) # a logical expression to specify the grouping condition
END
LABELITEM "Cluster_FeatureCount"
CLASS
...
LABEL
...
END
END
...
END
功能属性¶
聚集层本身提供以下聚合属性:
丛集功能计数-丛集形状中的功能计数
cluster_group-群集的组值(对其计算组表达式)
备注
如果您使用的是MapServer版本6.x,则这些属性的名称中包含“:”,例如 Cluster:FeatureCount & Cluster:Group 。在MapServer 7中更改了“_”。
这些属性(除了原始数据源提供的属性)可用于配置功能的标签,也可用于表达式。项目处理选项可用于根据用户的偏好在查询操作中指定原始层属性的子集。
我们可以使用简单的聚合函数(min、max、sum、count)来指定应该如何从原始属性计算聚集属性。聚合函数应指定为属性定义中由“:”分隔的前缀,如:[max:itemname]。如果我们不为源层属性指定聚合函数,那么如果集群包含多个具有不同值的形状,那么集群属性的实际值将是不确定的。count aggregate函数实际上提供了与cluster_FeatureCount相同的值。
处理GetFeatureInfo¶
如果要允许WMS GetFeatureInfo了解群集中的所有功能,则必须1)像往常一样设置“WMS_include_items”元数据,以及2)在层中设置以下处理参数:
PROCESSING "CLUSTER_GET_ALL_SHAPES=ON"
PROCESSING "ITEMS=attribute_x,attribute_y,attribute_z"
因此,您的层可能如下所示:
LAYER
NAME "my-cluster"
TYPE POINT
METADATA
"wms_title" "myttitle"
"wms_include_items" "all"
END
...
CLUSTER
...
END
LABELITEM "Cluster_FeatureCount"
CLASS
...
LABEL
...
END
END
...
PROCESSING "CLUSTER_GET_ALL_SHAPES=ON"
PROCESSING "ITEMS=name,description"
END
php mapscript用法¶
这个 CLUSTER object 通过php mapscript公开。示例如下:
$map = ms_newMapobj("/var/www/vhosts/mysite/httpdocs/test.map");
$layer1=$map->getLayerByName("test1");
$layer1->cluster;
示例:火车站集群¶
以下示例使用点数据源(在本例中为KML格式)显示火车站集群。使用两个类:一个用于设置集群的样式和标签,另一个用于设置单个火车站的样式和标签。
备注
由于我们不能申报2个Labelitems,对于单一铁路等级,我们使用 TEXT 用于标记工作站的参数。
Mapfile 层¶
####################
# Lightrail Stations
####################
SYMBOL
NAME "lightrail"
TYPE PIXMAP
IMAGE "../etc/lightrail.png"
END
LAYER
NAME "lightrail"
GROUP "default"
STATUS DEFAULT
TYPE POINT
CONNECTIONTYPE OGR
CONNECTION "lightrail-stations.kml"
DATA "lightrail-stations"
LABELITEM "Cluster_FeatureCount"
CLASSITEM "Cluster_FeatureCount"
###########################
# Define the cluster object
###########################
CLUSTER
MAXDISTANCE 50
REGION "ellipse"
END
################################
# Class1: For the cluster symbol
################################
CLASS
NAME "Clustered Lightrail Stations"
EXPRESSION ("[Cluster_FeatureCount]" != "1")
STYLE
SIZE 30
SYMBOL "citycircle"
COLOR 255 0 0
END
LABEL
FONT scb
TYPE TRUETYPE
SIZE 8
COLOR 255 255 255
ALIGN CENTER
PRIORITY 10
BUFFER 1
PARTIALS TRUE
POSITION cc
END
END
################################
# Class2: For the single station
################################
CLASS
NAME "Lightrail Stations"
EXPRESSION "1"
STYLE
SIZE 30
SYMBOL "lightrail"
END
TEXT "[Name]"
LABEL
FONT scb
TYPE TRUETYPE
SIZE 8
COLOR 0 0 0
OUTLINECOLOR 255 255 255
ALIGN CENTER
PRIORITY 9
BUFFER 1
PARTIALS FALSE
POSITION ur
END
END
# the following is used for a query
TOLERANCE 50
UNITS PIXELS
HEADER "../htdocs/templates/cluster_header.html"
FOOTER "../htdocs/templates/cluster_footer.html"
TEMPLATE "../htdocs/templates/cluster_query.html"
END
地图图像¶
