O GeoServer, por meio do módulo Web Processing Service (WPS), não é apenas uma ferramenta de publicação de dados geoespaciais — ele também permite executar análises espaciais diretamente pela Web.
Neste post, vamos explorar três processos essenciais para qualquer profissional de GIS:
- Clip (recorte espacial)
- Union (união de geometrias)
- Nearest (análise de vizinhança)
Essas operações, quando dominadas, abrem caminho para fluxos de trabalho robustos em monitoramento ambiental, planejamento urbano, saneamento e diversas outras áreas.
1. Clip: Recortando Dados Espaciais
O Clip é usado para recortar uma camada com base na geometria de outra. É muito útil quando você precisa trabalhar apenas com dados de uma região específica.
Suponha que você tenha uma camada nacional de hidrografia e deseja analisar apenas os rios que passam pelo estado de São Paulo.
Request de execução (WPS Execute):
<wps:Execute service="WPS" version="1.0.0"
xmlns:wps="http://www.opengis.net/wps/1.0.0"
xmlns:ows="http://www.opengis.net/ows/1.1"
identifier="gs:Clip">
<wps:DataInputs>
<wps:Input>
<ows:Identifier>features</ows:Identifier>
<wps:Reference mimeType="text/xml"
xlink:href="http://localhost:8080/geoserver/wfs"
method="POST">
<wps:Body>
<wfs:GetFeature service="WFS" version="1.0.0"
xmlns:wfs="http://www.opengis.net/wfs">
<wfs:Query typeName="workspace:rios_brasil"/>
</wfs:GetFeature>
</wps:Body>
</wps:Reference>
</wps:Input>
<wps:Input>
<ows:Identifier>clip</ows:Identifier>
<wps:Reference mimeType="text/xml"
xlink:href="http://localhost:8080/geoserver/wfs"
method="POST">
<wps:Body>
<wfs:GetFeature service="WFS" version="1.0.0"
xmlns:wfs="http://www.opengis.net/wfs">
<wfs:Query typeName="workspace:estado_sp"/>
</wfs:GetFeature>
</wps:Body>
</wps:Reference>
</wps:Input>
</wps:DataInputs>
<wps:ResponseForm>
<wps:RawDataOutput mimeType="application/json">
<ows:Identifier>result</ows:Identifier>
</wps:RawDataOutput>
</wps:ResponseForm>
</wps:Execute>
Esse request retorna apenas os rios contidos dentro do polígono de São Paulo, em formato GeoJSON.
2. Union: Combinando Camadas e Geometrias
O Union permite integrar duas ou mais camadas em uma única saída, preservando atributos e geometrias. É muito usado para cruzar informações espaciais de diferentes fontes.
Imagine que você tem camadas de áreas de preservação e áreas urbanizadas, e precisa identificar interseções ou criar uma camada consolidada.
Exemplo de Request:
<wps:Execute service="WPS" version="1.0.0"
xmlns:wps="http://www.opengis.net/wps/1.0.0"
xmlns:ows="http://www.opengis.net/ows/1.1"
identifier="JTS:union">
<wps:DataInputs>
<wps:Input>
<ows:Identifier>geom1</ows:Identifier>
<wps:Data>
<wps:ComplexData mimeType="application/wkt"><![CDATA[
POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))
]]></wps:ComplexData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>geom2</ows:Identifier>
<wps:Data>
<wps:ComplexData mimeType="application/wkt"><![CDATA[
POLYGON((5 5, 15 5, 15 15, 5 15, 5 5))
]]></wps:ComplexData>
</wps:Data>
</wps:Input>
</wps:DataInputs>
<wps:ResponseForm>
<wps:RawDataOutput mimeType="application/gml+xml">
<ows:Identifier>result</ows:Identifier>
</wps:RawDataOutput>
</wps:ResponseForm>
</wps:Execute>
O resultado é um polígono unificado que representa a soma das áreas fornecidas.
3. Nearest: Identificando o Elemento Mais Próximo
O processo Nearest é essencial para análises de vizinhança. Ele encontra a feição mais próxima de um ponto ou conjunto de pontos.
Agora vamos supor que precisamos encontrar o hospital mais próximo de um acidente registrado em tempo real ou identificar a estação de tratamento de água mais próxima de uma comunidade rural.
Exemplo de Request
<wps:Execute service="WPS" version="1.0.0"
xmlns:wps="http://www.opengis.net/wps/1.0.0"
xmlns:ows="http://www.opengis.net/ows/1.1"
identifier="gs:Nearest">
<wps:DataInputs>
<wps:Input>
<ows:Identifier>features</ows:Identifier>
<wps:Reference mimeType="text/xml"
xlink:href="http://localhost:8080/geoserver/wfs"
method="POST">
<wps:Body>
<wfs:GetFeature service="WFS" version="1.0.0"
xmlns:wfs="http://www.opengis.net/wfs">
<wfs:Query typeName="workspace:hospitais"/>
</wfs:GetFeature>
</wps:Body>
</wps:Reference>
</wps:Input>
<wps:Input>
<ows:Identifier>point</ows:Identifier>
<wps:Data>
<wps:ComplexData mimeType="application/wkt"><![CDATA[
POINT(-46.6333 -23.5505)
]]></wps:ComplexData>
</wps:Data>
</wps:Input>
</wps:DataInputs>
<wps:ResponseForm>
<wps:RawDataOutput mimeType="application/json">
<ows:Identifier>result</ows:Identifier>
</wps:RawDataOutput>
</wps:ResponseForm>
</wps:Execute>
O retorno é o hospital mais próximo do ponto fornecido.
4. Boas Práticas e Observações
- O desempenho das operações depende do volume de dados. Prefira recortes prévios ou filtros WFS antes de chamar o WPS.
- Para grandes análises (Union de muitos polígonos ou Nearest em bases massivas), utilize execução assíncrona.
- Combine o WPS com clientes como QGIS ou bibliotecas Python (OWSLib, GeoPandas) para integrar análises em fluxos automatizados.
- Sempre valide as geometrias antes do Union, pois polígonos inválidos podem gerar erros.