Wie filtere ich große Datensätze in Geoserver WMS?

12

Gibt es eine gute Möglichkeit, Datensätze mit ca. 50.000 Features in Geoserver zu filtern? Ich müsste zwischen 100 und 200 Funktionen basierend auf IDs auswählen. Diese IDs unterscheiden sich von den FeatureIds. Es wurde kein "IN" -Operator gefunden, der SQL in OGC Filter Encoding Standard ähnelt. Das Kombinieren mehrerer PropertyIsEqualTo-Operatoren führt zu einer sehr schlechten Leistung.

Underdunkel
quelle

Antworten:

8

Ah. In diesem Fall können Sie die WMS CQL-Filterunterstützung von GeoServer verwenden, dh:

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

Weitere Informationen finden Sie unter http://geoserver.org/display/GEOSDOC/WMS+vendor+parameters

tomkralidis
quelle
Groß! Wusste nicht, dass es in CQL einen IN-Operator gibt. Während Apache dies mit dem Operator "=" versuchte, stieß er auf "414 Request-URI Too Long". Vielleicht machen die auf diese Weise gespeicherten Zeichen einen Unterschied.
Underdunkel
2
zum posten wechseln anstatt zu bekommen.
Ian Turton
@iant: Du hast recht, POST statt GET funktioniert. Die Leistung bleibt jedoch schlecht.
Underdunkel
Haben Sie einen Index für die Spalte FIDs?
Ian Turton
@iant: Ich habe einen Index für die ID, nach der ich filtere, aber nicht für die FIDs.
Underdunkel
2

Sie können eine Liste der Feature-IDs auf folgende Weise übergeben:

BEKOMMEN:

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

POST:

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

Die POST-Option ist offensichtlich ausführlicher, aber weniger als PropertyIsEqualTo-Konstrukte zu schleifen.

tomkralidis
quelle
Das sieht nach einer guten Lösung zum Filtern von FeatureIds aus. Leider stimmen die zu filternden IDs (Ergebnisse des Algorithmus einer anderen Partei) nicht mit den FeatureIds überein. Ich habe die Frage aktualisiert.
Underdunkel