Recherche de villes «terminales» sur la carte

13

Je veux trouver des villages / villes qui sont des fins . Cela signifie: j'ai besoin de ces villages qui sont liés à un maximum d'un village sur une distance de X km.

Je me demande simplement comment s'appelle cet algorithme (je suppose que quelqu'un a créé quelque chose de similaire auparavant).

Existe-t-il un outil pour cela? Comment s'appelle ce concept?

Par exemple

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

Tant que la route en montagne est plus longue que Xkm, Village 3et Village 7serait considérée par moi comme terminal , car elle est reliée à un village (V2, respectivement V6).

Sinon, je veux en créer un avec les données ouvertes dont nous disposons.


Ce que j'ai essayé :

Téléchargement des données OSM pour mon pays (Roumanie) et importation des villages et des villes dans la base de données. En utilisant les fonctions de géolocalisation de la base de données, je peux trouver les villages qui n'ont pas plus de X villages dans le rayon de R km.

Cependant, ce n'est pas une solution pour mon cas car dans mon cas, un village peut être de l'autre côté de la montagne, comme dans l'exemple ci-dessus, mais il n'y a pas de bon moyen (ou pas du tout).

Ionică Bizău
la source
3
Le concept est la connectivité, et dans la théorie des graphes serait représenté comme le nombre de «bords» d'un «nœud». Vous devriez rechercher des nœuds avec un bord après avoir filtré les bords au-dessus de votre seuil de poids. Une solution réelle dépendrait des outils, de la langue ou du logiciel avec lesquels vous travaillez.
RoperMaps
@RoperMaps Je n'ai pas encore installé d'outils, mais je demande en général (et finalement, si quelqu'un a construit quelque chose comme ça avant). Je voudrais étendre cela, en donnant un score (combien de façons plus court que X ce nœud a). Plus le score est élevé, plus il est connecté (et moins terminal ). Si je le construisais, je finirais probablement par analyser certains graphiques en utilisant Node.js, mais je me demandais simplement si quelqu'un d'autre l'avait fait auparavant. : D
Ionică Bizău
@RoperMaps Je suppose que je peux utiliser OSM pour cela, mais je trouve cela extrêmement difficile (par exemple, il existe des moyens de connecter des nœuds, mais ces nœuds ne sont que des points, ne représentant pas des villes). Je peux écrire un algorithme pour trouver les feuilles dans un graphique ou quelque chose d'un peu plus étendu pour mon cas, mais je ne sais pas comment utiliser les données OSM pour cela (ou y a-t-il un moyen plus simple que OSM?).
Ionică Bizău
Quel logiciel utilises-tu ? travaillez-vous à de réelles distances ou à des distances de vol d'oiseaux?
radouxju
@radouxju Mon premier prototype de travail était les distances de vol des oiseaux (rayon, basé sur les coordonnées) - encore une fois, c'est un début, mais ce n'est pas ce que je veux. J'ai écrit mon script dans Node.js et en utilisant MongoDB. Je préfère les distances réelles: par exemple, s'il y a deux villages, séparés par une colline, sans routes sur la colline, alors la distance entre eux sera la route la plus courte les reliant.
Ionică Bizău

Réponses:

2

Il me semble que vous devez parcourir la géométrie de la ligne en récupérant les coordonnées de chaque tampon de point final / terminal, il sélectionnera la géométrie de la ligne (à partir de vos routes fc) si vous ne renvoyez qu'une seule entité, c'est un point final / terminal, si plus de celui-ci n'est pas et boucle. J'espère que cela a du sens ...

user17260
la source
Eh bien, et comment faire ça?
Ionică Bizău
Vous pourrez peut-être le faire avec Modelbuilder et exporter vers Python. ArcObjects est un autre itinéraire mais plus compliqué. Avez-vous déjà utilisé Modelbuilder?
user17260
Une sélection spatiale avec l'option "touches" pourrait vous aider à démarrer. Peut réduire le jeu de sélection d'origine lorsque vous inversez le jeu de sélection à ceux qui ne se touchent pas.
user17260
Je n'ai pas utilisé Modelbuilder. J'ai besoin d'une réponse étape par étape, car c'est ma première interaction avec les données OSM. : D C'est très difficile pour moi de trouver même des tutoriels à ce sujet.
Ionică Bizău
Wow, c'est une grosse demande. Avez-vous accès à la licence ArcInfo d'ArcMap?
user17260
2

Vous pourrez peut-être y parvenir en utilisant QGIS et un logiciel initialement destiné à calculer la connectivité du paysage comme Graphab ou Conefor . Par exemple :

  • Importez vos données OSM dans QGIS, soit en les faisant glisser et en les déposant, soit en utilisant le plugin OpenStreetMap.
  • Enregistrez vos données sous forme (clic droit)
  • Utilisez le plugin Conefor pour générer les fichiers de nœuds et de connexions, comme expliqué ici
  • Calculez l'importance de chaque nœud et lien à l'aide de Conefor. Un «nœud d'extrémité» ne sera pas important pour la connectivité. Je pense que vous pourriez utiliser la métrique BC (IIC) car elle prend en compte "le nombre de chemins les plus courts entre toutes les paires de correctifs qui passent par un nœud particulier (...) [et] la longueur (nombre de liens) du chemins entre les correctifs dans lesquels un nœud particulier est impliqué " (voir ici )

Je n'ai pas pu tester cela - je n'ai malheureusement pas assez de temps pour le moment. Mais je pense que cela pourrait fonctionner, si vous êtes ouvert à un peu de peaufinage. Par exemple, vous devrez probablement supprimer les liens reliant deux nœuds qui se trouvent de chaque côté d'un obstacle (montagne, etc.), soit manuellement (s'ils ne sont pas trop nombreux) soit en utilisant des fonctions de géoprocession et une forme contenant vos obstacles .

Mefimefi
la source
Merci pour cela! Je vais l'essayer bientôt. [et] la longueur (nombre de liens) - cela me donnera-t-il la distance en kilomètres (sinon, comment puis-je l'obtenir?)?
Ionică Bizău
Pour obtenir la distance entre les points, vous n'avez pas à vous soucier d'utiliser un logiciel autre que QGIS. Voir ici et ici par exemple. L'unité de distance utilisée dépend du système de coordonnées de la couche.
Mefimefi
De plus, si vous voulez plus d'informations sur les outils se concentrant sur la connectivité du paysage, vous voudrez peut-être jeter un œil à cette discussion Researchgate
Mefimefi
J'ai trouvé QGIS un peu bogué (au moins sur mon macbook), mais le dernier lien est utile. Vérifiera également leurs réponses. Merci!
Ionică Bizău
Connexe: gis.stackexchange.com/q/266167/111144
Ionică Bizău