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.

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


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.