{"id":9972,"date":"2025-09-16T09:00:06","date_gmt":"2025-09-16T12:00:06","guid":{"rendered":"https:\/\/www.fernandoquadro.com.br\/html\/?p=9972"},"modified":"2025-09-16T14:20:37","modified_gmt":"2025-09-16T17:20:37","slug":"geoserver-wps-clip-union-e-nearest-na-pratica","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2025\/09\/16\/geoserver-wps-clip-union-e-nearest-na-pratica\/","title":{"rendered":"GeoServer WPS: Clip, Union e Nearest na Pr\u00e1tica"},"content":{"rendered":"<p>O GeoServer, por meio do m\u00f3dulo Web Processing Service (WPS), n\u00e3o \u00e9 apenas uma ferramenta de publica\u00e7\u00e3o de dados geoespaciais \u2014 ele tamb\u00e9m permite executar an\u00e1lises espaciais diretamente pela Web.<\/p>\n<p>Neste post, vamos explorar tr\u00eas processos essenciais para qualquer profissional de GIS:<\/p>\n<ul>\n<li><strong>Clip <\/strong>(recorte espacial)<\/li>\n<li><strong>Union<\/strong> (uni\u00e3o de geometrias)<\/li>\n<li><strong>Nearest <\/strong>(an\u00e1lise de vizinhan\u00e7a)<\/li>\n<\/ul>\n<p>Essas opera\u00e7\u00f5es, quando dominadas, abrem caminho para fluxos de trabalho robustos em monitoramento ambiental, planejamento urbano, saneamento e diversas outras \u00e1reas.<\/p>\n<p><strong>1. Clip: Recortando Dados Espaciais<\/strong><\/p>\n<p>O Clip \u00e9 usado para recortar uma camada com base na geometria de outra. \u00c9 muito \u00fatil quando voc\u00ea precisa trabalhar apenas com dados de uma regi\u00e3o espec\u00edfica.<\/p>\n<p>Suponha que voc\u00ea tenha uma camada nacional de hidrografia e deseja analisar apenas os rios que passam pelo estado de S\u00e3o Paulo.<\/p>\n<p>Request de execu\u00e7\u00e3o (WPS Execute):<\/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    identifier=\"gs:Clip\"&gt;\r\n\r\n  &lt;wps:DataInputs&gt;\r\n    &lt;wps:Input&gt;\r\n      &lt;ows:Identifier&gt;features&lt;\/ows:Identifier&gt;\r\n      &lt;wps:Reference mimeType=\"text\/xml\"\r\n          xlink:href=\"http:\/\/localhost:8080\/geoserver\/wfs\"\r\n          method=\"POST\"&gt;\r\n        &lt;wps:Body&gt;\r\n          &lt;wfs:GetFeature service=\"WFS\" version=\"1.0.0\"\r\n              xmlns:wfs=\"http:\/\/www.opengis.net\/wfs\"&gt;\r\n            &lt;wfs:Query typeName=\"workspace:rios_brasil\"\/&gt;\r\n          &lt;\/wfs:GetFeature&gt;\r\n        &lt;\/wps:Body&gt;\r\n      &lt;\/wps:Reference&gt;\r\n    &lt;\/wps:Input&gt;\r\n\r\n    &lt;wps:Input&gt;\r\n      &lt;ows:Identifier&gt;clip&lt;\/ows:Identifier&gt;\r\n      &lt;wps:Reference mimeType=\"text\/xml\"\r\n          xlink:href=\"http:\/\/localhost:8080\/geoserver\/wfs\"\r\n          method=\"POST\"&gt;\r\n        &lt;wps:Body&gt;\r\n          &lt;wfs:GetFeature service=\"WFS\" version=\"1.0.0\"\r\n              xmlns:wfs=\"http:\/\/www.opengis.net\/wfs\"&gt;\r\n            &lt;wfs:Query typeName=\"workspace:estado_sp\"\/&gt;\r\n          &lt;\/wfs:GetFeature&gt;\r\n        &lt;\/wps:Body&gt;\r\n      &lt;\/wps:Reference&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\/json\"&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 retorna apenas os rios contidos dentro do pol\u00edgono de S\u00e3o Paulo, em formato GeoJSON.<\/p>\n<p><strong>2. Union: Combinando Camadas e Geometrias<\/strong><\/p>\n<p>O Union permite integrar duas ou mais camadas em uma \u00fanica sa\u00edda, preservando atributos e geometrias. \u00c9 muito usado para cruzar informa\u00e7\u00f5es espaciais de diferentes fontes.<\/p>\n<p>Imagine que voc\u00ea tem camadas de \u00e1reas de preserva\u00e7\u00e3o e \u00e1reas urbanizadas, e precisa identificar interse\u00e7\u00f5es ou criar uma camada consolidada.<\/p>\n<p>Exemplo de Request:<\/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    identifier=\"JTS:union\"&gt;\r\n\r\n  &lt;wps:DataInputs&gt;\r\n    &lt;wps:Input&gt;\r\n      &lt;ows:Identifier&gt;geom1&lt;\/ows:Identifier&gt;\r\n      &lt;wps:Data&gt;\r\n        &lt;wps:ComplexData mimeType=\"application\/wkt\"&gt;&lt;![CDATA[\r\n          POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))\r\n        ]]&gt;&lt;\/wps:ComplexData&gt;\r\n      &lt;\/wps:Data&gt;\r\n    &lt;\/wps:Input&gt;\r\n\r\n    &lt;wps:Input&gt;\r\n      &lt;ows:Identifier&gt;geom2&lt;\/ows:Identifier&gt;\r\n      &lt;wps:Data&gt;\r\n        &lt;wps:ComplexData mimeType=\"application\/wkt\"&gt;&lt;![CDATA[\r\n          POLYGON((5 5, 15 5, 15 15, 5 15, 5 5))\r\n        ]]&gt;&lt;\/wps:ComplexData&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>O resultado \u00e9 um pol\u00edgono unificado que representa a soma das \u00e1reas fornecidas.<\/p>\n<p><strong>3. Nearest: Identificando o Elemento Mais Pr\u00f3ximo<\/strong><\/p>\n<p>O processo Nearest \u00e9 essencial para an\u00e1lises de vizinhan\u00e7a. Ele encontra a fei\u00e7\u00e3o mais pr\u00f3xima de um ponto ou conjunto de pontos.<\/p>\n<p>Agora vamos supor que precisamos encontrar o hospital mais pr\u00f3ximo de um acidente registrado em tempo real ou identificar a esta\u00e7\u00e3o de tratamento de \u00e1gua mais pr\u00f3xima de uma comunidade rural.<\/p>\n<p>Exemplo de Request<\/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    identifier=\"gs:Nearest\"&gt;\r\n\r\n  &lt;wps:DataInputs&gt;\r\n    &lt;wps:Input&gt;\r\n      &lt;ows:Identifier&gt;features&lt;\/ows:Identifier&gt;\r\n      &lt;wps:Reference mimeType=\"text\/xml\"\r\n          xlink:href=\"http:\/\/localhost:8080\/geoserver\/wfs\"\r\n          method=\"POST\"&gt;\r\n        &lt;wps:Body&gt;\r\n          &lt;wfs:GetFeature service=\"WFS\" version=\"1.0.0\"\r\n              xmlns:wfs=\"http:\/\/www.opengis.net\/wfs\"&gt;\r\n            &lt;wfs:Query typeName=\"workspace:hospitais\"\/&gt;\r\n          &lt;\/wfs:GetFeature&gt;\r\n        &lt;\/wps:Body&gt;\r\n      &lt;\/wps:Reference&gt;\r\n    &lt;\/wps:Input&gt;\r\n\r\n    &lt;wps:Input&gt;\r\n      &lt;ows:Identifier&gt;point&lt;\/ows:Identifier&gt;\r\n      &lt;wps:Data&gt;\r\n        &lt;wps:ComplexData mimeType=\"application\/wkt\"&gt;&lt;![CDATA[\r\n          POINT(-46.6333 -23.5505)\r\n        ]]&gt;&lt;\/wps:ComplexData&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\/json\"&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>O retorno \u00e9 o hospital mais pr\u00f3ximo do ponto fornecido.<\/p>\n<p><strong>4. Boas Pr\u00e1ticas e Observa\u00e7\u00f5es<\/strong><\/p>\n<ul>\n<li>O desempenho das opera\u00e7\u00f5es depende do volume de dados. Prefira recortes pr\u00e9vios ou filtros WFS antes de chamar o WPS.<\/li>\n<li>Para grandes an\u00e1lises (Union de muitos pol\u00edgonos ou Nearest em bases massivas), utilize execu\u00e7\u00e3o ass\u00edncrona.<\/li>\n<li>Combine o WPS com clientes como QGIS ou bibliotecas Python (OWSLib, GeoPandas) para integrar an\u00e1lises em fluxos automatizados.<\/li>\n<li>Sempre valide as geometrias antes do Union, pois pol\u00edgonos inv\u00e1lidos podem gerar erros.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>O GeoServer, por meio do m\u00f3dulo Web Processing Service (WPS), n\u00e3o \u00e9 apenas uma ferramenta de publica\u00e7\u00e3o de dados geoespaciais \u2014 ele tamb\u00e9m permite executar an\u00e1lises espaciais diretamente pela Web. Neste post, vamos explorar tr\u00eas processos essenciais para qualquer profissional&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2025\/09\/16\/geoserver-wps-clip-union-e-nearest-na-pratica\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":9977,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[208,264],"class_list":["post-9972","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\/9972","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=9972"}],"version-history":[{"count":4,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/9972\/revisions"}],"predecessor-version":[{"id":9980,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/9972\/revisions\/9980"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/9977"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=9972"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=9972"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=9972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}