Как отфильтровать большие наборы данных в Geoserver WMS?

12

Есть ли хороший способ отфильтровать наборы данных с примерно 50 000 объектов в Geoserver? Я должен был бы выбрать между 100 и 200 функциями на основе идентификаторов. Эти идентификаторы отличаются от FeatureIds. Не удалось найти оператор «IN», аналогичный SQL в стандарте кодировки фильтра OGC. Объединение нескольких операторов PropertyIsEqualTo работает очень плохо.

Подземье
источник

Ответы:

8

Ах. В этом случае вы можете использовать поддержку фильтра GeoServer WMS CQL, а именно:

http://<hostname>/wms?service=WMS&version=1.1.1&request=GetMap&....&cql_filter=IN ('id_1','id_2','id_3')

Более подробная информация доступна на http://geoserver.org/display/GEOSDOC/WMS+vendor+parameters

tomkralidis
источник
Большой! Не знал, что в CQL есть оператор IN. При попытке выполнить это с оператором «=» Apache столкнулся с «414 Request-URI Too Long». Возможно, персонажи, сохраненные таким образом, имеют значение.
Подземье
2
переключиться на публикацию вместо получения.
Ян Тертон
@iant: Вы правы, POST вместо GET работает. Производительность остается плохой, хотя.
Подземье
у вас есть индекс по столбцу FID?
Ян Тертон
@iant: у меня есть индекс по идентификатору, по которому я фильтрую, но не по FID.
Подземье
2

Вы можете передать список идентификаторов функций следующим образом:

ПОЛУЧИТЬ:

http://<hostname>/wfs?service=WFS&version=1.1.0&request=GetFeature&typename=foo&featureid=id_1,id_2,id_3

ПОЧТА:

<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature version="1.1.0" outputFormat="text/xml; subtype=gml/3.1.1" service="WFS" resultType="results" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <wfs:Query typeName="foo">
        <wfs:PropertyName>String</wfs:PropertyName>
        <ogc:Filter>
            <ogc:FeatureId fid="id_1"/>
            <ogc:FeatureId fid="id_2"/>
            <ogc:FeatureId fid="id_3"/>
        </ogc:Filter>
    </wfs:Query>
</wfs:GetFeature>

Опция POST явно более многословна, но меньше, чем зацикливание конструкций PropertyIsEqualTo.

tomkralidis
источник
Это выглядит как хорошее решение для фильтрации FeatureIds. К сожалению, идентификаторы, которые я должен фильтровать (результаты алгоритма другой стороны), не совпадают с FeatureIds. Я обновил вопрос.
Подземье