Взаимодействие с WFS сервисом в браузере
Для каждой операции, поддерживаемой совместимым WFS-сервером, предусмотрен онлайн-ресурс в виде унифицированного указателя информационного ресурса (URL) по протоколу HTTP, таким образом WFS-сервис следует считать REST-сервисом. С помощью параметров URL можно использовать эти операции для получения метаданных сервиса, информации о типе объектов и GML-кодированные объекты от сервиса WFS. Эти операции и параметры подробно описаны в спецификации OGC WFS.
Типы клиентов
Сервисы WFS могут использоваться в любом клиенте, поддерживающем WFS. Чаще всего браузер — самый простой клиент сервиса WFS. Запросы WFS можно отправлять по протоколу HTTP, а ответы или исключения будут возвращаться через браузер. Все сервисы WFS поддерживают три операции: GetCapabilities, DescribeFeatureType и GetFeature.
Также доступно большое количество клиентов сторонних производителей для работы с сервисами WFS. Для использования сервисов WFS клиент должен поддерживать WFS 1.0.0 или 1.1.0 и профиль Simple Features GML. Кроме того, ArcGIS for Desktop может работать с сервисами WFS. Об использовании сервисов WFS в ArcMap см. раздел Как работать с WFS, используя ArcGIS for Desktop.
Структура URL WFS
Для подключения к сервису необходимо знать URL, который использует следующий формат:
http://gisserver.domain.com:6080/arcgis/services/<имя папки (если необходимо)>/<имя сервиса>/<тип сервиса>/WFSServer?
- Имя сервера — это имя вашего веб-сервера.
- Номер порта — это порт, который используется веб-сервером для связи с другими компьютерами.
- Типом сервиса может быть MapServer или GeoDataServer в зависимости от того, создали вы сервис WFS на основе карты или базы геоданных соответственно.
Так, если включена функция WFS для картографического сервиса WFSDemoService в папке DemoFolder на сервере gisserver.domain.com с портом 6080, то URL будет выглядеть следующим образом:
http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?request=GetCapabilities
Аналогично, если вы включили функциональность WFS для сервиса геоданных, URL будет выглядеть следующим образом:
http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/GeoDataServer/WFSServer?
Использование фильтров
Параметр Filter можно использовать в запросах WFS для получения определенных объектов от сервиса WFS. Преимущество параметра Filter состоит в том, что это часть стандартной пары ключевого слова и значения, определенной в разделе 9.5 спецификации реализации WFS 1.1, и его можно добавлять в конец запросов HTTP. Сервисы WFS используют спецификацию реализации кодирования OGC OpenGIS (FE) версии 1.1.
Далее представлены фильтры, которые можно применять:
Geometry |
Spatial |
Логические |
Comparison |
Сортировать (Sort) |
---|---|---|---|---|
Конверт (Envelope) |
BBOX |
And |
EqualTo |
SortBy* |
Точки |
Равно (Equals) |
Or |
NotEqualTo | |
Мультиточка |
Disjoint |
Not |
LessThan | |
LineString |
Пересекает |
GreaterThan | ||
Полигоны |
Пересекает |
LessThanOrEqualTo | ||
Касается |
GreaterThanOrEqualTo | |||
Радиус поиска |
Like | |||
Содержит |
Между | |||
Перекрытия |
NullCheck |
*Фильтр SortBy можно применять только к сервисами WFS, основанным на данным в базе геоданных ArcSDE.
Например, если вы создали тип объекта 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: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 фильтра. Кроме того, чтобы избежать неправильного преобразования браузерами или веб-серверами, URL кодирует строку XML фильтра перед ее отправкой на сервер.
Использование сервиса WFS в браузере
Далее представлены примеры использования параметров URL для работы с сервисом WFS в браузере:
GetCapabilities
Этот запрос возвращает все типы объектов и функции, доступные через сервис, в формате GML. Чтобы использовать операцию GetCapabilities, скопируйте и вставьте URL сервиса WFS в адресную строку и добавьте ?request=getcapabilities в конец URL.
Пример URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=GetCapabilities
На следующем рисунке представлен пример функциональности, возвращаемой операцией GetCapabilities:
GetCapabilities также возвращает список всех доступных классов и таблиц объектов:
DescribeFeatureType
Этот запрос описывает сведения о полях одного или нескольких объектов в сервисе WFS. К ним относятся имена полей, типы полей, разрешенные минимальные и максимальные значения полей и другие ограничения, заданные для поля классов или таблиц объектов.
Чтобы использовать операцию DescribeFeatureType, скопируйте и вставьте URL сервиса WFS в адресную строку и добавьте ?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0 в конец URL. Этот запрос возвращает сведения о полях каждого типа объектов и таблиц, доступных в сервисе.
Пример URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0
Добавление фильтров
Вы также можете указать один класс объектов или одну таблицу, для которой требуется получить сведения о полях, добавив следующий запрос в конец URL с именем типа объекта или таблицы:
?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=<тип_объекта>&VERSION=1.1.0
В следующем примере запрос DescribeFeatureType используется для определения информации о полях для типа объектов cities.
пример URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=cities&VERSION=1.1.0
GetFeature
Этот запрос возвращает информацию об определенных типах объектов, доступных через сервис WFS.
Чтобы использовать операцию GetFeature в браузере, скопируйте и вставьте URL сервиса WFS в адресную строку и добавьте ?request=getFeature&typename=<тип_объекта> в конец URL. Этот запрос возвращает сведения об атрибутах и геометрии каждого объекта или каждой строки в типе объектов.
Пример URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities
Добавление фильтров
Вы также можете добавить в запрос фильтры, чтобы уточнить возвращаемые результаты. Например, можно запросить все города, попадающие в указанный диапазон координат. В примере ниже два города попадают в указанный диапазон координат:
Пример URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities&BBOX=46.90,-76.21,42.12,-72.88
Работа с параметром FeatureID
Параметр FeatureID можно использовать в запросах GetFeature для получения определенных объектов от сервиса WFS. Параметр FeatureID состоит из типа объекта и ID объекта (gml:id), но не идентификатора объекта (OBJECTID). Формат ID объекта в сервисе WFS: <тип_объекта>.<gml:id>. Один из методов определения gml:id объекта в сервисе WFS — выполнить запрос GetFeature для интересующего типа объекта.
gml:ids не предоставляются для объектов в сервисах WFS, основанных на шейп-файлах.
Допустим, что в сервисе WFS есть тип объекта Cities. Если выполнить запрос GetFeature для Cities, ответ будет содержать gml:id для каждого объекта.
Пример URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities
В этом примере ID объекта для Ванкувера будет иметь значение cities.F293__1. Следующий запрос можно использовать для запроса города Ванкувер с помощью ID объекта:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&featureid=cities.F293__1