¿Cómo simplificar una topología de preservación de red de línea?


9

Tengo un Shapefile (que consiste en carreteras principales europeas) con aproximadamente 250,000 segmentos que tengo que simplificar para hacer pgrouting. Pero parece que no puedo encontrar una manera de hacerlo correctamente.

Esto es lo que parece:

http://i.stack.imgur.com/qJ2OJ.png

y así es como debería verse:

http://i.stack.imgur.com/FN4Z6.png

De alguna manera, tengo que eliminar todos los puntos de las líneas que están conectados a menos de 3 líneas (que no es una intersección), preservando las conexiones topológicas entre los puntos restantes. Si alguien tiene una idea, ¡sería muy apreciada!

Atentamente

EDITAR: intenté implementar la idea de @dkastl y logré obtener solo los nodos innecesarios (nodos con solo 2 cadenas lineales adyacentes) de mi red con el código a continuación (generación de red tomada del blog de underdark http://underdark.wordpress.com / 2011/02/07 / a-beginners-guide-to-pgrouting / ):

SELECT * FROM
   (SELECT tmp.id as gid, node.the_geom FROM 
     (SELECT id, count(*) FROM network 
     JOIN node 
     ON (start_id = id OR end_id = id) AND (end_id = id OR start_id = id)
     GROUP BY id ORDER BY id) as tmp
   JOIN node ON (tmp.id = node.id)
   WHERE tmp.count = 2) as unn_node;

Entonces, todo lo que tengo que hacer ahora es fusionar las líneas. Sin embargo, no tengo idea de cómo. Me imagino que tiene que ser un bucle que para cada fila del resultado de la consulta anterior obtiene las líneas adyacentes y las fusiona. Luego reconstruiría la red por completo y repetiría el proceso hasta que la consulta anterior devuelva un resultado vacío.


1
¿Por qué tienes que hacer esto para pgRouting? Si ya tiene una identificación de origen / destino asignada, puede crear una nueva geometría con cadenas de líneas que solo contengan la fuente y la identificación de destino. Eso debería verse como tu segunda imagen.
dkastl

El problema es que las líneas están segmentadas (si miras la primera imagen que publiqué, cada punto que ves comienza / termina un nuevo segmento), tu enfoque simplifica la geometría (que es buena) pero no la topología.
chriserik

1
No creo que sea obvio a partir de su imagen que cada punto comience una nueva geometría de cadena lineal. ¿Ya ejecutó la función asignar_vertex_id de pgRouting para llenar las columnas de origen / destino? En ese caso, puede hacer algunas consultas para identificar las ID de origen / destino que solo existen dos veces, lo que significa que debería poder fusionar los dos segmentos de línea en este punto. En caso de que el ID de origen / destino exista más de dos veces, debe ser una intersección.
dkastl

@dkastl: ¡Una muy buena idea! Actualicé mi pregunta mostrando cuán lejos llegué con ella.
chriserik

Respuestas:


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.