Encontrar ciudades "terminales" en el mapa

13

Quiero encontrar pueblos / ciudades que son fines . Eso significa: necesito estos pueblos que están vinculados a un máximo de un pueblo en una distancia de X km.

Me pregunto cómo se llama este algoritmo (supongo que alguien creó algo similar antes).

¿Hay alguna herramienta para esto? ¿Cómo se llama este concepto?

P.ej

 City ------------ Village 1 ------- Village 2 ------ Village 3 - - - [ Mountain]
                    \                 \                                \
                     Village 4         |                                Road
                     |                  \                            in mountains
                     Village 5----------Village6---------Village7 - - - - -  

Mientras el Camino en las montañas sea ​​más largo que Xkm, Village 3y Village 7sería considerado por mi terminal , porque están vinculados a una aldea (V2, respectivamente V6).

De lo contrario, querré construir uno con los datos abiertos que tenemos.


Lo que he intentado :

Descargar los datos de OSM para mi país (Rumania) e importar los pueblos y ciudades a la base de datos. Utilizando las funciones de geolocalización de la base de datos, puedo encontrar las aldeas que no tienen más de X aldeas en el radio de R km.

Sin embargo, esta no es una solución para mi caso porque en mis casos una aldea puede estar al otro lado de la montaña, como en el ejemplo anterior, pero no hay una buena manera de hacerlo (o no hay ninguna manera).

Ionică Bizău
fuente
3
El concepto es conectividad, y en teoría de grafos se representaría como el número de 'aristas' que tiene un 'nodo'. Debería estar buscando nodos con un borde después de filtrar los bordes por encima de su umbral de peso. Una solución real dependería de las herramientas, el idioma o el software con el que esté trabajando.
RoperMaps
@RoperMaps Todavía no tengo ninguna herramienta configurada, pero preguntando en general (y eventualmente, si alguien construyó algo como esto antes). Extendería esto, dando una puntuación (cuántas formas más cortas que X tiene ese nodo). Cuanto mayor es el puntaje, más conectado (y menos terminal ) es. Si lo construyo, probablemente termine analizando algunos gráficos usando Node.js, pero preguntándome si alguien más lo hizo antes. : D
Ionică Bizău
@RoperMaps Creo que puedo usar OSM para esto, pero me resulta extremadamente difícil (por ejemplo, hay formas de conectar nodos, pero estos nodos son solo puntos, no representan ciudades). Puedo escribir un algoritmo para encontrar las hojas en un gráfico o algo un poco más extendido para mi caso, pero no estoy seguro de cómo usar los datos de OSM para esto (¿o hay una manera más fácil que OSM?).
Ionică Bizău
Que software estas usando ? trabajas en distancias reales o en distancias de vuelo de aves?
radouxju
@radouxju Mi primer prototipo funcional fue la distancia de vuelo de las aves (radio, basado en coordenadas); de nuevo, eso es un comienzo, pero no es lo que quiero. Escribí mi script en Node.js y usando MongoDB. Prefiero distancias reales: por ejemplo, si hay dos pueblos, separados por una colina, sin caminos sobre la colina, entonces la distancia entre ellos será la carretera más corta que los conecta.
Ionică Bizău

Respuestas:

2

Me parece que debe pasar por la geometría de la línea recuperando las coordenadas para cada búfer de punto final / terminal, seleccione la geometría de línea (de sus carreteras fc) si devuelve solo una característica, es un punto final / terminal, si es más de uno que no es y recorrer. Espero que esto tenga sentido ...

usuario17260
fuente
¿Y cómo hacer eso?
Ionică Bizău
Puede hacerlo con Modelbuilder y exportar a Python. ArcObjects es otra ruta pero más complicada. ¿Alguna vez has usado Modelbuilder antes?
user17260
Una selección espacial con la opción "toques" podría ayudarlo a comenzar. Puede reducir el conjunto de selección original cuando invierte el conjunto de selección a aquellos que no se tocan.
user17260
No utilicé Modelbuilder. Necesito una respuesta paso a paso, porque es mi primera interacción con los datos de OSM. : D Es muy difícil para mí incluso encontrar tutoriales al respecto.
Ionică Bizău
Wow, esa es una gran solicitud. ¿Tiene acceso a la licencia ArcInfo de ArcMap?
user17260
2

Es posible que pueda lograr esto utilizando QGIS y un software inicialmente destinado a calcular la conectividad del paisaje como Graphab o Conefor . Por ejemplo :

  • Importe sus datos de OSM a QGIS, ya sea arrastrándolos y soltándolos o utilizando el complemento OpenStreetMap.
  • Guarde sus datos como una forma (clic derecho)
  • Use el complemento Conefor para generar los nodos y archivos de conexiones, como se explica aquí
  • Calcule la importancia de cada nodo y enlace utilizando Conefor. Un "nodo final" no será importante para la conectividad. Creo que podría usar la métrica BC (IIC) porque tiene en cuenta "el número de rutas más cortas entre todos los parches que pasan por un nodo en particular (...) [y] la longitud (número de enlaces) del rutas entre parches en los que participa un nodo particular " (ver aquí )

No he podido probar esto, desafortunadamente no tengo suficiente tiempo en este momento. Pero creo que podría funcionar, si estás abierto a un poco de ajustes. Por ejemplo, probablemente tendrá que eliminar los enlaces que conectan dos nodos que están a cada lado de un obstáculo (montaña, etc.), ya sea manualmente (si no son demasiados) o utilizando funciones de geoprocesamiento y una forma que contenga sus obstáculos. .

Mefimefi
fuente
¡Gracias por esto! Lo intentaré pronto. [y] la longitud (número de enlaces) : ¿eso me dará la distancia en kilómetros (si no, ¿cómo puedo obtener eso?)?
Ionică Bizău
Para obtener la distancia entre puntos, no tiene que molestarse en utilizar ningún software que no sea QGIS. Ver aquí y aquí, por ejemplo. La unidad de distancia utilizada depende del sistema de coordenadas de la capa.
Mefimefi
Además, si desea obtener más información sobre las herramientas que se centran en la conectividad del paisaje, puede echar un vistazo a esta discusión de Researchgate
Mefimefi,
Encontré QGIS un poco defectuoso (al menos en mi macbook), pero el último enlace es útil. Verificará sus respuestas también. ¡Gracias!
Ionică Bizău
Relacionado: gis.stackexchange.com/q/266167/111144
Ionică Bizău