(editar 2019) ¡ ST_VoronoiPolygons disponibles desde PostGIS v2.3 !
Con PostGIS 2.1+ podemos usar ST_DelaunayTriangles () para generar una triangulación de Delaunay , que es un gráfico dual de su diagrama de Voronoi y, en teoría, tienen una conversión exacta y reversible.
¿Existe algún script seguro de SQL estándar con un algoritmo optimizado para esta conversión de PostGIS2 Delaunay a Voronoi ?
postgis
sql
voronoi-thiessen
Peter Krauss
fuente
fuente
ST_DelaunayTriangles
en Linux Debian Stable .Respuestas:
La siguiente consulta parece hacer un conjunto razonable de polígonos voronoi a partir de los triángulos Delaunay.
No soy un gran usuario de Postgres, por lo que probablemente pueda mejorarse bastante.
Esto produce el siguiente conjunto de polígonos para los puntos de muestra incluidos en la consulta
Consulta Explicación
Paso 1
Crear los triángulos de Delaunay a partir de las geometrías de entrada
Paso 2
Descomponer los nodos del triángulo y hacer bordes se pueden hacer. Creo que debería haber una mejor manera de obtener los bordes, pero no encontré uno.
Paso 3
Construye los círculos circunscritos para cada triángulo y encuentra el centroide
El
Edges
CTE genera cada borde y la id (ruta) del triángulo al que pertenece.Etapa 4
'Unión externa' a la tabla 'Bordes' en sí misma, donde hay bordes iguales para diferentes triángulos (bordes interiores).
Donde hay un borde común, dibuje una línea entre los respectivos centroides
Donde el borde no está unido (exterior) dibuje una línea desde el centroide a través del centro del borde. Solo haga esto si el centroide del círculo está dentro del conjunto de triángulos.
Paso 5
Obtenga el casco convexo para las líneas dibujadas como una línea. Unir y fusionar todas las líneas. Nodear el conjunto de líneas para que tengamos un conjunto topológico que pueda poligonizarse
fuente
ST_ConvexHull
y en suST_Centroid
lugar "bisectrices perpendiculares" como en el algoritmo directo sugerido por mi ref1 / Kenneth Sloa ... ¿Por qué no la solución directa?ST_DelaunayTriangles
en Linux Debian Stable .