3 votos

Carreteras de OSM poligonadas en PostGIS = sin sentido

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í:

enter image description here

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:

enter image description here

^^ 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:

enter image description here

El código SQL :

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?

enter image description here

¿Qué me estoy perdiendo aquí?

3voto

rjzii Puntos 8979

Resulta que, haciendo st_union en lugar de st_node hizo el truco. Todavía me pregunto qué st_polygonize es tan sensible a?

enter image description here

Así, el algoritmo para hacer polígonos es muy sencillo:

with united as (select st_union(way) w from planet_osm_lines /* filter highways here */),
     polied as (select st_polygonize(w) w from united)
select (st_dump(w)).geom poly from polied;

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X