Estou tentando replicar esse processo do ArcGIS no PostGIS: http://blogs.esri.com/esri/arcgis/2012/11/13/spaghetti_and_meatballs/ . Isso descreve como dividir os pontos em buffer em polígonos com base em suas interseções, contando o número de camadas e atribuindo isso aos polígonos para classificá-los. Estou usando-o para criar um mapa de densidade de pontos aproximados com vetores, e os resultados foram surpreendentemente bons para meus dados no ArcGIS. No entanto, estou lutando para encontrar algo viável no PostGIS, onde preciso para produzir camadas dinâmicas de densidade de pontos para um mapa da web.
No ArcGIS, eu simplesmente executei a ferramenta Intersect na minha camada de pontos em buffer para criar as formas necessárias.
No PostGIS, executei esta consulta:
CREATE TABLE buffer_table AS
SELECT a.gid AS gid, ST_Buffer(a.geo,.003) AS geo
FROM public.pointTable a;
CREATE TABLE intersections AS
SELECT a.gid AS gid_a, b.gid AS gid_b, ST_Intersection(a.geo,b.geo) AS geo
FROM public.pointTable a, public.pointTable b
WHERE ST_Intersects(a.geo, b.geo) AND a.gid < b.gid;
DELETE FROM intersections WHERE id_a = id_b;
A saída parece praticamente idêntica à saída do ArcGIS, exceto que não está dividindo os polígonos na mesma extensão que é necessária para um mapa de densidade significativo. Aqui estão as capturas de tela do que quero dizer:
O ArcGIS está à esquerda e o PostGIS está à direita. É um pouco difícil dizer, mas a imagem do ArcGIS mostra o polígono 'interior' criado onde os três buffers se cruzam. A saída do PostGIS, por outro lado, não cria esse polígono interno e mantém seus componentes intactos. Isso torna impossível fornecer uma classificação apenas para a área interna com 3 camadas uma sobre a outra, em comparação com apenas 1 para as partes externas.
Alguém sabe de alguma função PostGIS para quebrar o polígono na medida em que eu preciso? Como alternativa, alguém conhece uma maneira melhor de produzir um mapa de densidade de pontos com vetores no PostGIS?
fonte
O método que acabei usando foi criar uma grade de rede de pesca na minha área de interesse com uma "resolução" alta o suficiente para estilizar e refletir os dados em um grau razoável. Você pode ler sobre a função arrastão aqui: Como criar uma grade regular de polígonos no PostGIS?
Isso cria a rede de pesca com 800 linhas e 850 colunas, com 0,0005 radianos de altura e comprimento (usando a projeção WGS84 em lat / long e é uma extensão geográfica suficientemente pequena para que a distorção seja desprezível - ou seja, todas elas são distorcidas mais ou menos igualmente ) e as coordenadas da parte inferior esquerda da grade.
Como isso criou uma enorme quantidade de polígonos que terão consultas executadas neles, criei um índice e atualizei as estatísticas. Isso reduziu minhas consultas típicas de mais de 50 segundos para 4-5 segundos.
A subconsulta aqui conta o número de incidentes dentro de 0,002 radianos (aproximadamente 220 metros) de cada polígono da grade da rede de pesca e os agrupa pela grade da rede de pesca. Isso conta efetivamente o número de círculos sobrepostos à resolução da grade.
A consulta externa que usei para unir o valor de contagem de cada polígono e restringir a contagem a 3 ou mais. Embora a união não seja estritamente necessária e seja a parte da consulta que consome mais recursos, ela é essencial para o mapeamento da Web, pois efetivamente transforma dezenas de milhares de polígonos de grade, o que não funciona muito bem ao servir diretamente a camadas abertas, em multipolígonos com quantos valores de contagem diferentes existem (geralmente algumas dúzias para meus dados).
Restringir o valor da contagem é uma habilidade importante para os mapas de calor, para que eles não representem muitos dados a ponto de serem incapazes de interpretá-los - ele também possui o utilitário adicional de acelerar significativamente a consulta.
Resultado final:
fonte