Tengo un volcado de datos de OSM de mi ciudad y escribí una consulta para poligonizarla. En el primer intento, el resultado se veía así:
El problema era que las líneas de OSM no se dividían y supuse que el poligonizador sólo hacía polígonos de líneas enteras:
^^ aquí, los nodos verdes se utilizan para los polígonos, los azules se ignoran, junto con la línea 3.
Desde st_split
soporta el corte por múltiples puntos sólo en PostGIS 2.2, decidí escribir un script de Python para hacer esto. Junto con algo de código SQL, divide las líneas en segmentos que respetan las intersecciones. Cada camino que se une a una intersección es único.
Tal y como lo entiendo ahora:
CREATE VIEW nodes AS
SELECT ROW_NUMBER() OVER () id, st_node(way) nd
FROM rd_sliced_roads;
DROP VIEW IF EXISTS pg;
CREATE VIEW pg AS
WITH
polygroup AS (SELECT ST_Polygonize(way) initial FROM nodes),
dumped AS (SELECT (st_dump(initial)).geom result FROM polygroup)
SELECT ROW_NUMBER() OVER () id, result
FROM dumped;
El resultado sigue siendo bastante similar: se ignoran los polígonos, aunque las líneas se unen entre sí. Las líneas rojas son tanto de origen como de st_nodified. ¿Por qué st_polygonize
¿Ignorar estos pequeños cuartos?
¿Qué me estoy perdiendo aquí?