Передача параметров фильтра в GeoServer WFS через URL?

17

Я пытаюсь использовать функцию PHP CURL для получения информации geoJSON из экземпляра GeoServer. Я делаю это, используя переменные URL, а не пытаюсь создать полный XML-запрос GetFeature.

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

Итак, пока я могу получить все результаты, используя этот URL:

http://www.myURL.com/geoserver/namespace/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=layername&outputFormat=json&BBOX=1,2,3,4

Могу ли я также ограничить результаты "Где поле LIKE значение" или "поле = значение"?

Я потратил час на просмотр документации Geoserver / ECQL, и ни в одном из них четко не указано «добавить функции к вашему URL в этом формате». В результате я не уверен, возможно ли использовать переменные url для выполнения этих задач, но некоторые люди, кажется, полагают, что это так.

Кто-нибудь может помочь с наглядным примером работающего фильтра с использованием WFS GeoServer с параметрами URL?

Ambulare
источник

Ответы:

25

Я полагаю, вы читали этот http://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.html

Вот некоторые примеры запросов, которые отправляют запросы для демонстрационного сервера Boundless, но которые должны работать аналогично вашему собственному серверу, если у вас установлен демонстрационный слой topp: states.

Выберите, где STATE_NAME - Иллинойс

http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.0.0&request=getfeature&typename=topp:states&PROPERTYNAME=STATE_NAME&CQL_FILTER=STATE_NAME='Illinois'

Обратите внимание на использование стандартного параметра WFS PROPERTYNAME, который используется здесь для сокращения вывода. Оставьте вне, если вы хотите все атрибуты, или напишите список для выбора некоторых атрибутов.

Затем выберите состояния с именем, начинающимся с "I"

http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.0.0&request=getfeature&typename=topp:states&PROPERTYNAME=STATE_NAME&CQL_FILTER=STATE_NAME LIKE 'I%25'

Обратите внимание, что строка сравнения имеет значение «I%», но, по крайней мере, в моем браузере (Firefox 31.0) она должна быть закодирована в URL-адресе и «I% 25». Это не упоминается в руководстве по CQL. Если ваши собственные фильтры не работают, это может означать, что вы должны закодировать URL-адрес, а также некоторые другие символы в вашем фильтре.

Если вам нужен geojson, добавьте & outputformat = application / json

http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.0.0&request=getfeature&typename=topp:states&PROPERTYNAME=STATE_NAME&CQL_FILTER=STATE_NAME LIKE 'I%25'&outputformat=application/json
user30184
источник
10
Для всех, кто борется с этим, вы также можете добавить несколько фильтров CQL к URL-адресу, используя формат, &CQL_FILTER=field=value AND field=value AND field=valueно вам нужно, чтобы URL кодировал «И», чтобы кодировались пробелы. Надеюсь, это поможет сэкономить чужое время.
Ambulare
Очень полезный ответ, учебник по геосерверу просто пропускает так много вещей. Как бы вы расширили запрос, чтобы вернуть функцию с координатами XY? Или все функции внутри ограничительной рамки?
Luffydude