Skip To Content

Взаимодействие с сервисом WFS в веб-браузере

Для каждой операции, поддерживаемой совместимым WFS-сервером, предусмотрен онлайн-ресурс в виде унифицированного указателя информационного ресурса (URL) по протоколу HTTP, таким образом, WFS-сервис следует считать REST-сервисом. С помощью параметров URL можно использовать эти операции для получения метаданных сервиса, информации о типе объектов и GML-кодированные объекты от сервиса WFS. Эти операции и параметры подробно описаны в спецификации OGC WFS.

Типы клиентов

Сервисы WFS могут использоваться в любом клиенте, поддерживающем WFS. Чаще всего браузер – самый простой клиент сервиса WFS. Запросы WFS можно отправлять по протоколу HTTP, а ответы или исключения будут возвращаться через браузер. Все сервисы 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 и профиль Simple Features GML. Кроме того, ArcGIS Pro может работать с сервисами WFS. Справку по работе с сервисами WFS в ArcGIS Pro, см. статье Добавление сервисов WFS.

Структура URL WFS

Для подключения к сервису необходимо знать URL, который использует следующий формат:

http://gisserver.domain.com:6080/arcgis/services/<имя папки (если оно необходимо)>/<имя сервиса>/MapServer/WFSServer?

  • Имя сервера – это имя вашего веб-сервера.
  • Номер порта – это порт, который используется веб-сервером для связи с другими компьютерами.

Так, если включена функция WFS для картографического сервиса WFSDemoService в папке DemoFolder на сервере gisserver.domain.com с портом 6080, то GetCapabilities URL будет выглядеть следующим образом:

http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?service=WFS&request=GetCapabilities

Использование фильтров

Параметр Filter можно использовать в запросах WFS для получения определенных объектов от сервиса WFS. Преимущество параметра Filter состоит в том, что это часть стандартной пары ключевого слова и значения, определенной в разделе 9.5 спецификации реализации WFS 1.1, и его можно добавлять в конец запросов 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

Не

LessThan

LineString

Пересекает

GreaterThan

Полигон

Пересекает

LessThanOrEqualTo

Касается

GreaterThanOrEqualTo

Внутри

Подобно

Содержат

Между

Перекрытия

NullCheck

Примечание:

*Фильтр SortBy можно применять только к сервисам WFS, основанным на данных многопользовательской базы геоданных.

Например, если вы создали тип объекта blockgroups в сервисе WFS, вы можете запросить объекты blockgroups с экстентом -122.423192682619, 37.7877919206256, -122.421377806544, 37.7893634225143, отправив следующий запрос 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: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>

Чтобы запросить объект blockgroups, содержащий определенный точечный объект, например 122.431577, 37.749936, можно отправить следующий запрос 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: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>

Примечание:

Спецификация WFS требуется, что префиксы пространства имен были включены в строку XML фильтра. Кроме того, чтобы избежать неправильного преобразования браузерами или веб-серверами, URL кодирует строку XML фильтра перед ее отправкой на сервер.

Использование сервиса WFS 1.0.0 или 1.1.0 в браузере

Далее представлены примеры использования параметров URL для работы с сервисами WFS и WFS-T 1.0.0 и 1.1.0 в веб-браузере. Для изучения использования операций WFS 2.0.0 в веб-браузере см. расположенный ниже раздел Использование сервиса WFS 2.0 в веб-браузере.

GetCapabilities

Этот запрос возвращает все типы объектов и функции, доступные через сервис, в формате GML. Чтобы использовать операцию GetCapabilities, скопируйте и вставьте URL сервиса WFS в адресную строку и добавьте ?service=WFS&request=getcapabilities в конец URL-адреса. См. пример ниже:

http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&request=GetCapabilities

DescribeFeatureType

Этот запрос описывает сведения о полях одного или нескольких объектов в сервисе WFS. К ним относятся имена полей, типы полей, разрешенные минимальные и максимальные значения полей и другие ограничения, заданные для поля классов или таблиц объектов.

Чтобы использовать операцию DescribeFeatureType, скопируйте и вставьте URL сервиса WFS в адресную строку и добавьте ?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0 в конец URL. Этот запрос возвращает сведения о полях каждого типа объектов и таблиц, доступных в сервисе. См. пример ниже:

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.

Чтобы использовать операцию GetFeature в браузере, скопируйте и вставьте URL сервиса WFS в адресную строку и добавьте ?service=WFS&version=1.1.0&request=GetFeature&typeName=<тип объекта> в конец URL. Этот запрос возвращает все сведения об атрибутах и геометрии каждого объекта или каждой строки в типе объектов. См. пример ниже:

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

