{"id":8742,"date":"2020-04-09T07:30:59","date_gmt":"2020-04-09T10:30:59","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=8742"},"modified":"2020-04-09T10:14:06","modified_gmt":"2020-04-09T13:14:06","slug":"postgis-3-geos-3-8","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2020\/04\/09\/postgis-3-geos-3-8\/","title":{"rendered":"PostGIS 3: GEOS 3.8"},"content":{"rendered":"<p>Embora o PostGIS inclua muitos algoritmos e funcionalidades pr\u00f3prias, ele tamb\u00e9m adiciona intelig\u00eancia geoespacial ao PostgreSQL, vinculando bibliotecas especializadas para lidar com problemas espec\u00edficos:<\/p>\n<ul>\n<li><a href=\"https:\/\/proj.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Proj<\/a> para suporte ao sistema de refer\u00eancia de coordenadas;<\/li>\n<li><a href=\"https:\/\/gdal.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">GDAL<\/a> para fun\u00e7\u00f5es e formatos raster;<\/li>\n<li><a href=\"https:\/\/trac.osgeo.org\/geos\" rel=\"noopener noreferrer\" target=\"_blank\">GEOS<\/a> para geometria computacional (opera\u00e7\u00f5es b\u00e1sicas);<\/li>\n<li><a href=\"https:\/\/www.cgal.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">CGAL<\/a> para mais geometria computacional (opera\u00e7\u00f5es 3D); e para suporte ao formato libxml2, libjsonc, libprotobuf-c<\/li>\n<\/ul>\n<p>Muitas das fun\u00e7\u00f5es padr\u00e3o de processamento de geometria no PostGIS s\u00e3o realmente avaliadas na biblioteca do GEOS; portanto, as atualiza\u00e7\u00f5es no GEOS s\u00e3o muito importantes para o PostGIS &#8211; elas adicionam novas funcionalidades ou suavizam o comportamento das fun\u00e7\u00f5es existentes. As fun\u00e7\u00f5es apoiadas pelo GEOS incluem:<\/p>\n<ul>\n<li><a href=\"https:\/\/postgis.net\/docs\/ST_Intersection.html\" rel=\"noopener noreferrer\" target=\"_blank\">ST_Intersection (geometria, geometria)<\/a> => geometria<\/li>\n<li><a href=\"https:\/\/postgis.net\/docs\/ST_Union.html\" rel=\"noopener noreferrer\" target=\"_blank\">ST_Union (geometria, geometria)<\/a> => geometria<\/li>\n<li><a href=\"https:\/\/postgis.net\/docs\/ST_Difference.html\" rel=\"noopener noreferrer\" target=\"_blank\">ST_Difference (geometria, geometria)<\/a> => geometria<\/li>\n<li><a href=\"https:\/\/postgis.net\/docs\/ST_Buffer.html\" rel=\"noopener noreferrer\" target=\"_blank\">ST_Buffer (geometria, raio)<\/a> => geometria<\/li>\n<\/ul>\n<p>Essas fun\u00e7\u00f5es s\u00e3o todas fun\u00e7\u00f5es de &#8220;opera\u00e7\u00e3o de sobreposi\u00e7\u00e3o&#8221; &#8211; elas recebem argumentos de geometria e constroem novas geometrias para sa\u00edda. Embora as \u201copera\u00e7\u00f5es de sobreposi\u00e7\u00e3o\u201d no GEOS sejam muito confi\u00e1veis, elas n\u00e3o s\u00e3o 100% confi\u00e1veis. Quando as opera\u00e7\u00f5es falham, a biblioteca lan\u00e7a o temido <em>TopologyException<\/em>, o que indica que existe algo inconsistente e inutiliz\u00e1vel.<\/p>\n<p>Como existem muitos usu\u00e1rios do PostGIS que gerenciam muitos dados, h\u00e1 um pequeno n\u00famero de casos que causam <em>TopologyExceptionse <\/em>e incomodam os usu\u00e1rios, por\u00e9m o objetivo da equipe de desenvolvimento do PostGIS \u00e9 reduzir esse n\u00famero a zero.<\/p>\n<p>Infelizmente o desenvolvimento das opera\u00e7\u00f5es de sobreposi\u00e7\u00e3o mais robustas n\u00e3o ficaram prontas para a vers\u00e3o 3.8 do GEOS, apesar do esfor\u00e7o do desenvolvedor Martin Davis que passou o ver\u00e3o (no hemisf\u00e9rio norte) trabalhando neste novo mecanismo de sobreposi\u00e7\u00e3o, por\u00e9m ele estar\u00e1 dispon\u00edvel na vers\u00e3o 3.9. <\/p>\n<p>As falhas de sobreposi\u00e7\u00e3o s\u00e3o causadas quando interse\u00e7\u00f5es entre arestas resultam em inconsist\u00eancias no grafo de sobreposi\u00e7\u00e3o. Mesmo usando n\u00fameros de precis\u00e3o dupla, os sistemas t\u00eam apenas <a href=\"https:\/\/en.wikipedia.org\/wiki\/Double-precision_floating-point_format\" rel=\"noopener noreferrer\" target=\"_blank\">51 bits de precis\u00e3o<\/a> para representar coordenadas, e essa precis\u00e3o fixa pode resultar em grafos que n\u00e3o refletem corretamente suas entradas.<\/p>\n<p>A solu\u00e7\u00e3o est\u00e1 construindo um sistema que pode operar com qualquer precis\u00e3o fixa e manter a geometria v\u00e1lida. Como exemplo, aqui o novo mecanismo constr\u00f3i representa\u00e7\u00f5es v\u00e1lidas da Europa com qualquer precis\u00e3o, at\u00e9 ridiculamente grosseiras.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/eu.gif\" alt=\"\" width=\"690\" height=\"518\" class=\"aligncenter size-full wp-image-8757\" \/><br \/>\n<\/center><\/p>\n<p>Na pr\u00e1tica, o mecanismo ser\u00e1 usado com uma toler\u00e2ncia pr\u00f3xima \u00e0 precis\u00e3o dupla, mas ainda oferece folga suficiente para lidar com casos dif\u00edceis de maneira que os usu\u00e1rios considerem visualmente \u201caceit\u00e1veis\u201d. Inicialmente, a nova funcionalidade deve se encaixar sob as fun\u00e7\u00f5es existentes do PostGIS sem altera\u00e7\u00f5es, mas no futuro pode-se expor bot\u00f5es para permitir que os usu\u00e1rios definam explicitamente o dom\u00ednio de precis\u00e3o em que desejam trabalhar.<\/p>\n<p>Al\u00e9m do novo mecanismo de sobreposi\u00e7\u00e3o, muito trabalho foi feito para tornar a base de c\u00f3digo mais limpa, usando express\u00f5es C ++ mais &#8220;modernas&#8221; e portando novas corre\u00e7\u00f5es para os algoritmos existentes no GEOS.<\/p>\n<p>Fonte: <a href=\"http:\/\/blog.cleverelephant.ca\/2019\/08\/postgis-3-geos.html\" rel=\"noopener noreferrer\" target=\"_blank\">Clever Elephant Blog<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Embora o PostGIS inclua muitos algoritmos e funcionalidades pr\u00f3prias, ele tamb\u00e9m adiciona intelig\u00eancia geoespacial ao PostgreSQL, vinculando bibliotecas especializadas para lidar com problemas espec\u00edficos: Proj para suporte ao sistema de refer\u00eancia de coordenadas; GDAL para fun\u00e7\u00f5es e formatos raster; GEOS&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2020\/04\/09\/postgis-3-geos-3-8\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":8760,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[347,212],"class_list":["post-8742","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-geos","tag-postgis"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8742","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=8742"}],"version-history":[{"count":7,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8742\/revisions"}],"predecessor-version":[{"id":8804,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8742\/revisions\/8804"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/8760"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=8742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=8742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=8742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}