Passando parâmetros de filtro para o GeoServer WFS via URL?

17

Estou tentando usar a função CURL do PHP para buscar informações geoJSON de uma instância do GeoServer. Estou fazendo isso usando variáveis ​​de URL em vez de tentar construir uma solicitação GetFeature xml completa.

No entanto, eu gostaria de obter um subconjunto dos resultados com base em alguns conteúdos dos campos de propriedades.

Então, enquanto eu posso obter todos os resultados usando este URL:

http://www.myURL.com/geoserver/namespace/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=layername&outputFormat=json&BBOX=1,2,3,4

também posso limitar os resultados para "Onde o campo LIKE value" ou "field = value"?

Passei uma hora vasculhando a documentação do Geoserver / ECQL e nada indica claramente "anexar as funções à sua URL neste formato". Como resultado, não estou claro se é possível usar variáveis ​​de URL para executar essas tarefas, mas algumas pessoas parecem sugerir que sim.

Alguém pode ajudar com um exemplo claro de um filtro funcional usando o WFS do GeoServer com parâmetros de URL?

Ambulare
fonte

Respostas:

25

Suponho que você esteja lendo este http://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.html

A seguir, alguns exemplos de pedidos que estão enviando consultas para o servidor de demonstração do Boundless, mas que devem funcionar de maneira semelhante com o seu próprio servidor se você tiver o topp da camada de demonstração: states instalado.

Selecione onde STATE_NAME é Illinois

http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.0.0&request=getfeature&typename=topp:states&PROPERTYNAME=STATE_NAME&CQL_FILTER=STATE_NAME='Illinois'

Observe o uso do parâmetro WFS padrão PROPERTYNAME, usado aqui para encurtar a saída. A licença está desativada se você desejar todos os atributos ou escreva uma lista para selecionar alguns atributos.

Em seguida, selecione os estados com o nome começando com "I"

http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.0.0&request=getfeature&typename=topp:states&PROPERTYNAME=STATE_NAME&CQL_FILTER=STATE_NAME LIKE 'I%25'

Observe que a sequência de comparação é 'I%', mas pelo menos no meu navegador (Firefox 31.0), ela deve ser codificada em URL e vem 'I% 25'. Isso não é mencionado no tutorial CQL. Se seus próprios filtros falharem, isso pode significar que você também deve codificar por URL alguns outros caracteres no seu filtro.

Se você precisar de geojson, adicione & outputformat = application / json

http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.0.0&request=getfeature&typename=topp:states&PROPERTYNAME=STATE_NAME&CQL_FILTER=STATE_NAME LIKE 'I%25'&outputformat=application/json
user30184
fonte
10
Para qualquer outra pessoa que esteja enfrentando problemas, também é possível adicionar vários filtros CQL à URL usando o formato &CQL_FILTER=field=value AND field=value AND field=value- mas é necessário codificar a URL "AND" para que os espaços sejam codificados. Espero que isso ajude a economizar tempo de outra pessoa.
Ambulare
Resposta muito útil, o tutorial do geoserver deixa de fora muitas coisas. Como você estenderia a consulta para retornar o recurso que possui coordenadas XY? Ou todos os recursos dentro de uma caixa delimitadora?
Luffydude