Insert

Инструмент Вставить используется для создания новых объектов в запросе отдельной транзакции. По умолчанию, начальный статус создаваемого объекта выражается с использованием GML3 и должен быть проверен с помощью схемы приложения GML3, созданной операцией DescribeFeatureType.

Например, в следующем примере 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>

Обновить

Инструмент Обновить используется для обновления объекта или объектов (одного типа геометрии) в запросе отдельной транзакции.

Элемент <Update> содержит один или более элементов <Property>, определяющих имя и заменяющее значение для свойства, принадлежащего типу объекта, указанному посредством обязательного атрибута typeName. Элемент <Property> содержит элемент <Name>, который содержит имя изменяемого свойства объекта, и дополнительный элемент <Value>, который содержит заменяющее значение для указанного свойства объекта. Отсутствие элемента <Value> означает, что свойству должно быть присвоено значение 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>

Удалить

Инструмент Удалить используется для удаления одного или более объектов (одного типа геометрии) в запросе отдельной транзакции. Удалить задается с помощью элемента <Filter>. В случае, когда элемент <Filter> не установит ни одного экземпляра объекта для удаления, запрос удаления будет проигнорирован.

В следующем примере 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>

Использование сервиса WFS 2.0 в браузере

Реализация спецификации WFS 2.0 ArcGIS Server адресует к нужным объектам простого профиля WFS, как того требует спецификация WFS 2.0. Это операции GetCapabilities, DescribeFeatureType и GetFeature (описанные выше). Реализация WFS 2.0 также поддерживает транзакции, сохраненные запросы и отклики на вызовы, не являющиеся частью простого профиля WFS.

Транзакции

Операция Транзакция (Transaction) используется для описания операций преобразования данных, применимых к экземплярам объектов сервиса WFS. С помощью операции Transaction клиенты могут создавать, изменять и удалять объекты в WFS. По завершении транзакции WFS создает XML-документ ответа, содержащий статус завершения операции.

Сохраненные запросы

Сохраненные запросы позволяют сохранять в WFS 2.0 сложные фильтры запросов и выполнять их посредством простого запроса. Для получения такого же результата в WFS 1.0.0 или 1.1.0 вам потребуется написать фильтр с помощью спецификации кодировки фильтра и присоединить его к URL сервиса WFS. Настройка сохраненных запросов предоставляет следующие преимущества, которые расширяют применение WFS 2.0 в приложениях:

  • Сложные запросы могут быть модернизированы с целью запуска в качестве запросов HTTP GET.
  • Сохраненные запросы позволят уменьшить стоимость разработки приложений, поскольку могут быть настроены на поддержку конкретных запросов вместо сложных запросов для конкретного случая и выражений XPath.
  • Интерфейсы REST устанавливаются сверху WFS, наряду с HTTP GET/POST и SOAP, для включения WFS на использование тонкими клиентами.

Для поддержки сохраненных запросов доступны следующие операции: GetFeatureByID, ListStoredQueries и DescribeStoredQueries (описаны ниже).

Создание файла сохраненного запроса

Файл сохраненного запроса – это файл .xml, сохраняющий список созданных издателем запросов, подходящих для конкретного сервиса. Для использования сохраненных запросов с WFS 2.0 создайте файл сохраненных запросов и настройте сервис, чтобы он ссылался на URL вашего файла сохраненных запросов.

В приведенном ниже примере файл сохраненных запросов работает с картографическим сервисом SampleWorldCities, входящем в установку ArcGIS Server. Вы можете использовать этот пример и изменить файл для работы с другим сервисом 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

Ниже приведен пример, в котором сохраненный запрос (SpatialDemo) вызывается с помощью параметра coordinates для получения списка городов США, попадающих в ограничивающий прямоугольник. Только первые два города возвращаются из списка (помните о работе начального индекса и количества)

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

Ниже приводится пример, в котором вызывается сохраненный запрос (_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

Отклики на вызовы

Отклики на вызовы допускают запросы для указания начального индекса нужного объекта. Кроме того, можно указать число получаемых объектов.

С помощью картографического сервиса SampleWorldCities, установленного с ArcGIS Server, следующий запрос возвращает два города (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, первым возвращенным городом будет Гояния. Если count=2, запрос возвратит два города: Гояния и Кампо Гранде.

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 — это пользовательский параметр, который можно отправить с помощью запроса WFS GetFeature, когда запрашивается выходной формат GeoJSON. По умолчанию выходной формат 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