{"id":9966,"date":"2025-09-15T09:00:51","date_gmt":"2025-09-15T12:00:51","guid":{"rendered":"https:\/\/www.fernandoquadro.com.br\/html\/?p=9966"},"modified":"2025-09-15T12:16:38","modified_gmt":"2025-09-15T15:16:38","slug":"introducao-ao-wps-no-geoserver","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2025\/09\/15\/introducao-ao-wps-no-geoserver\/","title":{"rendered":"Introdu\u00e7\u00e3o ao WPS no GeoServer"},"content":{"rendered":"<p>O Web Processing Service (WPS), definido pelo OGC, \u00e9 um padr\u00e3o que permite executar processos de an\u00e1lise espacial via Web. No GeoServer, o m\u00f3dulo WPS exp\u00f5e fun\u00e7\u00f5es nativas e customizadas que podem ser chamadas por requisi\u00e7\u00f5es HTTP, retornando resultados em formatos como GML, GeoJSON ou at\u00e9 imagens raster.<\/p>\n<p><strong>1. Opera\u00e7\u00f5es Fundamentais do WPS<\/strong><br \/>\n<strong>1.1 GetCapabilities<\/strong><\/p>\n<p>\u00c9 o ponto de partida: retorna um documento XML com os metadados do servi\u00e7o.<br \/>\nExemplo de chamada:<\/p>\n<pre>\r\nhttp:\/\/localhost:8080\/geoserver\/ows?service=WPS&version=1.0.0&request=GetCapabilities\r\n<\/pre>\n<p>O resultado lista todos os processos dispon\u00edveis, seus identificadores e vers\u00f5es.<\/p>\n<p><strong>1.2 DescribeProcess<\/strong><\/p>\n<p>Usada para detalhar um processo espec\u00edfico, como por exemplo descrever o processo de Buffer.<br \/>\nExemplo de chamada:<\/p>\n<pre>\r\nhttp:\/\/localhost:8080\/geoserver\/ows?service=WPS&version=1.0.0&request=DescribeProcess&identifier=JTS:buffer\r\n<\/pre>\n<p>A resposta XML mostra par\u00e2metros obrigat\u00f3rios e opcionais:<\/p>\n<p><strong>Input:<\/strong> geometria (linha, ponto, pol\u00edgono), dist\u00e2ncia do buffer, unidades.<br \/>\n<strong>Output:<\/strong> geometria resultante (normalmente em GML).<\/p>\n<p><strong>1.3 Execute<\/strong><\/p>\n<p>Permite rodar de fato um processo, como por exemplo gerar buffer de 100 metros em torno de rios:<br \/>\nExemplo de chamada:<\/p>\n<pre>\r\n&lt;wps:Execute service=\"WPS\" version=\"1.0.0\"\r\n    xmlns:wps=\"http:\/\/www.opengis.net\/wps\/1.0.0\"\r\n    xmlns:ows=\"http:\/\/www.opengis.net\/ows\/1.1\"\r\n    xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\"\r\n    xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n    xsi:schemaLocation=\"http:\/\/www.opengis.net\/wps\/1.0.0\r\n    http:\/\/schemas.opengis.net\/wps\/1.0.0\/wpsExecute_request.xsd\"\r\n    identifier=\"JTS:buffer\"&gt;\r\n\r\n  &lt;wps:DataInputs&gt;\r\n    &lt;wps:Input&gt;\r\n      &lt;ows:Identifier&gt;geom&lt;\/ows:Identifier&gt;\r\n      &lt;wps:Data&gt;\r\n        &lt;wps:ComplexData mimeType=\"application\/wkt\"&gt;&lt;![CDATA[\r\n          LINESTRING(30 10, 10 30, 40 40)\r\n        ]]&gt;&lt;\/wps:ComplexData&gt;\r\n      &lt;\/wps:Data&gt;\r\n    &lt;\/wps:Input&gt;\r\n    &lt;wps:Input&gt;\r\n      &lt;ows:Identifier&gt;distance&lt;\/ows:Identifier&gt;\r\n      &lt;wps:Data&gt;\r\n        &lt;wps:LiteralData&gt;100&lt;\/wps:LiteralData&gt;\r\n      &lt;\/wps:Data&gt;\r\n    &lt;\/wps:Input&gt;\r\n  &lt;\/wps:DataInputs&gt;\r\n\r\n  &lt;wps:ResponseForm&gt;\r\n    &lt;wps:RawDataOutput mimeType=\"application\/gml+xml\"&gt;\r\n      &lt;ows:Identifier&gt;result&lt;\/ows:Identifier&gt;\r\n    &lt;\/wps:RawDataOutput&gt;\r\n  &lt;\/wps:ResponseForm&gt;\r\n&lt;\/wps:Execute&gt;\r\n<\/pre>\n<p>Esse request cria um buffer de 100 metros ao redor de uma linha fornecida em WKT.<\/p>\n<p><strong>2. Execu\u00e7\u00e3o S\u00edncrona vs Ass\u00edncrona<\/strong><\/p>\n<p><strong>S\u00edncrona: <\/strong>o cliente aguarda o processo terminar e recebe a resposta direta.<br \/>\n<strong>Ass\u00edncrona:<\/strong> ideal para an\u00e1lises pesadas; o WPS retorna um link onde o cliente pode acompanhar o status e baixar o resultado quando pronto.<\/p>\n<p><strong>3. Processos Comuns no GeoServer via WPS<\/strong><\/p>\n<ul>\n<li>JTS:buffer \u2013 cria\u00e7\u00e3o de zonas de influ\u00eancia.<\/li>\n<li>gs:Reproject \u2013 reproje\u00e7\u00e3o de dados entre sistemas de coordenadas.<\/li>\n<li>gs:Area \u2013 c\u00e1lculo de \u00e1rea de pol\u00edgonos.<\/li>\n<li>gs:Bounds \u2013 obten\u00e7\u00e3o do envelope m\u00ednimo de uma geometria.<\/li>\n<\/ul>\n<p>Al\u00e9m disso, \u00e9 poss\u00edvel desenvolver processos customizados em Java e integr\u00e1-los ao GeoServer.<\/p>\n<p><strong>4. Integra\u00e7\u00e3o com QGIS e Python<\/strong><\/p>\n<p>QGIS: permite acessar WPS como provedor de processamento, facilitando a execu\u00e7\u00e3o sem precisar lidar com XML manualmente.<\/p>\n<p>Python (OWSLib):<\/p>\n<pre>\r\nfrom owslib.wps import WebProcessingService\r\n\r\nwps = WebProcessingService('http:\/\/localhost:8080\/geoserver\/ows', version='1.0.0')\r\nprocess = wps.describeprocess('JTS:buffer')\r\nexecution = wps.execute('JTS:buffer', inputs=[('geom','POINT(10 10)'), ('distance',100)])\r\n<\/pre>\n<p><strong>5. Boas Pr\u00e1ticas<\/strong><\/p>\n<ul>\n<li>Controlar tamanho m\u00e1ximo de uploads para evitar uso excessivo de recursos.<\/li>\n<li>Usar execu\u00e7\u00e3o ass\u00edncrona para an\u00e1lises que demandam grande processamento.<\/li>\n<li>Monitorar logs do GeoServer para identificar gargalos em processos WPS.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>O Web Processing Service (WPS), definido pelo OGC, \u00e9 um padr\u00e3o que permite executar processos de an\u00e1lise espacial via Web. No GeoServer, o m\u00f3dulo WPS exp\u00f5e fun\u00e7\u00f5es nativas e customizadas que podem ser chamadas por requisi\u00e7\u00f5es HTTP, retornando resultados em&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2025\/09\/15\/introducao-ao-wps-no-geoserver\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":9976,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[208,264],"class_list":["post-9966","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-geoserver","tag-wps"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/9966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=9966"}],"version-history":[{"count":7,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/9966\/revisions"}],"predecessor-version":[{"id":9979,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/9966\/revisions\/9979"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/9976"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=9966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=9966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=9966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}