(modifier 2019) ST_VoronoiPolygons disponible depuis PostGIS v2.3 !
Avec PostGIS 2.1+, nous pouvons utiliser ST_DelaunayTriangles () pour générer une triangulation Delaunay , c'est-à-dire un double graphique de son diagramme de Voronoi , et, en théorie, ils ont une conversion exacte et réversible.
Existe- t -il un script standard SQL sécurisé avec un algorithme optimisé pour cette conversion PostGIS2 Delaunay-à-Voronoi ?
postgis
sql
voronoi-thiessen
Peter Krauss
la source
la source
ST_DelaunayTriangles
dans Linux Debian Stable .Réponses:
La requête suivante semble faire un ensemble raisonnable de polygones voronoi à partir des triangles de Delaunay.
Je ne suis pas un grand utilisateur de Postgres, donc cela peut probablement être amélioré un peu.
Cela produit l'ensemble de polygones suivant pour les points d'échantillonnage inclus dans la requête
Explication de la requête
Étape 1
Créer les triangles de Delaunay à partir des géométries d'entrée
Étape 2
Décomposer les nœuds triangulaires et créer des arêtes. Je pense qu'il devrait y avoir une meilleure façon d'obtenir les bords, mais je n'en ai pas trouvé.
Étape 3
Construisez les cercles circonscrits pour chaque triangle et trouvez le centroïde
Le
Edges
CTE sort chaque front et l'id (chemin) du triangle auquel il appartient.Étape 4
'Outer Join' la table 'Edges' à elle-même où il y a des bords égaux pour différents triangles (bords intérieurs).
Là où il y a un bord commun, tracez une ligne entre les centroïdes respectifs
Lorsque le bord n'est pas joint (extérieur), tracez une ligne à partir du centre de gravité en passant par le centre du bord. Ne faites cela que si le centre de gravité du cercle se trouve à l'intérieur de l'ensemble de triangles.
Étape 5
Obtenez la coque convexe pour les lignes tracées sous forme de ligne. Rassemblez et fusionnez toutes les lignes. Noeud l'ensemble de lignes de sorte que nous avons un ensemble topologique qui peut être polygonisé.
la source
ST_ConvexHull
etST_Centroid
plutôt « médiatrices » , comme dans l'algorithme directe Suggérée par mon ref1 / Kenneth SLOA ... Pourquoi ne pas la solution directe?ST_DelaunayTriangles
dans Linux Debian Stable .