Протоколы передачи данных WMTS и WFS#
Протокол WMTS#
API Jet использует версию протокола WMTS – 1.0.0.
Передать внешней системе можно только кэшируемые слои. Для этого на GeoServer выберите необходимый слой для передачи и в его настройках установите «Создать кэшируемый слой для этого слоя».
Запрос GetCapabilities
Операция GetCapabilities запрашивает информацию об операциях, службах и данных, которые предлагает сервис WMTS.
Пример запроса:
https://{APIURL}/api/jet/v1/{schemeId}/gwc/service/wmts?version=1.0.0&request=GetCapabilities&service=wmts
Где:
APIURL – хост сервиса API Jet;
jet – имя сервиса;
v1 – версия API Jet;
schemeId – алиас проекта;
request – значение этого параметра всегда должно быть «GetCapabilities».
Пример ответа на запрос GetCapabilities
Запрос GetTile
Запрос GetTile позволяет клиенту получить тайл необходимого слоя. Алиас GLV указывается в запросе. Для передаваемого слоя должно быть настроено кэширование тайлов на GeoServer.
Пример запроса GetTile:
https://{APIURL}/api/jet/v1/{schemeId}/wmts?service=WMTS&version=1.0.0&request=GetTile&layer=GeoTopoGidrogrArea&tilematrixset=EPSG:3857&tilematrix=EPSG:3857:7&tilerow=20&tilecol=40&format=image/png
Где:
APIURL – хост сервиса API Jet;
jet – имя сервиса;
v1 – версия API Jet;
schemeId – алиас проекта;
GeoTopoGidrogrArea – алиас GLV;
EPSG:3857 – имя геосетки;
format – формат передачи данных (др.форматы доступны в ответе GetCapabilities);
tilematrixset – геосетка;
tilematrix – название матрицы с масштабом (например, EPSG:3857:7)
tilerow – индекс строки матрицы;
tilecol – индекс столбца матрицы.
Примечание
Посмотреть масштаб геосетки и количество tilerow и tilecol соответствующих масштабу можно в результате на запрос GetCapabilities.
Пример
Пример ответа на запрос GetTile
Пример REST запроса GetTile:
https://{APIURL}/api/jet/v1/{schemeId}/wmts/rest/GeoTopoGidrogrArea/EPSG:3857/EPSG:3857:7/19/40?format=image/png
Где:
APIURL – хост сервиса API Jet;
jet – имя сервиса;
v1 – версия API Jet;
schemeId – алиас проекта;
GeoTopoGidrogrArea – алиас GLV;
EPSG:3857 – имя геосетки;
EPSG:3857:7 – название матрицы с масштабом;
19 – индекс строки матрицы;
40 – индекс столбца матрицы.
format – формат передачи данных (др.форматы доступны в ответе GetCapabilities).
Пример ответа на REST запрос GetTile
Протокол WFS#
API Jet использует версию протокола WFS – 2.0.0. Вместе с векторными данными передаются семантические данные — это простые поля из LV/LT, ключ объекта и фулнейм. Если поле является ссылочным, то передается ключ объекта, на который ведет ссылка из этого поля. Векторные данные передаются в системе координат, которая указана на GeoServer.
Запрос GetCapabilities
Операция GetCapabilities запрашивает информацию об операциях, службах и данных, которые предлагает сервис WFS.
Пример запроса:
https://{APIURL}/api/jet/v1/{schemeId}/gwc/service/wfs?service=wfs&version=2.0.0&request=GetCapabilities
Где:
APIURL – хост сервиса API Jet;
jet – имя сервиса;
v1 – версия API Jet;
schemeId – алиас проекта;
service – имя службы (значение wfs);
request – значение этого параметра всегда должно быть «GetCapabilities».
Пример ответа на запрос GetCapabilities
Запрос DescribeFeatureType
Запрос позволяет клиенту получить описание слоя, прежде чем запрашивать фактические данные.
Пример запроса:
https://{APIURL}/api/jet/v1/{schemeId}/wfs?service=wfs&version=2.0.0&request=DescribeFeatureType&typeNames=GeoTopoGreen,
Где:
APIURL – хост сервиса API Jet;
jet – имя сервиса;
service – имя службы (wfs);
version – версия службы;
request – вид запроса;
typeNames – алиас GLV для получения описания
propNamesSource/Jet-Prop-Names-Source – получение наименования полей в виде алиасов. Получить в ответе на запрос DescribeFeatureType названия полей в виде алиасов можно 2 способами:
Указать в URL query-параметр propNamesSource со значением alias.
Указать в Headers заголовок Jet-Prop-Names-Source со значением alias.
Если ни одно из условий не выполнено, то названия полей будут получены в виде наименования полей в Системе.
Пример ответа на запрос DescribeFeatureType
Процесс выполнения запроса:
Из входящего запроса из параметра строки запроса typeNames извлекается алиас GLV. По алиасу ищутся в таблице ClientLayer схемы Jet имя слоя геосервера. Найденное значение имени слоя подставляется как значение typeNames в новом запросе к геосерверу.
По найденному имени слоя геосервера ищется url-адрес геосервера. И строится новый запрос по протоколу wfs к методу DescribeFeatureType.
Пример запроса:
http://10.4.1.178:8093/geoserver/{schemeId}/wfs?service=wfs&version=2.0.0&request=DescribeFeatureType&typeNames=kazan:kazan_geo_topo_gidrogr_area
Остальные параметры строки запроса передаются без изменений.
Геосервер отвечает в xml формате. Ответ содержит xsd – схему, которая описывает тип feature, запрошенной в параметре typeNames.
В узле <xsd:element></xsd:element>, расположенного непосредственно в узле <xsd:schema></xsd:schema>, атрибут name заменяется на алиас GLV. Этот узел описывает наименование feature.
В узле <xsd:element></xsd:element>, расположенного непосредственно в узле <xsd:sequence>, атрибут name заменяется на алиас логического поля GLV, вместо наименования поля. Этот узел описывает имена свойств feature. Так же остаются только те узлы <xsd:element></xsd:element>, для которых существуют поля в GLV. Остальные удаляются.
Запрос GetFeature
Запрос позволяет получить данные слоя.
Пример запроса:
https://{APIURL}/api/jet/v1/{schemeId}/wfs?service=wfs&version=2.0.0&request=GetFeature&outputFormat=json&typeNames=GeoTopoGidrogrArea&count=2
Где:
Обязательные параметры запроса:
APIURL – хост сервиса API Jet;
jet – имя сервиса;
v1 – версия API Jet;
service – имя службы (wfs);
version – версия службы;
request – вид запроса;
typeNames – алиас GLV для получения данных.
Дополнительные параметры запроса:
outputFormat – получение данных в необходимом формате (поддерживается json);
count – получение необходимого количества feature;
propNamesSource/Jet-Prop-Names-Source – получение наименования полей в виде алиасов. Получить в ответе на запрос GetFeature названия полей в виде алиасов можно 2 способами:
Указать в URL query-параметр propNamesSource со значением alias.
Указать в Headers заголовок Jet-Prop-Names-Source со значением alias.
Если ни одно из условий не выполнено, то названия полей будут получены в виде наименования полей в Системе.
Пример ответа на запрос GetFeature
CQL-фильтр#
CQL позволяет выполнять сложные запросы, включая запросы с использованием логических операторов, сравнения и функций. Он может быть использован для поиска данных в каталоге геопространственных данных, таких как карты, изображения и другие геоданные.
API Jet может работать с CQL-фильтром только по протоколу WFS.
При работе с CQL-фильтром необходимо использовать алиасы полей, а не их наименования в Системе.
Для использования CQL-фильтра необходимо добавить параметр &cql_filter= и указать требуемое условие. Параметр cql_filter возможно использовать только в запросе GetFeature.
Пример запроса:
https://jet-marvel-isogd.gemsdev.ru/api/jet/v1/kazan/wfs?service=wfs&version=2.0.0&request=GetFeature&outputFormat=json&typeNames=GeokznZUConclusion&count=1&featurePropNames=alias&cql_filter=FullName='Анализ по ЗУ'
Есть возможность указать BBOX внутри cql-фильтра:
https:/{APIURL}/api/jet/v1/{schemeId}/wfs?service=wfs&version=2.0.0&request=GetFeature&outputFormat=json&typeNames={AliasGLV}&cql_filter=BBOX(Geometry,{дМин,шМин,дМакс,шМакс})&propNamesSource=alias
Где:
APIURL – хост сервиса API Jet;
schemeId – алиас проекта;
AliasGLV – алиас GLV для получения данных;
дМин,шМин,дМакс,шМакс - координаты двух точек ограничивающего прямоугольника (долгота, широта левой нижней и долгота, широта правой верхней) в десятичных градусах в системе координат EPSG:4326.
Важно
Работа с QGIS
QGIS не может обработать cql-фильтр по протоколу WFS, поскольку QGIS автоматически указывает параметр BBOX в запросе. А для протокола WFS использование CQL-фильтра и BBOX несовместимо.