Проблема с дорожной сетью:Shortest path работает в QGIS, но st_network_cost не работает в R.

Вопрос или проблема

После редактирования дорожной сети в QGIS для добавления недостающих дорог и их привязки к существующим маршрутам, R не распознает эти дополнения для маршрутизации. В QGIS мои редактирования маршрутизируются правильно с помощью инструмента Кратчайший путь, но сохранение в виде ESRI shapefile или GPKG и импорт в R не сохраняет связность.

У меня есть дорожная сеть (https://ecat.ga.gov.au/geonetwork/srv/eng/catalog.search#/metadata/64058) в виде shapefile. Я хочу использовать ее для решения задачи маршрутизации TSP. Однако в ней не хватает некоторых дорог, которые мне нужны для доступа к некоторым интересным местам, поэтому я добавил больше дорог, следуя этому методу:

  1. импортировать дорожный shapefile в QGIS
  2. в слое дорог я добавил новые дороги с помощью инструмента Добавить линейный объект
  3. я использовал Привязать геометрии к слою с допустимой ошибкой 50 м, предпочитая ближайшую точку, вставлял дополнительные вершины, где это необходимо
  4. Исправить геометрии
  5. Удалить нулевые геометрии
  6. Разделить линиями

В результате слой выглядит так, как я ожидал. Когда я использую Кратчайший путь (от точки до точки), он может проложить маршрут к моим интересным местам вдоль новых дорог:
фрагмент кратчайшего маршрута к проблемной точке вдоль новых дорог

Однако, когда я сохраняю его как ESRI shapefile или GPKG, а затем импортирую в R, он все равно неправильно маршрутизирует через новые дороги, используя st_network_cost или st_network_paths:
маршрут, созданный в R, не ведет к целевой точке

Я сделал воспроизводимый пример своей проблемы в R здесь: https://github.com/eilishmcmaster/netowork_problem

Какова причина этой проблемы в R и как мне заставить его учитывать новые дороги?

Я пытался соединить близлежащие несоединенные узлы в R (создать новые границы между несоединенными узлами на расстоянии менее 10 м), но это не помогло.

Буду признателен за любую помощь, я все еще новичок в работе с геопространственными данными.

Ответ или решение

Проблема с маршрутизацией в геопространственном анализе может быть достаточно сложной, особенно в ситуации, когда данные из одной программы не интегрируются должным образом в другую. В вашем случае существует ряд возможных причин, по которым функция st_network_cost в R не распознает изменения, сделанные в QGIS, даже если визуально все выглядит корректно. Давайте рассмотрим возможные решения.

Анализ проблемы

  1. Проверка на наличие геометрических ошибок: Несмотря на то, что вы использовали инструменты QGIS, такие как "Fix Geometries" и "Remove Null Geometries", убедитесь, что в конечном слое нет оставшихся геометрических ошибок. Используйте инструмент "Check Geometries" для выявления возможных проблем.

  2. Конвертация форматов: Шейп-файлы и GPKG имеют свои особенности. Если вы сохраняете данные в формате ESRI Shapefile, помните о том, что этот формат ограничен определенной длиной имени поля и поддерживает лишь некоторое количество типов геометрий. Рекомендуется использовать формат GPKG, который более удобен для сложных данных.

  3. Векторные связи и топология: Проверьте, правильно ли установлены связи между вершинами (нодами). В R функция st_network_cost опирается на корректное определение узлов и связей (ребер) в сети. В QGIS у вас могло произойти неявное создание связей через инструменты, а в R нужно явно указывать их.

Решения и рекомендации

  1. Экспорт структуры данных: Перед экспортом из QGIS убедитесь, что атрибуты, отвечающие за идентификацию узлов и рёбер, корректно указаны. Вы можете добавить идентификаторы для новых объектов.

  2. Использование пакетов R: Убедитесь, что вы используете правильные функции для работы с сетью — пакеты sf и stplanr могут предложить полезные инструменты для маршрутизации и работы с сетевыми данными. Проверьте, правильно ли заданы параметры в ваших функциях, например, в st_as_sf перед имплементацией st_network_cost.

  3. Топологическая проверка: Возможно, стоит проверить топологию сети с помощью функции st_is_valid, чтобы убедиться в правильности структуры данных. Если данные показывают ненормальные значения, используйте st_make_valid, чтобы исправить это.

  4. Документация и примеры: Поскольку вы упомянули, что у вас есть репозиторий с воспроизводимым примером, убедитесь, что в вашем коде точно указаны все параметры и проверьте все вызовы, связанные с st_network_cost и st_network_paths. Лучше всего задать базовые примеры, чтобы изолировать проблему.

  5. Обработка узлов: Если вы уже пытались соединить близкие узлы, возможно, следует использовать функцию st_snap для лучшей интеграции новых и старых рёбер.

Заключение

Проблема, с которой вы столкнулись, часто бывает результатом несовместимости между инструментами для работы с геоданными. Следуя вышеописанным рекомендациям и уделяя внимание деталям, вы сможете устранить проблему с маршрутизацией. Напоминаем, что документация и активное сообщество, например, на GitHub, могут помочь вам в поиске специфичных решений.

Если у вас есть дополнительные вопросы или необходима помощь в конкретной части кода, пожалуйста, дайте знать!

Оцените материал
Добавить комментарий

Капча загружается...