Поиск «терминальных» городов на карте

13

Я хочу найти деревни / города, которые заканчиваются . Это означает: мне нужны эти деревни, которые связаны максимум с одной деревней на расстоянии X км.

Мне просто интересно, как называется этот алгоритм (наверное, кто-то создал что-то подобное раньше).

Есть ли инструмент для этого? Как называется эта концепция?

Например

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

До тех пор, пока Дорога в горах длиннее Xкм, Village 3и Village 7будет считаться моим терминалом , потому что они связаны с одной деревней (V2, соответственно, V6).

В противном случае, я хочу создать один с открытыми данными, которые мы имеем.


Что я пробовал :

Загрузка данных OSM для моей страны (Румыния) и импорт деревень и городов в базу данных. Используя функции геолокации из базы данных, я могу найти деревни, у которых в радиусе R км не более X деревень .

Однако это не решение для моего случая, потому что в моих случаях деревня может быть на другой стороне горы, как в примере выше, но нет хорошего пути к нему (или нет вообще).

Ионика Бизэу
источник
3
Концепция - это связность, и в теории графов она будет представлена ​​как число «ребер», которые имеет «узел». Вы будете искать узлы с одним ребром после того, как вы отфильтровали ребра выше вашего порога веса. Фактическое решение будет зависеть от того, с какими инструментами, языком или программным обеспечением вы работаете.
RoperMaps
@RoperMaps У меня еще нет настроенных инструментов, но я спрашиваю в целом (и, в конце концов, если кто-то создавал что-то подобное раньше). Я бы продлил это, дав оценку (на сколько путей короче X этого узла). Чем больше балл, тем более он связан (и менее терминален ). Если бы я его построил, то, вероятно, я бы в итоге проанализировал некоторые графики с помощью Node.js, но просто хотел бы знать, делал ли это кто-то еще раньше. : D
Ионика Бизэ
@RoperMaps Я думаю, я могу использовать OSM для этого, но я нахожу это чрезвычайно сложным (например, существуют способы соединения узлов, но эти узлы являются просто точками, не представляющими города). Я могу написать алгоритм, чтобы найти листы на графике или что-то более расширенное для моего случая, но я не уверен, как использовать для этого данные OSM (или есть более простой способ, чем OSM?).
Ионика Бизэ
какое программное обеспечение вы используете? ты работаешь на реальных расстояниях или на расстоянии полета птиц?
Radouxju
@radouxju Моим первым рабочим прототипом были расстояния полета птиц (радиус, основанный на координатах) - опять же, это начало, но это не то, что я хочу. Я написал свой скрипт в Node.js и использовал MongoDB. Я предпочитаю реальные расстояния: например, если есть две деревни, разделенные холмом, без дорог над холмом, то расстояние между ними будет самой короткой дорогой, соединяющей их.
Ионика Бизэ

Ответы:

2

Мне кажется, что вам нужно пройти по геометрии линии, извлекая координаты для каждого буфера конечной / конечной точки, он выбирает геометрию линии (из ваших дорог fc), если вы возвращаете только один объект с его конечной / конечной точкой, если больше, чем один это не так и цикл. Надеюсь, это имеет смысл ...

user17260
источник
Ну и как это сделать?
Ионика Бизэ
Вы можете сделать это с помощью Modelbuilder и экспортировать в Python. ArcObjects - это другой маршрут, но более сложный. Вы когда-нибудь использовали Modelbuilder раньше?
user17260
Пространственное выделение с опцией «штрихи» может помочь вам начать. Может сузить исходный набор выбора при инвертировании набора, который не касается.
user17260
Я не использовал Modelbuilder. Мне нужен пошаговый ответ, потому что это мое первое взаимодействие с данными OSM. : D Мне очень трудно даже найти учебники по этому поводу.
Ионика Бизэ
Вау, это большая просьба. Есть ли у вас доступ к ArcInfo лицензии ArcMap?
user17260
2

Вы могли бы достичь этого, используя QGIS и программное обеспечение, изначально предназначенное для расчета связности ландшафта, такое как Graphab или Conefor . Например :

  • Импортируйте данные OSM в QGIS, перетаскивая их или используя плагин OpenStreetMap.
  • Сохраните ваши данные в виде фигуры (щелкните правой кнопкой мыши)
  • Используйте плагин Conefor для генерации файлов узлов и соединений, как описано здесь
  • Рассчитайте важность каждого узла и ссылки, используя Conefor. «Конечный узел» не будет важен для подключения. Я думаю, что вы могли бы использовать метрику BC (IIC), потому что она учитывает «количество кратчайших путей между всеми парами патчей, проходящих через определенный узел (...) [и] длину (количество ссылок) пути между патчами, в которых участвует конкретный узел " (см. здесь )

Я не смог это проверить - к сожалению, мне сейчас не хватает времени. Но я думаю, что это может сработать, если вы готовы немного подправить. Например, вам, вероятно, придется удалить ссылки, соединяющие два узла, которые находятся на каждой стороне препятствия (горы и т. Д.), Либо вручную (если их не слишком много), либо с помощью функций геообращения и формы, содержащей ваши препятствия. ,

Mefimefi
источник
Спасибо за это! Скоро попробую. [и] длина (количество ссылок) - это даст мне расстояние в километрах (если нет, как я могу получить это?)?
Ионика Бизэ
Чтобы получить расстояние между точками, вам не нужно использовать любое программное обеспечение, кроме QGIS. Смотрите здесь и здесь, например. Используемая единица расстояния зависит от системы координат слоя.
Мефимефи
Кроме того, если вы хотите получить больше информации об инструментах, ориентированных на ландшафтную связность, вы можете взглянуть на это обсуждение Researchgate
Mefimefi
Я нашел QGIS немного глючным (по крайней мере, на моем MacBook), но последняя ссылка полезна. Также проверим их ответы. Благодарность!
Ионика Бизэ
Связанный: gis.stackexchange.com/q/266167/111144
Ионик Бизэ