Estoy tratando de replicar este proceso de ArcGIS en PostGIS: http://blogs.esri.com/esri/arcgis/2012/11/13/spaghetti_and_meatballs/ . Esto describe cómo dividir los puntos almacenados en polígonos según sus intersecciones, contando el número de capas y atribuyéndolo a los polígonos para clasificarlos. Lo estoy usando para crear un mapa de densidad de punto aproximado con vectores, y los resultados fueron sorprendentemente buenos para mi conjunto de datos en ArcGIS. Sin embargo, estoy luchando por encontrar algo viable en PostGIS donde lo necesito para producir capas de densidad de puntos dinámicos para un mapa web.
En ArcGIS, simplemente ejecuté la herramienta Intersecar en mi capa de puntos almacenados para crear las formas que necesitaba.
En PostGIS, ejecuté 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;
La salida se ve bastante idéntica a la salida de ArcGIS, excepto que no está desglosando los polígonos en la misma medida que se requiere para un mapa de densidad significativo. Aquí hay capturas de pantalla de lo que quiero decir:
ArcGIS está a la izquierda y PostGIS está a la derecha. Es un poco difícil de distinguir, pero la imagen de ArcGIS muestra el polígono 'interior' creado donde se cruzan los 3 búferes. La salida de PostGIS, por otro lado, no crea ese polígono interior y, en cambio, mantiene sus componentes intactos. Esto hace que sea imposible proporcionar una clasificación solo para esa área interior con 3 capas una encima de la otra en comparación con solo 1 para las partes externas.
¿Alguien sabe de alguna función PostGIS para descomponer el polígono en la medida que necesito? Alternativamente, ¿alguien sabe de una mejor manera de producir un mapa de densidad de puntos con vectores en PostGIS?
fuente
El método que terminé usando fue crear una cuadrícula de rejilla en mi área de interés con una "resolución" lo suficientemente alta como para diseñar y reflejar los datos en un grado razonable. Puede leer sobre la función de red aquí: ¿Cómo crear una cuadrícula poligonal regular en PostGIS?
Esto crea la red con 800 filas, 850 columnas, que son 0.0005 radianes de altura y longitud (usando la proyección WGS84 en lat / long y es una extensión geográfica lo suficientemente pequeña como para que la distorsión sea insignificante, es decir, todas están distorsionadas más o menos por igual) ), y luego las coordenadas de la esquina inferior izquierda de la cuadrícula.
Debido a que esto creó una gran cantidad de polígonos que tendrán consultas ejecutadas en ellos, creé un índice y actualicé las estadísticas. Esto redujo mis consultas típicas de más de 50 segundos a 4-5 segundos.
La subconsulta aquí cuenta el número de incidentes dentro de .002 radianes (aproximadamente 220 metros) de cada polígono de rejilla de rejilla, y los agrupa por la rejilla de rejilla. Esto cuenta efectivamente el número de círculos superpuestos a la resolución de la cuadrícula.
La consulta externa que utilicé para unir el valor de recuento de cada polígono y restringir el recuento a 3 o más. Si bien la unión no es estrictamente necesaria y es la parte más intensiva de recursos de la consulta, es fundamental para el mapeo web, ya que efectivamente convierte decenas de miles de polígonos de cuadrícula, lo que no funciona demasiado bien cuando se sirve directamente a capas abiertas, en multipolígonos de los diferentes valores de conteo que existen (generalmente unas pocas docenas para mis datos).
Restringir el valor de conteo es una capacidad importante para los mapas de calor para que no muestren demasiados datos hasta el punto de no poder interpretarlos; también tiene la utilidad adicional de acelerar significativamente la consulta.
Resultado final:
fuente