D Задание №4. Отбор элементов транспортной сети
Цель задания — освоение методики отбора элементов транспортных сетей с использованием алгоритмов на графах
Аннотация. Задание посвящено знакомству с методикой автоматизированного отбора дорог для мелкомасштабного картографирования. Необходимо реализовать алгоритм прореживания транспортной сети (отбора линий), основанный на принципе маршрутной связности населенных пунктов. Дополнительно реализуется расчет условной графической нагрузки для линий. Задание выполняется с примененим библиотек osmnx
, networkx
и geopandas
.
Предлагаемый для реализации алгоритм основан на предположении, что в результирующем масштабе необходимо показывать транспортные пути, по которым проходят кратчайшие маршруты между соседними населенными пунктами. Понятие соседства при решении этой задачи может быть формализовано разоличными способами: по количеству (Samsonov and Krivosheina 2012), либо по смежности (Schmid and Janatzek 2013). В настоящей работе используется соседство по смежности: соседними считаются населенные пункты, у которых соприкасаются ячейки Вороного. Общая схема алгоритма выглядит следующим обазом:
- Строится граф дорожной сети.
- Строится диаграмма Вороного населенных пунктов.
- Организуется цикл по точкам населенных пунктов:
- выбирается текущая точка (центральная);
- выбирается относящаяся к текущей точке ячейка Вороного;
- для выбранной ячейки выбираются смежные с ней (касающиеся по границе);
- выбираются соответствующие соседним ячейкам точки населенных пунктов;
- от каждой соседней точки строится маршрут до центральной точки
- линии, по которым прошли маршруты, помечаются флагом.
В результате выполнения алгоритма все транспортные пути, которые оказались задействованы в кратчайших маршрутах, будут помечены специальным флагом. Генерализация завершается исключением непомеченных линий (физическое удаление не требуется, достаточно выполнить атрибутивный запрос).
Часть 1. Подготовка исходных данных
Выберите регион для выполнения задания и скопируйте себе соответствующую базу данных из архива приложенного к данному заданию.
Добавьте в исходный слой населенных пунктов (
poppnt
) целочисленное статуса status, которое будет хранить роль населенного пункта в процессе отбора элементов транспортной сети. Заполните это поле следующим образом: двойка (\(2\)) должна стоять у населенных пунктов, располагающихся внутри выбранного субъекта и имеющих статус не ниже райцентра, единица (\(1\)) должна стоять у всех населенных пунктов, располагающихся за пределами субъекта. Все остальные населенные пункты (располагающиеся внутри субъекта, но имеющие статус ниже райцентра) должны иметь значение \(0\).Добавьте в исходный слой линий (
rdslin
) целочисленное полеselect
, которое будет заполняться флагом отбора (0/1).Создайте в слое дорог новое поле highway и заполните его значениями:
'primary'
— для автомагистралей и усовершенствованных шоссе (CLASS_ID = 62110000, 62121000
)'secondary'
— для шоссе (CLASS_ID = 62122000
)'tertiary'
— для всех прочих дорог
Это нужно для того чтобы последующий механизм маршрутизации мог отдавать больший приоритет более крупным дорогам.
Сконвертируйте полученный набор линий в формат OSM XML, используя JOSM или ogr2osm.
Часть 2. Создание скрипта для отбора элементов транспортной сети
В качестве входных данных необходимо предусмотреть 5 слоев:
- точки населенных пунктов,
- линии дорог в формате OSM XML,
- линии дорог в геореляционном формате,
- поле флага отбора
По результатам выполнения скрипта в поле Show Field должно быть проставлено значение \(1\) для отобранных линий. Все остальные линии должны иметь значение \(0\).
Базовый алгоритм для построения одного маршрута следующий:
- Постройте граф из файла OSM XML (
ox.graph_from_xml
) - Определите для населенных пунктов ближайшие к ним вершины графа (
ox.nearest_nodes
) - Постройте между ними маршрут (
ox.shortest_path
) - Получите подграф, соответствующий маршруту (
nx.subgraph
) - Экспортируйте подграф в фрейм данных (
ox.graph_to_gdfs
) - Объедините геометрический столбец фрейма в один мультиобъект и буферизуйте его на малую величину (
gdf.geometry.unary_union.buffer(1e-9)
) - Отберите дороги по правилу нахождения внутри полученного буфера (
within
) и вычислите имselect = 1
.
После того как базовый алгоритм запрограммирован, адаптируйте его к методике отбора с учетом необходимости построения маршрутов до ближайших населенных пунктов. В построении маршрута должны участвовать все точки со статусом выше 0.
Часть 3. Создание скрипта для оценки относительной графической нагрузки по линейным объектам
Используя имеющиеся у вас знания и навыки, создайте скрипт Python Toolbox, который будет давать оценку относительной графической нагрузки для линейных объектов по ячейкам регулярной сети.
Относительная графическая нагрузка по линейным объектам – суммарная длина линий каждого класса (Lk) с учетом весовых коэффициентов (wk), деленная на площадь ячейки (A):
\[\rho_{L} = \frac{\sum_{k}^{}{w_{k}L_{k}}}{A}\] Числитель формулы имеет единицы измерения на местности (км). Знаменатель выражен в единицах измерения карты (\(см^2\)). Применительно к линейным объектам относительная графическая нагрузка является аналогом густоты, и также выражается в относительных единицах (\(км/см^2\)), но учитывает толщину линий в качестве весовых коэффициентов \(w\), чтобы придать большую нагрузку ячейкам, где проходят линии высоких классов. Веса \(w\) должны быть прямо пропорциональны толщинам линий (или равны им).
Результатом выполнения инструмента должен быть полигональный слой c ячейками регулярной сети, для каждой из которой в некоторое поле записана относительная графическая нагрузка, рассчитанная по вышеприведенной формуле.
Указания к выполнению:
В качестве отправной точки можно использовать скрипт для оценки относительной графической нагрузки точечных объектов, разработанный вами в Самостоятельной работе №1. В процессе экспериментальной работы используйте следующие толщины линий (в пикселах):
Класс | Толщина линии |
---|---|
primary | 4 |
secondary | 2 |
tertiary | 1 |
Часть 4. Создание и анализ карты транспортной связности районных центров субъекта
Используя разработанные инструменты отбора и оценки графической нагрузки, выполните заключительную часть работы:
Выполните отбор элементов дорожной сети, проходящих через районные центры выбранного субъекта. Оформите результат в виде карты масштаба 1:6 000 000. Используйте толщины линий 2, 1 и 0.5 мм соответственно. На схеме должны быть подписаны все районные центры внутри и за пределами субъекта, нанесена граница субъекта и оформлена легенда по трем классам дорог.
Вычислите условную графическую нагрузку всех исходных дорог в масштабе 1:1 000 000 (размер квадрата 2х2 см в масштабе карты). Используйте толщины линий 4, 2 и 1 мм соответственно. Оформите картограмму графической нагрузки в масштабе 1:6 000 000.
Вычислите условную графическую нагрузку отобранных дорог в масштабе 1:6 000 000 (размер квадрата 2х2 см в масштабе карты). Используйте толщины линий 2, 1 и 0,5 мм соответственно. Оформите картограмму графической нагрузки в масштабе 1:6 000 000.
Напишите отчет о проделанной работе, включающий:
- Описание целей и задач самостоятельной работы
- Описание идеи алгоритмов отбора элементов дорожной сети и оценки условной графической нагрузки для линейных объектов
- Процесс создания скриптов и их внешний вид
- Процесс экспериментальной работы
- Оценку полученных результатов с точки зрения географической достоверности. Оценка должна включать сравнение исходной и результирующей картины транспортной сети региона визуально и по картограмме условной графической нагрузки.