14 votos

¿Lo que ' s una manera eficiente de detectar las ensambladuras de camino en un mapa?

Puedo recibir mapas de cualquier fuente para mi proyecto, y para el C++ del algoritmo estoy haciendo, es imperativo para el algoritmo para saber dónde cruces de carreteras (nodos, en donde más de dos tramos de carretera). Además, en muchos de los mapas que llegar, hay caminos de superación y undershooting (es decir: las carreteras no están conectados correctamente). Una manera de corregir el problema es por la limpieza de la red de carreteras utilizando Autocad. Las preguntas que tengo son:

  1. Es allí una manera eficiente (cualquier de software que se puede hacer?) para obtener mi mapa en un formato GML, que contiene información acerca de los cruces de carreteras en el mapa? (tal vez tenga un GML etiqueta que dice que un nodo es un cruce)
  2. ¿Hay alguna otra manera para 'limpiar' la red de carreteras?

Colegas han sugerido FME, pero que implica la escritura de secuencias de comandos y no estamos seguros acerca de si el guión debería ser lo suficientemente flexible como para atender a todos los mapas. La única otra manera de detectar los cruces es el uso de la fuerza bruta y encontrar cuál es el camino que los segmentos tienen en común nodos. Sería de ayuda de ArcGIS? (lo he usado, pero han oído hablar de ella) estoy seguro de que debe haber una mejor manera...

13voto

cjstehno Puntos 131

Usted puede analizar las polilíneas de una forma increíble por el uso de tampones. Este es generalmente ineficaz--búferes de crear muchos vértices adicionales--(a) es una técnica disponible en muchos GISes (mapa de bits o vectorial) y (b) a veces puede producir información que de otra manera es difícil de conseguir.

En este caso, el almacenamiento en búfer de la carretera por una pequeña cantidad y, a continuación, el almacenamiento en búfer, por la negativa de la misma cantidad hojas pequeñas "islas" alrededor de todas las curvas y alrededor de todas las intersecciones. Esto es fácil de demostrar geométricamente.

Aquí está un ejemplo de un 10 m polilínea buffer (gris) y su -10 m tampón (luz roja) en un mapa que está a 650 m de ancho:

Figure 1

Ahora cruzan la polilínea original de la capa con estos isla de polígonos, la combinación de los segmentos de la isla, identificador, y el recuento de las piezas:

Figure 2

La luz amarilla de los segmentos de designar el alto recuento de piezas y la oscuridad cian segmentos designar el recuento a la baja. De esta manera, tenemos (a) que se encuentran todas las curvas e intersecciones (incluyendo la auto-intersecciones) y cerca de los cruces (véase la extrema izquierda, donde los dos segmentos no muy cumplen)) y (b) diferenciada de las curvas de las intersecciones. Podemos encontrar casi de uniones mediante la selección de las islas que contienen dos o más segmentos conectados: las curvas sólo contienen segmentos conectados.

Debido a la simetría de amortiguamiento, los centroides de la intersección de las islas son los puntos de intersección.

Un bello aspecto de este tipo de análisis es que no importa cómo la subyacente polilínea es representado: puede ser de una sola característica, podría ser una característica para cada segmento de línea, o cualquier otra cosa.

9voto

Bruce the Hoon Puntos 578

Si usted tiene los caminos en una forma espacial, tales como un Shapefile, usted puede cargar en PostGIS y automáticamente encontrar esos mediante una consulta SQL. He hecho esto antes - la instrucción SQL está diseñado para encontrar para cada camino de aquellos que se cruzan geográficamente y crear un punto nodal para cada cruce.

Voy a tratar de limpiar esto más tarde, pero aquí está el flujo básico usted puede tomar...

for line in road_layer_lines:
    ilines = get_intersecting_objects(line)
    for iline in ilines:
        road_junctions.extend(get_intersection(line, iline))

El ST_* funciones son lo que hace a este trabajo dentro de PostGIS

  • ST_Envelope: Agarra el cuadro delimitador de una determinada geometría - esto se utiliza para acelerar el algoritmo. Uno puede acotar una búsqueda geográfica con los recuadros de delimitación en un rápido pero menos preciso pasar y, a continuación, analizar los resultados con el real geometrías.
  • ST_Intersects: Determina si dos geometrías se cruzan
  • ST_Intersection: Devuelve la intersección de dos geometrías

Los siguientes son sólo fragmentos ya que no tengo tiempo para terminar, tal vez alguien puede editarlo antes de volver aquí...

SELECT id, the_geom FROM road_lines
SELECT roads.id FROM road_lines roads WHERE ST_Intersects(roads.the_geom, my_geom)
SELECT ST_Intersection(roads.the_geom, my_geom) FROM road_lines roads WHERE roads.id = my_id

6voto

MobileCushion Puntos 217

Sí, usted puede hacer esto con FME seguro. Hay muchos "transformers" que se encargan de la limpieza, intersecciones y topología; En este caso probaría el transformador de TopologyBuilder .

Cualquier secuencia de comandos es todo hecho en un entorno gráfico, por lo que es muy simple de hacer.

Usted siempre puede conseguir una versión de prueba de www.safe.com

(Revelación: marca de Irlanda, también conocido como FME del evangelista, seguro Software Inc.)

2voto

Sharp Puntos 31

Analista de red de ArcGIS, que se puede obtener con una prueba gratuita, lo hace en menos de 10 segundos y con sólo unos clics.

1voto

Pablo Puntos 6414

El SIG GRASS tiene herramientas muy eficientes para la limpieza de los polígonos la forma que desee echar un vistazo: http://grass.fbk.eu/grass62/manuals/html62_user/v.clean.html

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