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.

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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.