¿Cómo filtrar grandes conjuntos de datos en Geoserver WMS?

12

¿Hay una buena manera de filtrar conjuntos de datos con aproximadamente 50,000 características en Geoserver? Tendría que seleccionar entre 100 y 200 características basadas en identificadores. Estos identificadores son diferentes de los FeatureIds. No se pudo encontrar un operador "IN" similar a SQL en OGC Filter Encoding Standard. La combinación de múltiples operadores PropertyIsEqualTo funciona muy mal.

bajo oscuro
fuente

Respuestas:

8

Ah En ese caso, puede utilizar el soporte del filtro CMS WMS de GeoServer, es decir:

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

Más información está disponible en http://geoserver.org/display/GEOSDOC/WMS+vendor+parameters

tomkralidis
fuente
¡Excelente! No sabía que hay un operador IN en CQL. Mientras intentaba esto con el operador "=", Apache se encontró con "414 Request-URI Too Long". Tal vez los personajes guardados de esta manera marcan la diferencia.
oscuro
2
cambie a publicar en lugar de obtener.
Ian Turton
@iant: Tienes razón, POST en lugar de GET funciona. Sin embargo, el rendimiento sigue siendo pobre.
oscuro
¿tiene un índice en la columna FID?
Ian Turton
@iant: Tengo un índice en la identificación por la que estoy filtrando, pero no en los FID.
oscuro
2

Puede pasar una lista de ID de características de la siguiente manera:

OBTENER:

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

ENVIAR:

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

La opción POST es obviamente más detallada, pero menos que bucle de construcciones PropertyIsEqualTo.

tomkralidis
fuente
Parece una buena solución para filtrar FeatureIds. Desafortunadamente, los identificadores que tengo que filtrar (resultados del algoritmo de una parte diferente) no son los mismos que los FeatureIds. Actualicé la pregunta.
oscuro