Estoy buscando una manera de crear un diagrama de voronoi basado en segmentos de línea en lugar de puntos. Vea el siguiente ejemplo (tomado de esta presentación ).
Idealmente, me gustaría algo que pueda escribir desde Python, pero una solución con ArcGIS o similar también sería aceptable.
La única biblioteca para hacer esto que he encontrado hasta ahora es openvoronoi , que parece prometedora. ¿Hay otros?
line
voronoi-thiessen
Snorfalorpagus
fuente
fuente
Respuestas:
Nosotros (un equipo universitario) diseñamos una implementación para esto usando un complemento ArcGIS 10.0 y ArcObjects. La aplicación es completamente gratuita. La implementación utiliza una metodología de trama que toma como puntos de entrada, líneas o polígonos para crear diagramas de Voronoi ponderados ordinarios o multiplicados (o una combinación de los anteriores, es decir, puede usar uno de cada tipo de forma, creando un solo conjunto de diagramas de hasta tres clases de entidad distintas). Todavía está en desarrollo, pero debería ser bastante estable, especialmente si solo desea hacer líneas. El complemento requiere la licencia de Spatial Analyst para funcionar. El código en sí mismo es de código abierto, así que siéntete libre de hacerlo como quieras.
https://github.com/UNTGeography/VoronoiDiagramsGIS
Utiliza un método similar a la "Asignación euclidiana" descrita en la respuesta de @ radouxju y usa la dirección de flujo / ráster de cuenca para crear polígonos vectoriales a partir del ráster resultante.
fuente
Voronoï está inicialmente diseñado para puntos. Estos son los dos métodos que puedo imaginar para su problema (citando herramientas de ArcGIS, pero probablemente posible con Shapely):
1)
a) crear puntos a lo largo de las líneas (por ejemplo, densificar y luego presentar vértices a línea)
b) crear polígonos de Thiessen
c) disuelva los polígonos de Thiessen en función de las líneas que intersecan
2)
a) con el analista espacial, calcule la asignación euclidiana a las líneas
b) convierte cada zona en un polígono
fuente
Para algunos clientes, un par de compañeros de trabajo y yo hemos estado trabajando en la creación de 2 herramientas de geoprocesamiento que hacen eso. Si bien las herramientas de geoprocesamiento no están disponibles públicamente, Python y C # que hemos utilizado son:
Tanto el envoltorio de C # como el de Python realmente dependen de la API de C ++ Boost Voronoi: http://www.boost.org/doc/libs/1_54_0/libs/polygon/doc/voronoi_main.htm
Tenga en cuenta que la API consume mucha memoria. Esto no es un problema si está utilizando Geoprocesamiento para 64 bits, ArcGIS Pro o QGIS. Esto es una limitación si está en ArcGIS Desktop, ya que tiene 32 bits. (Una red vial detallada de 40,000 filas o más debería ser suficiente para alcanzar el límite de memoria)
fuente
ET Geowizards (Un complemento para Arc) tiene una herramienta para esto que acepta Polilíneas (ver captura de pantalla a continuación). Desafortunadamente, necesitará el producto con licencia para ejecutar la herramienta, pero creo que debería funcionar.
fuente
Además de una forma más de resolver su tarea usando PostgreSQL / PostGIS.
Si las líneas son cortas y simples, ejecute el script:
Ver el resultado.
Si las líneas son largas, ejecute el script:
Ver el resultado.
Si es necesario, compacte el número de puntos en las líneas, en mi ejemplo, este es el punto 10.
Soluciones originales
Este script se llama: ST_VoronoiDiagramsFromLines.
fuente