WMS 规范缺少过滤机制,该机制使您可以在 GetMap 请求中追加一个查询字符串或 where 子句。尽管可以使用 SLD 中的规则应用过滤器,您仍须同时在 SLD 中重新创建符号系统部分。
或者,ArcGIS Server 为 GetMap 和 GetFeatureInfo WMS 操作实现一个名为 layerDefs 的供应商特定的参数。这为客户端提供了一种更灵巧的方式,通过为图层指定定义表达式来对导出地图中各个图层的要素进行过滤。
layerDefs 参数是由 ArcGIS Server 地图服务的 layerDefs 参数派生而来。有关该参数的详细信息,请参阅 ArcGIS REST API 文档。
在请求中使用 layerDefs
以下为如何在 GetMap 和 GetFeatureInfo 请求中使用 layerDefs 参数的一些示例。
注:
请牢记,layerDefs 参数中的过滤器表达式与在 SLD 和/或 SLD_BODY 中定义的表达式是相互排斥的。当两者都出现在 GetMap 或 GetFeatureInfo 请求中时,layerDefs 优先级更低并将被忽略。
GetMap
通过只显示人口超过一百万的国家/地区来过滤国家/地区图层:layerDefs={"country":"POP_CNTRY>100000000"}.
示例请求:
http://gisserver.domain.com:6080/arcgis/services/MyMapService/MapServer/WmsServer?VERSION=1.3.0&REQUEST=GetMap&CRS=CRS:84&BBOX=-180,-90,180,83.604158999999996&WIDTH=660&HEIGHT=318&LAYERS=country&STYLES=default&EXCEPTIONS=xml&FORMAT=image/png&BGCOLOR=0xFEFFFF&TRANSPARENT=TRUE&layerDefs={"country":"POP_CNTRY>100000000"}
GetFeatureInfo
通过只获取人口超过一百万并具有名为“Amazon”的河流的国家/地区的信息来过滤国家/地区图层:layerDefs={"country":"POP_CNTRY>100000000","rivers":"NAME LIKE 'Amazon'"}.
示例请求:
http://gisserver.domain.com:6080/arcgis/services/MyMapService/MapServer/WmsServer?VERSION=1.3.0&REQUEST=GetFeatureInfo&CRS=CRS:84&BBOX=-180,-90,180,83.604158999999996&WIDTH=660&HEIGHT=318&LAYERS=country,rivers&STYLES=default,default&EXCEPTIONS=xml&FORMAT=image/png&BGCOLOR=0xFEFFFF&TRANSPARENT=TRUE&QUERY_LAYERS=country,rivers&INFO_FORMAT=text/html&I=50&J=50&layerDefs={"country":"POP_CNTRY>100000000","rivers":"NAME LIKE 'Amazon'"}