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


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), если вы возвращаете только один объект с его конечной / конечной точкой, если больше, чем один это не так и цикл. Надеюсь, это имеет смысл ...


Ну и как это сделать?
— Ионика Бизэ

Вы можете сделать это с помощью Modelbuilder и экспортировать в Python. ArcObjects - это другой маршрут, но более сложный. Вы когда-нибудь использовали Modelbuilder раньше?
— user17260

Пространственное выделение с опцией «штрихи» может помочь вам начать. Может сузить исходный набор выбора при инвертировании набора, который не касается.
— user17260

Я не использовал Modelbuilder. Мне нужен пошаговый ответ, потому что это мое первое взаимодействие с данными OSM. : D Мне очень трудно даже найти учебники по этому поводу.
— Ионика Бизэ

Вау, это большая просьба. Есть ли у вас доступ к ArcInfo лицензии ArcMap?
— user17260

2

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

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

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


Спасибо за это! Скоро попробую. [и] длина (количество ссылок) - это даст мне расстояние в километрах (если нет, как я могу получить это?)?
— Ионика Бизэ

Чтобы получить расстояние между точками, вам не нужно использовать любое программное обеспечение, кроме QGIS. Смотрите здесь и здесь, например. Используемая единица расстояния зависит от системы координат слоя.
— Мефимефи

Кроме того, если вы хотите получить больше информации об инструментах, ориентированных на ландшафтную связность, вы можете взглянуть на это обсуждение Researchgate
— Mefimefi

Я нашел QGIS немного глючным (по крайней мере, на моем MacBook), но последняя ссылка полезна. Также проверим их ответы. Благодарность!
— Ионика Бизэ

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.