Jak filtrować duże zbiory danych w Geoserver WMS?

12

Czy istnieje dobry sposób na filtrowanie zbiorów danych z około 50 000 funkcji w Geoserver? Musiałbym wybrać od 100 do 200 funkcji na podstawie identyfikatorów. Te identyfikatory różnią się od FeatureIds. Nie można znaleźć operatora „IN” podobnego do SQL w standardzie OGC Filter Encoding Standard. Łączenie wielu operatorów PropertyIsEqualTo działa naprawdę słabo.

podmrok
źródło

Odpowiedzi:

8

Ach W takim przypadku możesz użyć obsługi filtra WMS CQL przez GeoServer, tj .:

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

Więcej informacji jest dostępnych na stronie http://geoserver.org/display/GEOSDOC/WMS+vendor+parameters

tomkralidis
źródło
Wspaniały! Nie wiedziałem, że w CQL jest operator IN. Próbując tego z operatorem „=”, Apache natrafił na „414 Żądanie URI zbyt długo”. Może postacie zapisane w ten sposób mogą coś zmienić.
podmroku
2
zmień na post zamiast get.
Ian Turton
@iant: Masz rację, POST zamiast GET działa. Wydajność pozostaje jednak słaba.
podmroku
czy masz indeks w kolumnie FID?
Ian Turton
@iant: Mam indeks identyfikatora, dla którego filtruję, ale nie ma identyfikatorów FID.
podmrok
2

Możesz przekazać listę identyfikatorów funkcji w następujący sposób:

DOSTAĆ:

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

POCZTA:

<?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>

Opcja POST jest oczywiście bardziej szczegółowa, ale mniej niż zapętlanie konstrukcji PropertyIsEqualTo.

tomkralidis
źródło
To wygląda na dobre rozwiązanie do filtrowania FeatureIds. Niestety identyfikatory, które muszę filtrować (wyniki algorytmu innej strony) nie są takie same jak FeatureIds. Zaktualizowałem pytanie.
podmrok