兼容 WFS 服务器所支持的每种操作的在线资源都是一个 HTTP 统一资源定位器 (URL),所以 WFS 服务可被视为一项表述性状态转移 (REST) 服务。 通过 URL 参数,您可以执行这些操作来获取 WFS 服务中的服务元数据、要素类型信息和 GML 编码的要素。 在 OGC WFS 规范中有这些操作与参数的详细介绍。
客户端的类型
WFS 服务可用于支持 WFS 的任何客户端。 最常见的 web 浏览器是 WFS 服务的基本客户端。 可通过 HTTP 发出 WFS 请求,然后会通过浏览器返回响应或者异常。 所有 WFS 服务都支持以下三种主要操作:GetCapabilities、DescribeFeatureType 和 GetFeature。 WFS 2.0.0 的 ArcGIS Server 实施将定义其他操作:GetFeatureByID、ListStoredQueries 和 DescribeStoredQueries。
许多第三方客户端都可以使用 WFS 服务: 要使用 WFS 服务,客户端必须支持 WFS 1.0.0、1.1.0 或 2.0.0 以及 GML 简单要素专用标准。 此外,ArcGIS Pro 也支持 WFS 服务。 有关 ArcGIS Pro 中 WFS 服务的帮助,请参阅添加 WFS 服务。
WFS URL 结构
要连接到服务,您必须了解 URL,其格式如下:
http://gisserver.domain.com:6080/arcgis/services/<文件夹名称(如果适用)>/<服务名称>/MapServer/WFSServer?
- 服务器名称是您的 Web 服务器计算机的名称。
- 端口号是您的 Web 服务器计算机用来与其他计算机进行通信的端口。
例如,如果您对地图服务 WFSDemoService(服务器名 gisserver.domain.com,端口号 6080,文件夹 DemoFolder)启用 WFS 服务功能,GetCapabilities URL 将如下所示:
http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?service=WFS&request=GetCapabilities
使用过滤器
在 WFS 请求中可使用 Filter 参数来获取 WFS 服务中的特定要素。 Filter 参数的优势在于,它是 WFS 1.1 执行规范第 9.5 节中所定义的标准关键字-值对编码的一部分,并且可追加到 HTTP 请求的末尾。 WFS 1.0.0 和 1.1.0 服务使用 OGC OpenGIS 过滤器编码执行规范 (FE) 版本 1.1.0。 WFS 2.0.0 使用过滤器规范的版本 2.0.0。
下表中列出了您可以应用的过滤器:
几何 | 空间 | 逻辑 | 比较 | 排序 |
---|---|---|---|---|
包络矩形 | BBOX | 和 | EqualTo | SortBy* |
点 | Equals | 或 | NotEqualTo | |
MultiPoint | Disjoint | Not | LessThan | |
LineString | 相交 | GreaterThan | ||
面 | 交叉 | LessThanOrEqualTo | ||
Touches | GreaterThanOrEqualTo | |||
位于 | Like | |||
包含 | Between | |||
重叠 | NullCheck |
注:
*SortBy 过滤器仅可应用于由存储在企业级地理数据库中数据发布而获取的 WFS 服务。
例如,如果在 WFS 服务中创建了一个名为 blockgroups 的要素类型,则可通过发送以下 GetFeature 请求来获取 -122.423192682619, 37.7877919206256, -122.421377806544, 37.7893634225143 范围内的 blockgroup 要素:
http://gisserver.domain.com:6080/arcgis/services/playground/sanfrancisco_wfs/MapServer/WFSServer?service=WFS&request=GetFeature&version=1.1.0&typename=esri:blockgroups&Filter=<ogc:Filter><ogc:BBOX><ogc:PropertyName>Shape</ogc:PropertyName><gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326"><gml:coordinates>37.7877919206256,-122.423192682619 37.7893634225143,-122.421377806544</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter>
要请求一个包含特定点要素(如 122.431577, 37.749936)的 blockgroups 要素,可发送以下 GetFeature 请求:
http://gisserver.domain.com:6080/arcgis/services/playground/sanfrancisco_wfs/MapServer/WFSServer?service=WFS&request=GetFeature&version=1.1.0&typename=esri:blockgroups&Filter=<ogc:Filter><ogc:Contains><ogc:PropertyName>Shape</ogc:PropertyName><gml:Point srsName="urn:x-ogc:def:crs:EPSG:4326"><gml:pos srsName="urn:x-ogc:def:crs:EPSG:4326">37.749936 -122.431577</gml:pos></gml:Point></ogc:Contains></ogc:Filter>
注:
WFS 需要涉及的名称空间前缀显示在过滤器 XML 字符串中: 此外,为避免 Web 浏览器或 Web 服务器完成不正确的转换,应先对过滤器 XML 字符串进行 URL 编码,然后再将其发送到服务器。
在 Web 浏览器中使用 WFS 1.0.0 或 1.1.0 服务
以下示例使用 URL 参数在 Web 浏览器中通过 WFS 和 WFS-T 1.0.0 或 1.1.0 服务进行通信。 要了解如何在 Web 浏览器中使用 WFS 2.0.0 操作,请参阅下文的在 Web 浏览器中使用 WFS 2.0 服务。
GetCapabilities
此请求将通过服务以 GML 格式返回所有可用的要素类型与功能。 要使用 GetCapabilities 操作,请复制 WFS 服务 URL 并将其粘贴到地址栏中,然后在 URL 末尾添加 ?service=WFS&request=getcapabilities。 请参阅以下示例:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&request=GetCapabilities
DescribeFeatureType
该请求描述了有关 WFS 服务中一个或多个要素的字段信息。 这包括字段名称、字段类型、允许的最小和最大字段值以及针对要素类或表字段设置的任何其他约束。
要使用 DescribeFeatureType 操作,请复制 WFS URL 并将其粘贴到地址栏中,然后在 URL 末尾添加?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0。 这将返回有关要素服务中各可用要素类型和表的所有字段信息。 请参阅以下示例:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0
通过将下列带有要素类型名称或表名称的请求添加到 URL 的末尾,您也可以指定您需要其字段信息的单个要素类或表:
?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&typeName=<在此输入要素类型>
在下面的示例中,DescribeFeatureType 请求用于识别名为 continent 的要素类型的字段信息:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=continent
GetFeature
此请求返回可通过 WFS 服务获取的特定要素类型的相关信息。
要在 Web 浏览器中使用 GetFeature 操作,请复制 WFS URL 并将其粘贴到地址栏中,然后在 URL 末尾添加 ?service=WFS&version=1.1.0&request=GetFeature&typeName=<在此输入要素类型>。 这将返回有关此要素类型中各个要素和行的所有属性和几何信息。 请参阅以下示例:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&version=1.1.0&request=GetFeature&typeName=cities
您也可以在请求中添加过滤器来优化返回的结果。 例如,可以请求返回指定坐标范围内的所有城市。 在下例中,三个城市位于指定的坐标范围内:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&version=1.1.0&request=GetFeature&typeName=cities&BBOX=46.90,-76.21,42.12,-72.88
插入
插入用于在单个事务请求中创建要素。 默认情况下,待创建要素的初始状态使用 GML3 来表示,并且必须相对于由 DescribeFeatureType 操作生成的 GML3 应用程序方案进行验证。
例如,以下 POST 示例插入了一个表示城市的点要素:
<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:esri="http://www.esri.com" version = "1.1.0" service="WFS">>
<wfs:Insert>
<esri:Cities>
<esri:NAME>Tofino</esri:NAME>
<esri:CAPITAL>N</esri:CAPITAL>
<esri:PROV_NAME>British Columbia</esri:PROV_NAME>
<esri:POPULATION>12345</esri:POPULATION>
<esri:RepRowID>1000</esri:RepRowID>
<esri:Shape>
<gml:Point>
<gml:coordinates>59.163182034 -133.844892907</gml:coordinates>
</gml:Point>
</esri:Shape>
</esri:Cities>
</wfs:Insert>
</wfs:Transaction>
更新
更新用于更新单个事务请求中的一个要素或一种类型的多个要素。
<更新> 元素包含一个或多个 <属性> 元素,这些属性元素可使用强制的 typeName 属性指定属于特定要素类型的属性的名称和替换值。 <属性> 元素中包括含有待修改要素属性名称的 <名称> 元素和含有命名要素属性替换值的 <值> 元素(可选)。 遗漏 <值> 元素意味着属性应指定为 NULL 值。 在属性不可为空的情况下,WFS 必须引发异常,表示不允许存在 NULL 值。
例如,以下 POST 示例在名为 cities 的数据集中更新了一个点要素:
<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:esri="http://www.esri.com" version = "1.1.0" service="WFS">
<wfs:Update typeName="esri:cities">
<wfs:Property>
<wfs:Name>POPULATION</wfs:Name>
<wfs:Value>300000</wfs:Value>
</wfs:Property>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>NAME</ogc:PropertyName>
<ogc:Literal>Halifax</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Update>
</wfs:Transaction>
删除
删除用于删除单个事务请求中的一个要素或一种类型的多个要素。 使用 <过滤器> 元素定义“删除”。 在 <过滤器> 元素不识别任何要删除的要素实例的情况下,删除请求将被忽略。
例如,以下 POST 示例在名为 cities 的数据集中删除了两个要素:
<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:esri="http://www.esri.com" version = "2.0.0" service="WFS">
<wfs:Delete typeName="esri:cities">
<ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>NAME</ogc:PropertyName>
<ogc:Literal>Churchill</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Delete>
<wfs:Delete typeName="esri:cities">
<ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>NAME</ogc:PropertyName>
<ogc:Literal>Montreal</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>
在 Web 浏览器中使用 WFS 2.0 服务
WFS 2.0.0 规范的 ArcGIS Server 实施可提供包括基本 WFS 配置文件在内的所需功能,正如 WFS 2.0 规范中所述。 其中包括 GetCapabilities、DescribeFeatureType 和 GetFeature 操作(如上所述)。 WFS 2.0 实施还支持事务、已存储的查询和响应页面,这些并不属于基本 WFS 配置文件。
事务
事务操作用于描述应用于 WFS 服务中要素实例的数据变换操作。 使用事务操作和客户端可以在 WFS 中创建、修改、替换和删除要素。 完成事务后,WFS 将生成一个指明操作完成状态的 XML 响应文档。
存储的查询
存储的查询允许 WFS 2.0 存储复杂过滤器查询并使用基本请求来运行。 要使用 WFS 1.0.0 或 1.1.0 获得相同的结果,您需要使用过滤器编码规范编写一个过滤器,并将其追加到 WFS URL。 配置存储的查询可给您带来以下好处。例如,可使 WFS 2.0 在应用程序中得到更广泛地应用:
- 可简化复杂查询以便将其作为 HTTP GET 请求来运行。
- 由于存储的查询可配置为支持特定查询,但不支持复杂即时查询和 XPath 表达式,因此它可减少应用程序开发的成本。
- 可以将 RESTful 接口与 HTTP GET/POST 和 SOAP 一起建立在 WFS 之上,从而使 WFS 能够在轻量级客户端应用程序中使用。
以下操作可用于支持存储的查询:GetFeatureByID、ListStoredQueries 和 DescribeStoredQueries(如下文所述)。
创建存储的查询文件
存储的查询文件是一个 .xml 文件,用于保存特定服务相关的发布者创建的存储查询列表。 要通过 WFS 2.0 使用存储查询,需要创建一个存储查询文件并配置服务以便引用存储查询文件的 URL。
以下存储查询文件示例与包含在 ArcGIS Server 中的 SampleWorldCities 地图服务一起使用。 您可以使用此示例并修改文件以与不同的 WFS 服务一起使用。
<?xml version="1.0" encoding="utf-8" ?>
<wfs:StoredQueryList
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:myns="http://www.someserver.com/myns"
xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd"
service="WFS"
version="2.0.0">
<wfs:StoredQueryDefinition id="urn:StoredQueries:AttributeDemo">
<wfs:Title>Attribute request</wfs:Title>
<wfs:Abstract>test Attribute request</wfs:Abstract>
<wfs:Parameter name="myrank" type="xsd:double"/>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName="myns:cities">
<fes:Filter>
<fes:PropertyIsEqualTo>
<fes:Literal>POP_RANK</fes:Literal>
<fes:Literal>${myrank}</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:SpatialDemo">
<wfs:Title>Spatial request</wfs:Title>
<wfs:Abstract>test Spatial Request</wfs:Abstract>
<wfs:Parameter name="coordinates" type="xsd:string"/>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName='myns:Cities'>
<ogc:Filter>
<ogc:BBOX>
<ogc:PropertyName>Shape</ogc:PropertyName>
<gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326">
<gml:coordinates>${coordinates}</gml:coordinates>
</gml:Box>
</ogc:BBOX>
</ogc:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:SpatialAndAttributeDemo">
<wfs:Title>Spatial and Attribute Request</wfs:Title>
<wfs:Abstract>Select all cities with POP > 12000000 and BBOX (0,0,180,90)</wfs:Abstract>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName='myns:Cities'>
<ogc:Filter>
<fes:And>
<ogc:BBOX>
<ogc:PropertyName>Shape</ogc:PropertyName>
<gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326">
<gml:coordinates>0,0 90,180</gml:coordinates>
</gml:Box>
</ogc:BBOX>
<fes:PropertyIsGreaterThan>
<fes:Literal>POP</fes:Literal>
<fes:Literal>12000000</fes:Literal>
</fes:PropertyIsGreaterThan>
</fes:And>
</ogc:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:QueryCitiesByID">
<wfs:Title>Select feature by ID</wfs:Title>
<wfs:Abstract>test selecting feature by ID</wfs:Abstract>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName="myns:cities">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>OBJECTID</ogc:Literal>
<ogc:Literal>${ID}</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:ogc:def:query:OGC-WFS::GetFeatureById">
<wfs:Title>urn:ogc:def:query:OGC-WFS::GetFeatureById predefined stored query</wfs:Title>
<wfs:Abstract>This query support all layers in the map</wfs:Abstract>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities,myns:Continent,myns:World"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<!-- Cities -->
<wfs:Query typeName="myns:Cities">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>OBJECTID</ogc:Literal>
<ogc:Literal>${ID}</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
<!-- Continent -->
<wfs:Query typeName="myns:Continent">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>OBJECTID</ogc:Literal>
<ogc:Literal>${ID}</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
<!-- World -->
<wfs:Query typeName="myns:World">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>OBJECTID</ogc:Literal>
<ogc:Literal>${ID}</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
<!-- -->
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:FunctionCHAR_LENGTH">
<wfs:Title>Function CHAR_LENGTH</wfs:Title>
<wfs:Abstract>test Function CHAR_LENGTH</wfs:Abstract>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName="myns:cities">
<fes:Filter>
<fes:PropertyIsEqualTo>
<fes:Function name="CHAR_LENGTH">
<fes:Literal>CITY_NAME</fes:Literal>
</fes:Function>
<fes:Literal>2</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:FunctionSUBSTRING">
<wfs:Title>Function CHAR_LENGTH</wfs:Title>
<wfs:Abstract>test Function CHAR_LENGTH</wfs:Abstract>
<wfs:QueryExpressionText>
<wfs:Query typeName="myns:cities">
<fes:Filter>
<fes:PropertyIsEqualTo>
<fes:Function name="SUBSTRING">
<fes:Literal>CITY_NAME</fes:Literal>
<fes:Literal>2</fes:Literal>
<fes:Literal>3</fes:Literal>
</fes:Function>
<fes:Literal>os</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:MyStoredQuery">
<wfs:Title>MyStoredQuery</wfs:Title>
<wfs:Abstract>some tested MyStoredQuery</wfs:Abstract>
<wfs:Parameter name="AreaOfInterest" type="gml:PolygonPropertyType"/>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Parks myns:Lakes myns:Rivers"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName="myns:cities">
<ogc:Filter>
<ogc:Within>
<ogc:ValueReference>Shape</ogc:ValueReference>
${AreaOfInterest}
</ogc:Within>
</ogc:Filter>
</wfs:Query>
<wfs:Query typeName="myns:cities">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>POP_RANK</ogc:Literal>
<ogc:Literal>3</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Parks">
<fes:Filter>
<fes:Within>
<fes:ValueReference>geometry</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Lakes">
<fes:Filter>
<fes:Within>
<fes:ValueReference>region</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Rivers">
<fes:Filter>
<fes:Within>
<fes:ValueReference>region</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:FeaturesInPolygon">
<wfs:Title>Features In Polygon</wfs:Title>
<wfs:Abstract>Find all the features in a Polygon.</wfs:Abstract>
<wfs:Parameter name="AreaOfInterest" type="gml:PolygonPropertyType"/>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Parks myns:Lakes myns:Rivers"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeNames="myns:Parks">
<fes:Filter>
<fes:Within>
<fes:ValueReference>geometry</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Lakes">
<fes:Filter>
<fes:Within>
<fes:ValueReference>region</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Rivers">
<fes:Filter>
<fes:Within>
<fes:ValueReference>region</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
</wfs:StoredQueryList>
GetFeatureByID
GetFeatureByID 操作采用名为 id(类型为 xsd:string)的单个参数,并返回具有与指定的 id 参数值等同标识符的单个要素。
以下 URL 示例会调用 GetFeatureByID 存储的查询来检索并显示单个要素:
http://gisserver.domain.com/arcgis/services/SampleWorldCities/MapServer/WFSServer?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&ID=Cities.1
ListStoredQueries
ListStoredQueries 操作会列出 ArcGIS Server 中可用的存储查询。 客户端可以一次运行一个存储查询,例如:
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?request=ListStoredQueries&service=WFS&version=2.0.0
DescribeStoredQueries
DescribeStoredQueries 操作用于描述 ArcGIS Server 中可用的存储查询。 此操作对于 WFS 客户端询问服务器、了解存储查询的特性以及必须发送以便运行存储查询的参数来说非常有用。
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?request=DescribeStoredQueries&service=WFS&version=2.0.0
作为 GetFeature 请求的一部分运行存储的查询
以下是某个属性请求的示例,其中某一存储查询 (AttributeDemo) 是通过 myrank=3 参数来调用的:
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=0&count=5&STOREDQUERY_ID=urn:StoredQueries:AttributeDemo&myrank=3
以下示例为通过 coordinates 参数调用的存储查询 (SpatialDemo),该存储查询可检索落入边界框内的美国城市的列表。 仅返回该列表中的前两个城市(请注意开始索引和计数的使用):
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=0&count=2&STOREDQUERY_ID=urn:StoredQueries:SpatialDemo&coordinates=0,-180%2090,0
以下为调用存储查询 (FunctionChar_Length) 的示例。 将写入服务器上的存储查询来过滤出名称长度大于两个字符的城市:
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=Cities&STOREDQUERY_ID=urn:StoredQueries:FunctionCHAR_LENGTH
响应页面
响应页面运行请求来指定要检索的要素的起始索引。 此外,还可指定用于检索的要素的计数。
使用与 ArcGIS Server 一同安装的 SampleWorldCities 地图服务,以下查询将返回两个城市 (count=2):Brasilia 和 Goiania。
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=1&count=2
如果更改请求并使起始索引从 2 开始,则返回的第一个城市为 Goiania。 由于计数为 2,现在将与请求一起返回两个城市:Goiania 和 Campo Grande。
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=2&count=2
ForceEPSGAxisOrder 自定义参数
ForceEPSGAxisOrder 是一个自定义参数,可以在请求 GeoJSON 输出格式时与 WFS GetFeature 请求一起发送。 默认情况下,GeoJSON 输出格式会返回 WGS84 坐标,轴顺序为经度、纬度,以符合 RFC 7946 GeoJSON 规范。 将此参数设置为 true 时,会强制按照 EPSG 代码规定返回坐标轴顺序。 例如,以下查询将返回轴顺序为纬度、经度的坐标,如 EPSG:4326 所定义:
https:///arcgis/services/SampleWorldCities/MapServer/WFSServer?service=wfs&version=2.0.0&&request=GetFeature&typeNames=cities&outputFormat=GEOJSON&srsName=EPSG:4326&ForceEPSGAxisOrder=true