{"id":8985,"date":"2021-01-18T08:00:24","date_gmt":"2021-01-18T11:00:24","guid":{"rendered":"https:\/\/www.fernandoquadro.com.br\/html\/?p=8985"},"modified":"2021-01-15T15:36:46","modified_gmt":"2021-01-15T18:36:46","slug":"postgis-3-1-geradores-de-grades","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2021\/01\/18\/postgis-3-1-geradores-de-grades\/","title":{"rendered":"PostGIS 3.1 &#8211; Geradores de grades"},"content":{"rendered":"<p>No \u00faltimo m\u00eas, foi lan\u00e7ada oficialmente a vers\u00e3o 3.1 do PostGIS, extens\u00e3o espacial do PostgreSQL e com ela algumas novidades como a que iremos ver neste post, que s\u00e3o os geradores de grades.<\/p>\n<p>Resumir dados em uma grade fixa \u00e9 uma maneira comum de preparar dados para an\u00e1lise. As grades fixas t\u00eam algumas vantagens sobre os limites naturais e administrativos:<\/p>\n<ul>\n<li>Sem apelo \u00e0s autoridades superiores<\/li>\n<li>\u00c1reas de unidade iguais<\/li>\n<li>Dist\u00e2ncias iguais entre as c\u00e9lulas<\/li>\n<li>Bom para passar dados do dom\u00ednio computacional &#8220;espacial&#8221; para um dom\u00ednio &#8220;n\u00e3o espacial&#8221;<\/li>\n<\/ul>\n<p>Idealmente, queremos ser capazes de gerar grades que tenham alguns recursos-chave:<\/p>\n<ul>\n<li>Ponto de origem fixo, de modo que a grade pode ser gerada novamente e n\u00e3o se mover<\/li>\n<li>Coordenadas de c\u00e9lulas fixas para um determinado tamanho de c\u00e9lula, de modo que a mesma c\u00e9lula possa ser referida apenas usando um endere\u00e7o de c\u00e9lula, sem ter que materializar os limites da c\u00e9lula<\/li>\n<\/ul>\n<p>A fun\u00e7\u00e3o <a href=\"https:\/\/postgis.net\/docs\/manual-dev\/ST_SquareGrid.html\" rel=\"noopener\" target=\"_blank\">ST_SquareGrid (tamanho, limites)<\/a> gera uma grade com uma origem em (0, 0) no plano de coordenadas e preenche os limites dos quadrados da geometria fornecida.<\/p>\n<pre>\r\nSELECT (ST_SquareGrid(400000, ST_Transform(a.geom, 3857))).* \r\nFROM admin a  \r\nWHERE name = 'Brazil';\r\n<\/pre>\n<p>Portanto, uma grade gerada usando a geometria do Brasil como refer\u00eancia tem esta apar\u00eancia.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/brazil-sq.png\" alt=\"\" width=\"902\" height=\"648\" class=\"aligncenter size-full wp-image-8986\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/brazil-sq.png 902w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/brazil-sq-300x216.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/brazil-sq-768x552.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/brazil-sq-600x431.png 600w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><br \/>\n<\/center><\/p>\n<p>A fun\u00e7\u00e3o <a href=\"https:\/\/postgis.net\/docs\/manual-dev\/ST_HexagonGrid.html\" rel=\"noopener\" target=\"_blank\">ST_HexagonGrid (tamanho, limites)<\/a> funciona da mesma forma que a fun\u00e7\u00e3o de grade quadrada.  <\/p>\n<p>Os hex\u00e1gonos s\u00e3o populares para alguns fins de exibi\u00e7\u00e3o cartogr\u00e1fica e de modelagem. Surpreendentemente, eles tamb\u00e9m podem ser indexados usando o mesmo esquema de indexa\u00e7\u00e3o bidimensional dos quadrados.<\/p>\n<p>A grade do hex\u00e1gono come\u00e7a com um hex\u00e1gono (0, 0) centralizado na origem, e a grade para os limites incluem todos os hex\u00e1gonos que tocam os limites.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_hexagongrid01.png\" alt=\"\" width=\"509\" height=\"357\" class=\"aligncenter size-full wp-image-8987\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_hexagongrid01.png 509w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/st_hexagongrid01-300x210.png 300w\" sizes=\"auto, (max-width: 509px) 100vw, 509px\" \/><br \/>\n<\/center><\/p>\n<p>Tal como acontece com a grade quadrada, as coordenadas dos hex\u00e1gonos s\u00e3o fixas para um tamanho de grade espec\u00edfico.<\/p>\n<pre>\r\nSELECT (ST_HexagonGrid(100000, ST_Transform(a.geom, 3857))).* \r\nFROM admin a  \r\nWHERE name = 'Germany';\r\n<\/pre>\n<p>Aqui est\u00e1 uma grade hexagonal de 100 km da Alemanha:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/germany-hex.png\" alt=\"\" width=\"864\" height=\"663\" class=\"aligncenter size-full wp-image-8988\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/germany-hex.png 864w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/germany-hex-300x230.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/germany-hex-768x589.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/germany-hex-600x460.png 600w\" sizes=\"auto, (max-width: 864px) 100vw, 864px\" \/><br \/>\n<\/center><\/p>\n<p>\u00c9 poss\u00edvel materializar resumos baseados em grade, sem realmente materializar as grades, usando as fun\u00e7\u00f5es do gerador para criar as grades desejadas em tempo real.<\/p>\n<p>Aqui est\u00e1 um resumo dos pontos de popula\u00e7\u00e3o, usando uma grade hexadecimal:<\/p>\n<pre>\r\nSELECT sum(pop_max) as pop_max, hexes.geom\r\nFROM\r\n    ST_HexagonGrid(\r\n        4.0,\r\n        ST_SetSRID(ST_EstimatedExtent('places', 'geom'), 4326)\r\n    ) AS hexes\r\n    INNER JOIN\r\n    places AS p\r\n    ON ST_Intersects(p.geom, hexes.geom)\r\nGROUP BY hexes.geom;\r\n<\/pre>\n<p>Tamb\u00e9m \u00e9 poss\u00edvel unir grades din\u00e2micas a ferramentas de visualiza\u00e7\u00e3o, para experi\u00eancias de usu\u00e1rio mais din\u00e2micas, basta voc\u00ea adicionar essas vis\u00f5es ao seu GeoServer, por exemplo.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/world-popn-hex.png\" alt=\"\" width=\"927\" height=\"468\" class=\"aligncenter size-full wp-image-8992\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/world-popn-hex.png 927w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/world-popn-hex-300x151.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/world-popn-hex-768x388.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2021\/01\/world-popn-hex-600x303.png 600w\" sizes=\"auto, (max-width: 927px) 100vw, 927px\" \/><br \/>\n<\/center><\/p>\n<p><em>Este post foi escrito orignalmente por Paul Ramsey em ingl\u00eas e foi traduzido e adaptado livremente por este blog.<\/em><\/p>\n<p>Fonte: <a href=\"https:\/\/info.crunchydata.com\/blog\/waiting-for-postgis-3.1-grid-generators\" rel=\"noopener\" target=\"_blank\">Crunchy Blog<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No \u00faltimo m\u00eas, foi lan\u00e7ada oficialmente a vers\u00e3o 3.1 do PostGIS, extens\u00e3o espacial do PostgreSQL e com ela algumas novidades como a que iremos ver neste post, que s\u00e3o os geradores de grades. Resumir dados em uma grade fixa \u00e9&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2021\/01\/18\/postgis-3-1-geradores-de-grades\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":8990,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[212],"class_list":["post-8985","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\/8985","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=8985"}],"version-history":[{"count":4,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8985\/revisions"}],"predecessor-version":[{"id":8994,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8985\/revisions\/8994"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/8990"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=8985"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=8985"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=8985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}