6 votos

Intentar combinar puntos cercanos en un polígono

Hemos recopilado millones de lecturas de potencia de teléfonos móviles. Intento agrupar en un polígono los puntos con la misma intensidad que se encuentran a una distancia inferior. He preguntado en el lista de correo postgis pero no obtuve respuesta.

Para simplificar el proceso, ya he extraído todos los puntos de la misma fuerza a una tabla. Así que tengo una tabla de 1,5 millones de filas. Tiene un índice gist en el campo geom e índices btree en el uniqueid de cada fila y en el 'clusterid' que se supone que es el mismo para todos los puntos que están en el mismo 'cluster' (es decir, el punto a que está dentro de la distancia del punto c que está dentro de la distancia del punto z sería todo el mismo cluster).

¿Cómo realizaría esta tarea?

Me preguntaba si no valdría la pena intentar cargar las geometrías en memoria y utilizar el STC para procesarlas. Aunque dudo que eso sea mejor.

Gracias, Bryan.

4voto

Nick Puntos 3115

Yo no usaría un proceso convencional punto->polígono porque eso espera que tus puntos definan el límite de un polígono y no parece que los tuyos lo hagan. Suena como si los suyos son puntos de acceso que están relacionados de alguna manera.

Sin embargo, hay muchas maneras de crear polígonos para este tipo de situaciones, dependiendo de lo que sea sensible en sus datos. He aquí algunas ideas rápidas (una o más de las cuales podrían ser apropiadas para su caso de uso):

  • Buffer sus puntos por su distancia de cluster y luego disolver los buffers basado en el clusterid
  • Cree un casco convexo de sus puntos, uno por clusterid
  • Convierte los puntos en una trama con una resolución de la mitad de su distancia. Tal vez el uso de la trama de celdas hexagonales disponibles en QGIS sería bueno, puede convertir la trama de polígonos
  • Interpolar una trama a partir de los puntos utilizando una resolución más fina que la opción anterior, pero el método de interpolación deberá elegirse en función de lo que resulte apropiado para su caso de uso.

0voto

zyx Puntos 20965

Así que, después de mirar kmeans y un poco más de investigación, terminé usando una función similar a los mencionados en el hilo en http://www.mail-archive.com/postgis-users@postgis.refractions.net/msg12453.html

No he tenido la oportunidad de analizar y probar completamente lo que hice, por lo que puede haber algunos errores en ella. Básicamente, almacené mis puntos en el buffer, luego usé st_intersects y luego asigné a cada fila un 'cluster id' que coincidía con aquellos círculos que formaban un polígono contiguo. Para intentar reducir el tamaño de las transacciones, escribí un sencillo script en python que ejecutaba un lote de registros. Una vez que todos los registros tenían un clusterid entonces hice una unión para crear un polígono para todas las filas con el mismo clusterid.

La mayor parte del código se encuentra en http://pastebin.com/H7gQxEm8 para los interesados.

0voto

csmba Puntos 2440

Si le interesa el enfoque del cartograma hexagonal simple, Hexer está disponible. Yo lo utilizo para generar mapas de densidad y límites de grandes conjuntos de puntos LiDAR (millones). Puede leer fuentes de datos de puntos OGR además de datos ASPRS LAS si se establece la configuración CMake -DWITH_GDAL=ON al configurarlo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X