Comment filtrer les grands ensembles de données dans Geoserver WMS?

12

Existe-t-il un bon moyen de filtrer les jeux de données avec environ 50 000 fonctionnalités dans Geoserver? Je devrais sélectionner entre 100 et 200 fonctionnalités en fonction des identifiants. Ces identifiants sont différents des FeatureIds. Impossible de trouver un opérateur "IN" similaire à SQL dans OGC Filter Encoding Standard. La combinaison de plusieurs opérateurs PropertyIsEqualTo fonctionne très mal.

obscur
la source

Réponses:

8

Ah. Dans ce cas, vous pouvez utiliser le support du filtre WMS CQL de GeoServer, c'est-à-dire:

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

Plus d'informations sont disponibles sur http://geoserver.org/display/GEOSDOC/WMS+vendor+parameters

tomkralidis
la source
Génial! Ne savait pas qu'il existe un opérateur IN dans CQL. En essayant ceci avec l'opérateur "=", Apache a rencontré "414 Request-URI Too Long". Peut-être que les personnages enregistrés de cette façon font une différence.
underdark
2
passer à poster au lieu de get.
Ian Turton
@iant: Vous avez raison, POST au lieu de GET fonctionne. La performance reste cependant médiocre.
underdark
avez-vous un index sur la colonne FID?
Ian Turton
@iant: J'ai un index sur l'ID pour lequel je filtre, mais pas sur les FID.
underdark
2

Vous pouvez transmettre une liste d'ID de fonctionnalité de la manière suivante:

AVOIR:

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

PUBLIER:

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

L'option POST est évidemment plus verbeuse, mais moins que les constructions PropertyIsEqualTo en boucle.

tomkralidis
la source
Cela ressemble à une bonne solution pour filtrer les FeatureIds. Malheureusement, les identifiants que je dois filtrer (résultats de l'algorithme d'un tiers différent) ne sont pas les mêmes que les FeatureIds. J'ai mis à jour la question.
underdark