Puedo recibir mapas de cualquier fuente para mi proyecto, y para el algoritmo C ++ que estoy haciendo, es imprescindible que el algoritmo sepa dónde están los cruces de carreteras (nodos donde se encuentran más de dos segmentos de carreteras). Además, en muchos de los mapas que obtengo, hay carreteras que se sobrepasan y se disparan (es decir: las carreteras no están conectadas correctamente). Una forma de corregir el problema es 'limpiar' la red de carreteras con Autocad. Las preguntas que tengo son:
- ¿Existe una manera eficiente (algún software que pueda hacerlo?) Para obtener mi mapa en formato GML, que contiene información sobre los cruces de carreteras en el mapa? (tal vez tenga una etiqueta GML que dice que un nodo en particular es una unión)
- ¿Hay alguna otra forma de "limpiar" la red de carreteras?
Los colegas han sugerido FME, pero eso implica escribir guiones y no estamos seguros de si el guión sería lo suficientemente flexible como para atender a todos los mapas. La única otra forma de detectar uniones es usar la fuerza bruta y encontrar qué segmentos de carretera tienen nodos comunes. ¿ArcGIS ayudaría? (No lo he usado, pero he oído hablar de él) Estoy seguro de que debería haber una mejor manera ...
Respuestas:
Si tiene las carreteras en forma espacial, como un Shapefile, puede cargarlas en PostGIS y hacer que las encuentre automáticamente mediante una consulta SQL. He hecho esto antes: la instrucción SQL está diseñada para encontrar para cada camino aquellos que se cruzan geográficamente y crean un punto nodal para cada cruce.
Intentaré limpiar esto más tarde, pero aquí está el flujo básico que puedes tomar ...
Las funciones ST_ * son las que hacen que esto funcione dentro de PostGIS
Los siguientes son solo fragmentos ya que no tengo tiempo para terminar, tal vez alguien pueda editarlo antes de que regrese aquí ...
fuente
Puede analizar polilíneas de maneras asombrosas mediante el uso de buffers. Esto suele ser ineficiente: los búferes crean muchos vértices adicionales, pero (a) es una técnica disponible en muchos SIG (basados en vectores o ráster) y (b) a veces puede producir información que de otro modo sería difícil de obtener.
En este caso, amortiguar el camino en una pequeña cantidad y luego amortiguar por el negativo de la misma cantidad deja pequeñas "islas" alrededor de todas las curvas y alrededor de todas las intersecciones. Esto es fácil de probar geométricamente.
Aquí hay un ejemplo de un buffer de polilínea de 10 m (gris) y su buffer de -10 m (rojo claro) en un mapa que tiene 650 m de ancho:
Ahora interseque la capa de polilínea original con estos polígonos de isla, combine los segmentos por identificador de isla y cuente las piezas:
Los segmentos amarillos claros designan las piezas de alto conteo y los segmentos cian oscuros designan los de bajo conteo. De esta manera, hemos (a) encontrado todas las curvas e intersecciones (incluidas las auto-intersecciones) y las uniones cercanas (vea el extremo izquierdo, donde los dos segmentos no se encuentran del todo)) y (b) diferenciaron las curvas de las intersecciones. Podemos encontrar las casi uniones seleccionando las islas que contienen dos o más segmentos conectados: las curvas solo contienen segmentos conectados.
Debido a la simetría del almacenamiento en búfer, los centroides de las islas de intersección son los puntos de intersección.
Un aspecto hermoso de este estilo de análisis es que no le importa cómo se representa la polilínea subyacente: podría ser una entidad única, podría ser una entidad para cada segmento de línea, o cualquier cosa intermedia.
fuente
Sí, puedes hacer esto con FME seguro. Hay muchos "transformadores" que manejan la limpieza, las intersecciones y la topología; Me gustaría probar el TopologyBuilder transformador en este caso.
Cualquier secuencia de comandos se realiza en un entorno gráfico, por lo que es muy simple de hacer.
Siempre puede obtener una versión de prueba en www.safe.com
(Divulgación: Mark Ireland, también conocido como FME Evangelist, Safe Software Inc.)
fuente
GRASS GIS tiene herramientas muy eficientes para limpiar los polígonos de la manera que desee, consulte: http://grass.fbk.eu/grass62/manuals/html62_user/v.clean.html
fuente
El analista de red Arcgis, que puede obtener con una prueba gratuita, lo hace en menos de 10 segundos y con solo unos pocos clics.
fuente
El proceso se puede hacer en ArcGIS con un analista de red.
También hay otra forma en ArcGIS: puede seguir los siguientes pasos: "Arctoolbox" → "Herramientas de administración de datos" → "entidades" → "vértices de entidades a puntos" y allí puede hacer lo que necesita.
fuente