Je cherche un moyen de créer un diagramme de voronoi basé sur des segments de ligne au lieu de points. Voir l'exemple ci-dessous (tiré de cette présentation ).
Idéalement, j'aimerais quelque chose que je puisse écrire à partir de Python, mais une solution utilisant ArcGIS ou similaire serait également acceptable.
La seule bibliothèque pour le faire que j'ai trouvée jusqu'à présent est openvoronoi , qui semble prometteuse. Y en a-t-il d'autres?
line
voronoi-thiessen
Snorfalorpagus
la source
la source
Réponses:
Nous (une équipe universitaire) avons conçu une implémentation pour cela en utilisant un complément ArcGIS 10.0 et ArcObjects. L'application est entièrement gratuite. L'implémentation utilise une méthodologie raster qui prend comme points d'entrée, lignes ou polygones pour créer des diagrammes de Voronoi ordinaires ou multipliés par pondération (ou une combinaison des éléments ci-dessus, c'est-à-dire que vous pouvez utiliser un de chaque type de forme, créant un ensemble de diagrammes unique de jusqu'à trois classes d'entités distinctes). Il est toujours en développement mais devrait être assez stable, surtout si vous ne voulez faire que des lignes. L'addin nécessite la licence Spatial Analyst pour fonctionner. Le code lui-même est open source, alors n'hésitez pas à en faire ce que vous voulez.
https://github.com/UNTGeography/VoronoiDiagramsGIS
Il utilise une méthode similaire à la «répartition euclidienne» décrite dans la réponse de @ radouxju et utilise le raster Flow Direction / Basin pour créer des polygones vectoriels à partir du raster résultant.
la source
Voronoï est initialement conçu pour les points. Voici les deux méthodes que je peux imaginer pour votre problème (citant les outils ArcGIS, mais probablement possibles avec galbées):
1)
a) créer des points le long des lignes (par exemple, densifier puis présenter les sommets à la ligne)
b) créer des polygones de Thiessen
c) dissoudre les polygones de Thiessen en fonction des lignes qu'ils coupent
2)
a) avec l'analyste spatial, calculer l'allocation euclidienne aux lignes
b) convertir chaque zone en un polygone
la source
Pour certains clients, quelques collègues de travail et moi avons travaillé sur la création de 2 outils de géotraitement qui font cela. Bien que les outils de géotraitement ne soient pas accessibles au public, le python et le C # que nous avons utilisés sont:
Le wrapper C # et python s'appuient en fait sur l'API C ++ Boost Voronoi: http://www.boost.org/doc/libs/1_54_0/libs/polygon/doc/voronoi_main.htm
Notez que l'API consomme beaucoup de mémoire. Ce n'est pas un problème si vous utilisez le géotraitement pour 64 bits, ArcGIS Pro ou QGIS. Il s'agit d'une limitation si vous êtes sur ArcGIS Desktop car il s'agit d'un 32 bits. (Un réseau routier détaillé de 40 000 lignes ou plus devrait suffire pour atteindre la limite de mémoire)
la source
ET Geowizards (Un plugin pour Arc) a un outil pour cela qui accepte les polylignes (voir capture d'écran ci-dessous). Malheureusement, vous aurez besoin du produit sous licence pour exécuter l'outil, mais je pense qu'il devrait faire l'affaire.
la source
Plus une autre façon de résoudre votre tâche en utilisant PostgreSQL / PostGIS.
Si les lignes sont courtes et simples, exécutez le script:
Voir le résultat.
Si les lignes sont longues, exécutez le script:
Voir le résultat.
Si nécessaire, compactez le nombre de points sur les lignes, dans mon exemple c'est le 10 points.
Solutions originales.
Ce script est appelé: ST_VoronoiDiagramsFromLines.
la source