Estoy tratando de dividir un polígono en polígonos más pequeños de una línea, pero creo que no puedo usar la función st_split. Lo que necesito es crear polígonos pequeños dentro de uno grande, usando una cuadrícula de cadena lineal.
He intentado algunas formas, pero no puedo obtener el resultado. Lo que he intentado:
Divida un polígono de un LineString usando st_split ()
De un polígono límite.
Y tabla de cadenas de líneas:
Necesitaría los siguientes polígonos:
Problema : no puedo dividir un polígono de varias líneas, ni un polígono de una multilínea.
El otro método que estoy intentando es crear un polígono a partir de las líneas con st_polygonize (). El SQL que estaba intentando es:
SELECT
g.path[1] as gid,
g.geom::geometry(polygon, 22033) as geom
FROM
(SELECT
(ST_Dump(ST_Polygonize(geom))).*
FROM linestable
) as g;
Extraído de Crear polígonos a partir de segmentos de línea usando PostgreSQL y PostGIS
Problema : solo puedo obtener un polígono (el límite).
¿Alguien puede decirme cuál sería la mejor manera de obtener los polígonos de la cadena lineal, o si me falta algo?
Nota: Las tablas están en el mismo SRID y las geometrías se ajustan en una cuadrícula. En QGIS puedo ejecutar el proceso de poligonalización de líneas a polígono perfectamente.
Como exige John, aquí está la tabla de cadenas lineales. https://drive.google.com/file/d/0B603y_m735jfS014S0EyVnpMUEU/view?usp=sharing
Respuestas:
Conseguí que esto funcionara usando ST_Node primero, junto con ST_Collect , para convertir las líneas en un conjunto de cadenas de líneas nodas dentro de una MultiLinestring .
Como dice en los documentos para ST_Node :
Lo que esto significa es que todas las cadenas lineales se combinan en todas las combinaciones posibles, para formar el equivalente al anillo exterior de un polígono. Mientras que, si intenta ST_Polygonize un conjunto de LineStrings, ninguno de los cuales por sí solo describe un polígono, simplemente recupera LineStrings. Entonces, esto funciona:
Si solo ejecuta la primera parte de esto, es decir, el CTE multi, la salida se ve así:
Ahora, cuando alimente esta MultiLinestring a ST_Polygonize , funciona como se espera, por ejemplo,
Obviamente, el ST_AsText es solo para ilustración, y tendrá que ajustar, si también desea la ID de ruta.
La conclusión clave es que ST_Polygonize espera cadenas de líneas que ya describen el contorno de un polígono , que es lo que ST_Node (ST_Collect (.... hace en lo anterior.
fuente
ST_Polygonize()
dice que se necesitan cadenas de línea, o cuál es el caso de uso para eso sin llamarST_Node()
primero