Trovare città "terminali" sulla mappa


13

Voglio trovare villaggi / città che sono fini . Ciò significa: ho bisogno di questi villaggi che sono collegati al massimo un villaggio a una distanza di X km.

Mi chiedo solo come si chiama questo algoritmo (immagino che qualcuno abbia creato qualcosa di simile prima).

C'è uno strumento per questo? Come si chiama questo concetto?

Per esempio

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

Fino a quando la Strada in montagna è più lunga di Xkm, Village 3e Village 7sarebbe considerata da me terminale , perché sono collegati a un villaggio (V2, rispettivamente V6).

Altrimenti, vorrò costruirne uno con i dati aperti che abbiamo.


Cosa ho provato :

Download dei dati OSM per il mio paese (Romania) e importazione dei villaggi e delle città nel database. Utilizzando le funzioni di geolocalizzazione dal database sono in grado di trovare i villaggi che non hanno più di X villaggi nel raggio di R km.

Tuttavia, questa non è una soluzione per il mio caso perché nei miei casi un villaggio potrebbe trovarsi dall'altra parte della montagna, come nell'esempio sopra, ma non c'è un buon modo per farlo (o per niente).


3
Il concetto è connettività e nella teoria dei grafi sarebbe rappresentato come il numero di "spigoli" di un "nodo". Dovresti cercare nodi con un bordo dopo aver filtrato i bordi sopra la soglia di peso. Una soluzione effettiva dipende da quali strumenti, lingua o software stai lavorando.
RoperMaps

@RoperMaps Non ho ancora impostato alcuno strumento, ma chiedendo in generale (e alla fine, se qualcuno ha creato qualcosa di simile prima). Vorrei estendere questo, dando un punteggio (quanti modi in meno di X quel nodo ha). Maggiore è il punteggio, più è connesso (e meno terminale ). Se lo costruissi, probabilmente finirò analizzando alcuni grafici usando Node.js, ma chiedendomi solo se qualcun altro l'ha fatto prima. : D
Ionică Bizău,

@RoperMaps Immagino di poter usare OSM per questo, ma lo trovo estremamente difficile (ad esempio ci sono modi per connettere nodi, ma questi nodi sono solo punti, non rappresentano città). Posso scrivere un algoritmo per trovare le foglie in un grafico o qualcosa di un po 'più esteso per il mio caso, ma non sono sicuro di come utilizzare i dati OSM per questo (o c'è un modo più semplice di OSM?).
Ionică Bizău,

Quale software stai usando ? lavori a distanze reali o a distanza di voli di uccelli?
Radouxju,

@radouxju Il mio primo prototipo funzionante sono state le distanze di volo degli uccelli (raggio, in base alle coordinate) - di nuovo, questo è un inizio, ma non è quello che voglio. Ho scritto la mia sceneggiatura in Node.js e usando MongoDB. Preferisco le distanze reali: ad esempio se ci sono due villaggi, separati da una collina, senza strade sulla collina, la distanza tra loro sarà la strada più breve che li collega.
Ionică Bizău,

Risposte:


2

Mi sembra che sia necessario scorrere la geometria della linea recuperando le coordinate per ciascun buffer del punto finale / terminale selezionare la geometria della linea (dalle proprie strade fc) se si restituisce solo una caratteristica è un punto finale / terminale, se più di uno non lo è e passa in rassegna. Spero che abbia senso ...


Bene, e come farlo?
Ionică Bizău,

Potresti essere in grado di farlo con Modelbuilder ed esportare in Python. ArcObjects è un'altra strada ma più complicata. Hai mai usato Modelbuilder prima?
user17260

Una selezione spaziale con l'opzione "tocchi" potrebbe iniziare. Può restringere il set di selezione originale quando si inverte il set di selezione a quelli che non toccano.
user17260

Non ho usato Modelbuilder. Ho bisogno di una risposta passo dopo passo, perché è la mia prima interazione con i dati OSM. : D È molto difficile per me persino trovare tutorial a riguardo.
Ionică Bizău,

Wow, questa è una grande richiesta. Hai accesso alla licenza ArcInfo di ArcMap?
user17260

2

Potresti riuscire a raggiungere questo obiettivo utilizzando QGIS e un software inizialmente finalizzato al calcolo della connettività del paesaggio come Graphab o Conefor . Per esempio :

  • Importa i tuoi dati OSM in QGIS, trascinandoli o rilasciandoli o utilizzando il plug-in OpenStreetMap.
  • Salva i tuoi dati come forma (tasto destro)
  • Utilizzare il plug-in Conefor per generare i nodi e i file di connessione, come spiegato qui
  • Calcola l'importanza di ciascun nodo e collegamento usando Conefor. Un "nodo finale" non sarà importante per la connettività. Penso che potresti usare la metrica BC (IIC) perché tiene conto del "numero di percorsi più brevi tra tutte le coppie di patch che attraversano un nodo particolare (...) [e] la lunghezza (numero di collegamenti) del percorsi tra patch in cui è coinvolto un nodo particolare " (vedi qui )

Non sono stato in grado di testarlo, purtroppo non ho abbastanza tempo in questo momento. Ma penso che potrebbe funzionare, se sei aperto a un po 'di modifiche. Ad esempio, probabilmente dovrai rimuovere i collegamenti che collegano due nodi che si trovano su ciascun lato di un ostacolo (montagna, ecc.), Manualmente (se non sono troppi) o usando le funzioni di geoproccesing e una forma contenente i tuoi ostacoli .


Grazie per questo! Ci proverò presto. [e] la lunghezza (numero di collegamenti) - che mi darà la distanza in chilometri (in caso contrario, come posso ottenerlo?)?
Ionică Bizău,

Per ottenere la distanza tra i punti, non devi preoccuparti di utilizzare software diverso da QGIS. Vedi qui e qui per esempio. L'unità di distanza utilizzata dipende dal sistema di coordinate del livello.
Mefimefi,

Inoltre, se desideri maggiori informazioni sugli strumenti incentrati sulla connettività del paesaggio, potresti dare un'occhiata a questa discussione di Researchgate
Mefimefi,

Ho trovato QGIS un po 'difettoso (almeno sul mio macbook), ma l'ultimo link è utile. Controllerà anche le loro risposte. Grazie!
Ionică Bizău,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.