Geoserver WMSで大きなデータセットをフィルタリングする方法は?


12

Geoserverで約50,000個のフィーチャを持つデータセットをフィルタリングする良い方法はありますか?IDに基づいて100〜200の機能を選択する必要があります。これらのIDは、FeatureIdとは異なります。OGC Filter Encoding StandardのSQLに類似した「IN」演算子が見つかりませんでした。複数のPropertyIsEqualTo演算子を組み合わせると、パフォーマンスが非常に低下します。

回答:


8

あ。その場合、GeoServerのWMS CQLフィルターサポートを使用できます。

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

詳細については、http://geoserver.org/display/GEOSDOC/WMS+vendor+parametersをご覧ください。


すごい!CQLにIN演算子があることを知りませんでした。「=」演算子を使用してこれを試しているときに、Apacheは「414 Request-URI Too Long」に遭遇しました。この方法で保存されたキャラクターが違いを生むかもしれません。
暗闇

2
getの代わりにpostに切り替えます。
イアンタートン

@iant:そのとおりです。GETではなくPOSTが機能します。ただし、パフォーマンスは低いままです。
アンダーダーク

FID列にインデックスがありますか?
イアンタートン

@iant:フィルタリングするIDにインデックスがありますが、FIDにはありません。
アンダーダーク

2

次の方法で機能IDのリストを渡すことができます。

取得する:

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

役職:

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

POSTオプションの方が明らかに冗長ですが、PropertyIsEqualTo構造のループよりも少ないです。


これは、FeatureIdのフィルタリングに適したソリューションのようです。残念ながら、フィルタリングする必要があるID(別のパーティのアルゴリズムの結果)は、FeatureIdとは異なります。質問を更新しました。
暗闇
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.