Bagaimana cara memfilter dataset besar di Geoserver WMS?

12

Apakah ada cara yang baik untuk memfilter dataset dengan sekitar 50.000 fitur di Geoserver? Saya harus memilih antara 100 dan 200 fitur berdasarkan id. Id ini berbeda dari FeatureIds. Tidak dapat menemukan operator "IN" yang mirip dengan SQL di OGC Filter Encoding Standard. Menggabungkan beberapa operator PropertyIsEqualTo berkinerja sangat buruk.

underdark
sumber

Jawaban:

8

Ah. Dalam hal ini, Anda bisa menggunakan dukungan filter WMS CQL GeoServer, yaitu:

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

Informasi lebih lanjut tersedia di http://geoserver.org/display/GEOSDOC/WMS+vendor+parameters

tomkralidis
sumber
Bagus! Tidak tahu bahwa ada operator IN di CQL. Saat mencoba ini dengan operator "=", Apache berlari ke "414 Permintaan-URI Terlalu Panjang". Mungkin karakter yang disimpan dengan cara ini membuat perbedaan.
underdark
2
beralih ke pos alih-alih mendapatkan.
Ian Turton
@iant: Anda benar, POST bukannya GET bekerja. Namun kinerjanya tetap buruk.
underdark
apakah Anda memiliki indeks pada kolom FID?
Ian Turton
@iant: Saya memiliki indeks untuk id saya memfilter, tetapi tidak pada FID.
underdark
2

Anda dapat melewati daftar id fitur dengan cara berikut:

DAPATKAN:

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

POS:

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

Opsi POST jelas lebih bertele-tele, tetapi kurang dari perulangan konstruksi PropertyIsEqualTo.

tomkralidis
sumber
Itu terlihat seperti solusi yang baik untuk memfilter FeatureIds. Sayangnya, id yang harus saya filter (hasil dari algoritma pihak lain) tidak sama dengan FeatureIds. Saya memperbarui pertanyaan.
underdark