O Web Processing Service (WPS), definido pelo OGC, é um padrão que permite executar processos de análise espacial via Web. No GeoServer, o módulo WPS expõe funções nativas e customizadas que podem ser chamadas por requisições HTTP, retornando resultados em formatos como GML, GeoJSON ou até imagens raster.

1. Operações Fundamentais do WPS
1.1 GetCapabilities

É o ponto de partida: retorna um documento XML com os metadados do serviço.
Exemplo de chamada:

http://localhost:8080/geoserver/ows?service=WPS&version=1.0.0&request=GetCapabilities

O resultado lista todos os processos disponíveis, seus identificadores e versões.

1.2 DescribeProcess

Usada para detalhar um processo específico, como por exemplo descrever o processo de Buffer.
Exemplo de chamada:

http://localhost:8080/geoserver/ows?service=WPS&version=1.0.0&request=DescribeProcess&identifier=JTS:buffer

A resposta XML mostra parâmetros obrigatórios e opcionais:

Input: geometria (linha, ponto, polígono), distância do buffer, unidades.
Output: geometria resultante (normalmente em GML).

1.3 Execute

Permite rodar de fato um processo, como por exemplo gerar buffer de 100 metros em torno de rios:
Exemplo de chamada:

<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"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.opengis.net/wps/1.0.0
    http://schemas.opengis.net/wps/1.0.0/wpsExecute_request.xsd"
    identifier="JTS:buffer">

  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>geom</ows:Identifier>
      <wps:Data>
        <wps:ComplexData mimeType="application/wkt"><![CDATA[
          LINESTRING(30 10, 10 30, 40 40)
        ]]></wps:ComplexData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>distance</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>100</wps:LiteralData>
      </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>

Esse request cria um buffer de 100 metros ao redor de uma linha fornecida em WKT.

2. Execução Síncrona vs Assíncrona

Síncrona: o cliente aguarda o processo terminar e recebe a resposta direta.
Assíncrona: ideal para análises pesadas; o WPS retorna um link onde o cliente pode acompanhar o status e baixar o resultado quando pronto.

3. Processos Comuns no GeoServer via WPS

  • JTS:buffer – criação de zonas de influência.
  • gs:Reproject – reprojeção de dados entre sistemas de coordenadas.
  • gs:Area – cálculo de área de polígonos.
  • gs:Bounds – obtenção do envelope mínimo de uma geometria.

Além disso, é possível desenvolver processos customizados em Java e integrá-los ao GeoServer.

4. Integração com QGIS e Python

QGIS: permite acessar WPS como provedor de processamento, facilitando a execução sem precisar lidar com XML manualmente.

Python (OWSLib):

from owslib.wps import WebProcessingService

wps = WebProcessingService('http://localhost:8080/geoserver/ows', version='1.0.0')
process = wps.describeprocess('JTS:buffer')
execution = wps.execute('JTS:buffer', inputs=[('geom','POINT(10 10)'), ('distance',100)])

5. Boas Práticas

  • Controlar tamanho máximo de uploads para evitar uso excessivo de recursos.
  • Usar execução assíncrona para análises que demandam grande processamento.
  • Monitorar logs do GeoServer para identificar gargalos em processos WPS.