Localizando cidades "terminais" no mapa

13

Quero encontrar aldeias / cidades que são fins . Isso significa: eu preciso dessas aldeias que estão ligadas ao máximo de uma aldeia a uma distância de X km.

Eu só estou querendo saber como é chamado esse algoritmo (acho que alguém criou algo semelhante antes).

Existe uma ferramenta para isso? Como é chamado esse conceito?

Por exemplo

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

Desde que a estrada nas montanhas seja maior que Xkm, Village 3e Village 7seria considerada por mim terminal , porque estão ligadas a uma vila (V2, respectivamente V6).

Caso contrário, desejarei criar um com os dados abertos que temos.


O que eu tentei :

Fazendo o download dos dados OSM do meu país (Romênia) e importando as aldeias e cidades para o banco de dados. Usando as funções de geolocalização do banco de dados, sou capaz de encontrar as aldeias que não têm mais que X aldeias no raio de R km.

No entanto, isso não é uma solução para o meu caso, porque, nos meus casos, uma vila pode estar do outro lado da montanha, como no exemplo acima, mas não há um bom caminho para isso (ou nenhum caminho).

Ionică Bizău
fonte
3
O conceito é conectividade e, na teoria dos grafos, seria representado como o número de 'arestas' que um 'nó' possui. Você procuraria nós com uma aresta depois de filtrar as arestas acima do limite de peso. Uma solução real dependeria de quais ferramentas, idioma ou software você está trabalhando.
RoperMaps
@RoperMaps Ainda não tenho nenhuma ferramenta configurada, mas pergunto em geral (e eventualmente, se alguém construiu algo assim antes). Eu estenderia isso, fornecendo uma pontuação (quantas maneiras menor que X esse nó possui). Quanto maior a pontuação, mais conectado (e menos terminal ) é. Se eu construí-lo, provavelmente terminarei analisando alguns gráficos usando o Node.js, mas apenas imaginando se alguém o fez antes. : D
Ionică Bizău
@RoperMaps Acho que posso usar o OSM para isso, mas acho extremamente difícil (por exemplo, existem maneiras de conectar nós, mas esses nós são apenas pontos, não representam cidades). Posso escrever um algoritmo para encontrar as folhas em um gráfico ou algo um pouco mais extenso para o meu caso, mas não sei como usar os dados do OSM para isso (ou existe uma maneira mais fácil do que o OSM?).
Jonic Biz
Qual software você está usando ? você trabalha em distâncias reais ou em distâncias de vôo de pássaros?
Radouxju
@radouxju Meu primeiro protótipo em funcionamento foi distâncias de vôo de pássaros (raio, com base em coordenadas) - novamente, isso é um começo, mas não é o que eu quero. Eu escrevi meu script no Node.js e usando o MongoDB. Prefiro distâncias reais: por exemplo, se houver duas aldeias, separadas por uma colina, sem estradas sobre a colina, a distância entre elas será a estrada mais curta que as conectará.
Jonic Biz

Respostas:

2

Parece-me que você precisa percorrer a geometria da linha, recuperando as coordenadas para cada buffer de ponto final / terminal, selecione a geometria da linha (de suas estradas fc) se você retornar apenas um recurso, é um ponto final / terminal, se mais de um não é e percorre. Espero que isso faça sentido ...

user17260
fonte
Bem, e como fazer isso?
Jonic Biz
Você pode fazer isso com o Modelbuilder e exportar para o Python. ArcObjects é outra rota, mas mais complicada. Você já usou o Modelbuilder antes?
user17260
Uma seleção espacial com a opção "toques" pode ajudar você a começar. Pode restringir o conjunto de seleção original quando você inverte o conjunto de seleção para aqueles que não tocam.
user17260
Eu não usei o Modelbuilder. Preciso de uma resposta passo a passo, porque é minha primeira interação com dados OSM. : D É muito difícil para mim encontrar tutoriais sobre isso.
Jonic Biz
Uau, isso é um grande pedido. Você tem acesso à licença ArcInfo do ArcMap?
user17260
2

Você pode conseguir isso usando o QGIS e um software inicialmente destinado a calcular a conectividade de paisagem como Graphab ou Conefor . Por exemplo :

  • Importe seus dados OSM para o QGIS, arrastando e soltando-os ou usando o plug-in OpenStreetMap.
  • Salve seus dados como uma forma (clique com o botão direito do mouse)
  • Use o plug-in Conefor para gerar os arquivos de nós e conexões, conforme explicado aqui
  • Calcule a importância de cada nó e link usando o Conefor. Um "nó final" não será importante para conectividade. Eu acho que você poderia usar a métrica BC (IIC) porque leva em conta "o número de caminhos mais curtos entre todos os pares de patches que passam por um nó específico (...) [e] o comprimento (número de links) do caminhos entre os patches nos quais um nó específico está envolvido " (veja aqui )

Não pude testar isso - infelizmente não tenho tempo suficiente no momento. Mas acho que poderia funcionar, se você estiver aberto a um pouco de ajustes. Por exemplo, você provavelmente terá que remover os links que conectam dois nós que estão de cada lado de um obstáculo (montanha etc.), manualmente (se não forem muitos) ou usando funções de geoprocessamento e uma forma que contenha seus obstáculos .

Mefimefi
fonte
Obrigado por isso! Vai tentar em breve. [e] o comprimento (número de links) - isso me dará a distância em quilômetros (se não, como posso conseguir isso?)?
Jonic Biz
Para obter a distância entre os pontos, você não precisa se preocupar em usar outro software além do QGIS. Veja aqui e aqui, por exemplo. A unidade de distância usada depende do sistema de coordenadas da camada.
Mefimefi
Além disso, se você quiser obter mais informações sobre ferramentas focadas na conectividade de paisagem, dê uma olhada nesta discussão do Researchgate
Mefimefi
Achei o QGIS um pouco problemático (pelo menos no meu macbook), mas o último link é útil. Irá verificar suas respostas também. Obrigado!
Jonic Biz
Relacionado: gis.stackexchange.com/q/266167/111144
Ionică Bizău