{"id":8995,"date":"2021-01-20T08:00:59","date_gmt":"2021-01-20T11:00:59","guid":{"rendered":"https:\/\/www.fernandoquadro.com.br\/html\/?p=8995"},"modified":"2021-01-26T11:47:41","modified_gmt":"2021-01-26T14:47:41","slug":"postgis-3-1-suporte-de-funcao-com-precisao-fixa","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2021\/01\/20\/postgis-3-1-suporte-de-funcao-com-precisao-fixa\/","title":{"rendered":"PostGIS 3.1 &#8211; Suporte a fun\u00e7\u00e3o com precis\u00e3o fixa"},"content":{"rendered":"<p>Um dos novos recursos que vem no PostGIS 3.1 \u00e9 o suporte \u00e0 precis\u00e3o fixa. Este novo recurso faz parte das novas implementa\u00e7\u00f5es da biblioteca GEOS 3.9. <\/p>\n<p>J\u00e1 existem algumas fun\u00e7\u00f5es que possuem esse novo recurso, s\u00e3o elas: ST_Subdivide, ST_SymDifference, ST_Union e ST_UnaryUnion. O recurso no ST_Union, por exemplo, deve melhorar muitos casos em que as pessoas encontram exce\u00e7\u00f5es topol\u00f3gicas. Para uma primeira vis\u00e3o, vamos ver como o suporte de precis\u00e3o fixa afeta a fun\u00e7\u00e3o ST_Subdivide.<\/p>\n<p>Vou dar uma r\u00e1pida demonstra\u00e7\u00e3o de como isso funciona cortando o estado de Massachusetts, que faz parte do arquivo de limites estaduais do <a href=\"https:\/\/www2.census.gov\/geo\/tiger\/TIGER2019\/STATE\/tl_2019_us_state.zip\" rel=\"noopener\" target=\"_blank\">censo americano<\/a>. A geometria original se parece com isto:<\/p>\n<pre>\r\nSELECT geom \r\nFROM states \r\nWHERE stusps = 'MA';\r\n<\/pre>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_orig.png\" alt=\"\" width=\"499\" height=\"285\" class=\"aligncenter size-full wp-image-8996\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_orig.png 499w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_orig-300x171.png 300w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><br \/>\n<\/center><\/p>\n<p><strong>1. Subdivis\u00e3o de precis\u00e3o dupla<\/strong><\/p>\n<p>Se utilizarmos a maneira antiga, usando o sistema de coordenadas de precis\u00e3o dupla &#8211; isso resultar\u00e1 em 39 linhas numeradas, e ser\u00e1 visualizado conforme a imagem abaixo:<\/p>\n<pre>\r\nSELECT f.ord, f.sd_geom\r\nFROM states, \r\n  ST_Subdivide(states.geom, 300) WITH ORDINALITY AS f(sd_geom,ord) \r\nWHERE stusps = 'MA';\r\n<\/pre>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_basic_300.png\" alt=\"\" width=\"515\" height=\"268\" class=\"aligncenter size-full wp-image-8997\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_basic_300.png 515w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_basic_300-300x156.png 300w\" sizes=\"auto, (max-width: 515px) 100vw, 515px\" \/><br \/>\n<\/center><\/p>\n<p><strong>2. Subdivis\u00e3o de precis\u00e3o fixa<\/strong><\/p>\n<p>Agora vamos tentar isso usando uma precis\u00e3o de escala fixa de 0,001 graus. Como acontece com a maioria das coisas PostGIS, as unidades s\u00e3o conforme o sistema de refer\u00eancia espacial. Neste caso, temos NAD 83 (long\/lat), ent\u00e3o estamos definindo a precis\u00e3o fixa em 0,001 graus. Se fosse uma camada do Brasil, com SIRGAS 2000, SAD69, WGS 84 baseadas em coordenadas geogr\u00e1ficas (lat\/long) tamb\u00e9m utilizar\u00edamos a mesma l\u00f3gica em graus. Isso s\u00f3 seria diferente se a informa\u00e7\u00f5es estivesse em UTM ao inv\u00e9s de Lat\/Long, nesse caso ao inv\u00e9s de graus utilizar\u00edamos como unidade de medida, o metro.<\/p>\n<pre>\r\nSELECT f.ord, f.sd_geom\r\nFROM states ,\r\n ST_Subdivide(states.geom, 300,0.001) WITH ORDINALITY AS f(sd_geom,ord) \r\nWHERE stusps = 'MA';\r\n<\/pre>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_fixed_precision_300_001.png\" alt=\"\" width=\"526\" height=\"291\" class=\"aligncenter size-full wp-image-8999\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_fixed_precision_300_001.png 526w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_fixed_precision_300_001-300x166.png 300w\" sizes=\"auto, (max-width: 526px) 100vw, 526px\" \/><br \/>\n<\/center><\/p>\n<p>O resultado \u00e9 que acabamos com 10 linhas em vez de 39. Voc\u00ea pode perceber que as bordas s\u00e3o um pouco mais suaves do que a imagem anterior. Isso ocorre porque em uma precis\u00e3o fixa, quando a geometria \u00e9 sobreposta na grade fixa, os pontos menores do que o tamanho da grade se tornam um, resultando em menos pontos, portanto, maior extens\u00e3o da \u00e1rea antes de atingir um limite de 300 pontos subdivididos e tamb\u00e9m uma imagem mais uniforme.<\/p>\n<p>Conforme voc\u00ea aumenta o tamanho da grade, voc\u00ea obt\u00e9m um resultado mais &#8220;pixelado&#8221;. Aqui aumentamos nosso tamanho de grade para 0,1 grau e acabamos com a fidelidade do PacMan. O resultado s\u00e3o 2 linhas de geometrias muito &#8220;pixeladas&#8221;, veja:<\/p>\n<pre>\r\nSELECT f.ord, f.sd_geom\r\nFROM states, \r\n ST_Subdivide(states.geom, 300,0.1) WITH ORDINALITY AS f(sd_geom,ord) \r\nWHERE stusps = 'MA';\r\n<\/pre>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_fixed_precision_300_01.png\" alt=\"\" width=\"501\" height=\"270\" class=\"aligncenter size-full wp-image-9000\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_fixed_precision_300_01.png 501w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_subdivide_ma_fixed_precision_300_01-300x162.png 300w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><br \/>\n<\/center><\/p>\n<p><em>Este post foi escrito originalmente por Regina Obe e foi traduzido e adaptado livremente por este blog.<\/em><\/p>\n<p>Fonte: <a href=\"https:\/\/www.bostongis.com\/blog\/index.php?\/archives\/275-Waiting-for-PostGIS-3.1-ST_Subdivide-and-other-function-support-with-fixed-precision.html\" rel=\"noopener\" target=\"_blank\">Boston GIS<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um dos novos recursos que vem no PostGIS 3.1 \u00e9 o suporte \u00e0 precis\u00e3o fixa. Este novo recurso faz parte das novas implementa\u00e7\u00f5es da biblioteca GEOS 3.9. J\u00e1 existem algumas fun\u00e7\u00f5es que possuem esse novo recurso, s\u00e3o elas: ST_Subdivide, ST_SymDifference,&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2021\/01\/20\/postgis-3-1-suporte-de-funcao-com-precisao-fixa\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":9001,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[212],"class_list":["post-8995","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-postgis"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8995","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=8995"}],"version-history":[{"count":7,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8995\/revisions"}],"predecessor-version":[{"id":9033,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8995\/revisions\/9033"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/9001"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=8995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=8995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=8995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}