Geoserver 2.11.2 CQL_FILTER getFeature запрос - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь выполнить запрос getFeature, используя CQL_FILTER. Фильтр имеет два компонента, пространственный фильтр, определенный как Within (geometry, POLYGON ((144.9085 -37.8540,144.9085 -37.7756,145.0129 -37.7756,145.0129 -37.8540,144.9085 -37.8540))), а также компонент фильтра атрибутов person_usually_resident> 400. Это должно вернуть более 100 полигонов. Я получаю ноль возвратов. Здесь что-то явно не так?

http://13.55.5.169: 8008 / геосервер / abs / wfs? ЗАПРОС = GetFeature & SERVICE = WFS & VERSION = 1.1.0 & TYPENAME = 2016MBmeshblocks & srsName = EPSG: 4326 & DRUTPUTFORMAT & CAPT = ПРИМЕНЕНИЕ Внутри (геометрия, POLYGON ((144,9085 -37,8540,144,9085 -37,7756,145.0129 -37,7756,145.0129 -37,8540,144,9085 -37,8540)))

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Спасибо, Ян, но, боюсь, я это уже проверил.

Я знаю, что пространственные данные верны, так как я использовал BBOX CQL_FILTER с той же геометрией, и он отлично работает, возвращая правильное количество данных объектов и никакого urlencoding. Это также подтверждает, что мы смотрим на правильный слой и геометрию. Это также возвращает примерно то же количество объектов, что и пространственные фильтры, которые должны возвращаться - будут небольшие отличия, потому что Inside немного отличается от BBOX.

http://13.55.5.169:8008/geoserver/abs/wfs?REQUEST=GetFeature&SERVICE=WFS&VERSION=1.0.0&TYPENAME=2016MBmeshblocks&OUTPUTFORMAT=application/json&CQL_FILTER=BBOX(geometry,144.7434,-37.9707,145.1608,-37.6572)%20AND%20persons_usually_resident%20%3E%20400

Я также проверил синтаксис WKT POLYGON ((144.7434 -37.9707,144.7434 -37.6572,145.1608 -37.6572,145.1608 -37.9707,144.7434 -37.9707)) через https://arthur-e.github.io/Wicket/sandbox-gmaps3.html, поэтому я чувствую уверенность, что это правильно.

Кроме того, я безуспешно попробовал фильтр OG C.

http://13.55.5.169:8008/geoserver/abs/wfs?REQUEST=GetFeature&SERVICE=WFS&VERSION=1.1.0&TYPENAME=2016MBmeshblocks&OUTPUTFORMAT=application/json&FILTER=<Filter><And><PropertyIsGreaterThan><PropertyName>persons_usually_resident</PropertyName><Literal>400</Literal></PropertyIsGreaterThan><Within><PropertyName>geometry</PropertyName><Polygon><outerBoundaryIs><LinearRing><coordinates decimal='.' cs=':' ts=' '>144.7434:-37.9707 144.7434:-37.6572 145.1608:-37.6572 145.1608:-37.9707 144.7434:-37.9707</coordinates></LinearRing></outerBoundaryIs></Polygon></Within></And></Filter>

Мне нужно иметь возможность поддерживать пространственный фильтр OG C или CQL с поисковым полигоном переменного размера, который может быть круг или цифровая область пользователя. Я могу сделать это в сервисе Cubewerx WFS, но я действительно борюсь с Geoserver 2.11.2.

Единственное, о чем я могу подумать, это то, что настройка контроля доступа на нашем геосервере может быть установлена ​​неправильно. Можете ли вы посоветовать там?

http://13.55.5.169:8008/geoserver/abs/wfs?request=getcapabilities&service=WFS

конкретно ...

<fes:Constraint name="ImplementsSpatialFilter">
<ows:NoValues/>
<ows:DefaultValue>FALSE</ows:DefaultValue>
</fes:Constraint>

Если это проблема, как я могу изменить это ограничение по умолчанию?

Мы также думаем о переходе на более новую версию. версия геосервера.

Еще раз спасибо за вашу помощь. Бред ....

0 голосов
/ 05 февраля 2020

Вам необходимо urlencode параметра CQL_FILTER, например, это работает для меня:

curl -v -G --data-urlencode "CQL_FILTER=Within(geometry,POLYGON((144.9085 -37.8540,144.9085 -37.7756,145.0129 -37.7756,145.0129 -37.8540,144.9085 -37.8540))) AND persons_usually_resident > 400"  \
"http://13.55.5.169:8008/geoserver/abs/wfs?REQUEST=GetFeature&SERVICE=WFS&VERSION=1.1.0&TYPENAME=2016MBmeshblocks&srsName=EPSG:4326&OUTPUTFORMAT=application/json&DRAPEID=5445"
...