Come filtrare grandi set di dati in Geoserver WMS?


12

Esiste un buon modo per filtrare i set di dati con circa 50.000 funzioni in Geoserver? Dovrei selezionare tra 100 e 200 funzionalità in base agli ID. Questi ID sono diversi dagli FeatureId. Impossibile trovare un operatore "IN" simile a SQL in OGC Filter Encoding Standard. La combinazione di più operatori PropertyIsEqualTo offre prestazioni davvero scarse.

Risposte:


8

Ah. In tal caso, è possibile utilizzare il supporto del filtro CQL WMS di GeoServer, ovvero:

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

Maggiori informazioni sono disponibili su http://geoserver.org/display/GEOSDOC/WMS+vendor+parameters


Grande! Non sapevo che ci fosse un operatore IN in CQL. Durante questo tentativo con l'operatore "=", Apache ha riscontrato "414 Request-URI To Long Long". Forse i personaggi salvati in questo modo fanno la differenza.
underdark

2
passa a pubblicare invece di ottenere.
Ian Turton

@iant: hai ragione, POST invece di GET funziona. Le prestazioni rimangono scarse però.
underdark

hai un indice nella colonna FID?
Ian Turton

@iant: ho un indice sull'ID per cui sto filtrando, ma non sui FID.
underdark

2

È possibile passare un elenco di ID funzione nel modo seguente:

OTTENERE:

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

INVIARE:

<?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'opzione POST è ovviamente più dettagliata, ma meno dei loop PropertyIsEqualTo per il loop.


Sembra una buona soluzione per filtrare FeatureIds. Sfortunatamente, gli ID che devo filtrare (risultati dell'algoritmo di una parte diversa) non sono gli stessi degli FeatureIds. Ho aggiornato la domanda.
underdark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.