Geoserver WMS에서 빅 데이터 세트를 필터링하는 방법은 무엇입니까?


12

Geoserver에서 약 50,000 개의 기능으로 데이터 세트를 필터링하는 좋은 방법이 있습니까? ID를 기준으로 100 ~ 200 개의 기능을 선택해야합니다. 이 ID는 FeatureId와 다릅니다. OGC 필터 인코딩 표준에서 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"에 빠졌습니다. 이런 식으로 저장된 캐릭터가 차이를 만들 수도 있습니다.
underdark

2
get 대신 post로 전환하십시오.
Ian Turton

@iant : 맞습니다. GET 대신 POST가 작동합니다. 그래도 성능은 여전히 ​​낮습니다.
underdark

FID 열에 색인이 있습니까?
Ian Turton

@iant : 필터링 할 ID에 대한 색인이 있지만 FID에는 없습니다.
underdark

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와 동일하지 않습니다. 질문을 업데이트했습니다.
underdark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.