我们知道geoserver中的wms,wfs过滤参数为cql_filter。比如过滤字段“mc”为"恒宇花园"的数据:
cql_filter=mc=‘恒宇花园'
但是arcgis server有所不同。具体可以看下它的标准:使用 WMS 请求中的 layerDefs 参数过滤要素—文档 | ArcGIS Enterprise
以下简单说一下arcgis server发布的wms和wfs服务如何添加过滤条件。
1、WMS
wms服务过滤参数为layerDefs,比如过滤图层名为“0”,字段“mc”为"恒宇花园"的数据:
layerDefs={"0":"mc='恒宇花园'"}
完整地址:
GetFeatureInfo亦同。
2、WFS
wfs跟wms又不一样,过滤使用filter参数。并且它的值是xml格式的,使用的是OGC OpenGIS 过滤器编码执行规范。详情见:在 Web 浏览器中与 WFS 服务进行通信—文档 | ArcGIS Enterprise
比如过滤图层名称为“0”,字段“mc”为"恒宇花园"的数据:
filter=<ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>mc</ogc:PropertyName> <ogc:Literal>山海天</ogc:Literal></ogc:PropertyIsEqualTo> </ogc:Filter>
格式化的xml:
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>mc</ogc:PropertyName>
<ogc:Literal>恒宇花园</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
如果是多条件and或or ,需要使用<ogc:And></ogc:And>、<ogc:Or></ogc:Or>标签
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>mc</ogc:PropertyName>
<ogc:Literal>恒宇花园</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>mc1</ogc:PropertyName>
<ogc:Literal>恒宇花园</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:And>
</ogc:Filter>
完整请求地址:
https://localhost:6443/arcgis/services/cszz/MapServer/WFSServer?request=GetFeature&typeName=cszz:czzz&filter=<ogc:Filter> <ogc:And><ogc:PropertyIsEqualTo> <ogc:PropertyName>mc</ogc:PropertyName><ogc:Literal>恒宇花园</ogc:Literal></ogc:PropertyIsEqualTo><ogc:PropertyIsEqualTo><ogc:PropertyName>city</ogc:PropertyName> <ogc:Literal>123</ogc:Literal> </ogc:PropertyIsEqualTo></ogc:And></ogc:Filter>