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.