Расчет расстояний по графу
Добавлено: 21 дек 2022, 02:19
Всем привет.
Есть полигональный слой с земельными участками и слой дорог. Дороги бывают нескольких типов (тип дороги отражен в атрибуте). Задача следующая: рассчитать расстояния от земельных участков до разных типов дорог по графу дорог. Первым делом я нашел тип ближайшей дороги к каждому ЗУ с помощью выражения "overlay_nearest(layer:='Road', expression:="Type", limit:=1)[0]".
Далее я нашел расстояние до этой дороги.
Выражение:
"length(shortest_line($geometry, geometry( get_feature( 'Road',fid, overlay_nearest(layer:='Road', expression:=fid, limit:=1)[0] ) ) ))".
Далее я нашел ближайшую точку на слое дорог от ЗУ.
Выражение:
"end_point( shortest_line($geometry, geometry( get_feature( 'road',fid, overlay_nearest(layer:='road', expression:=fid, limit:=1)[0] ) ) ))".
И вот теперь от множества этих точек (Множество А) мне нужно рассчитать расстояния до остальных типов дорог. Предварительно я нашел "пересечения" разных типов дорог получив множество точек (Множество Б). То есть мне нужно найти расстояние от Аn до нескольких точек Б (количество точек зависит от количества типов дорог)
С помощью библиотеки сетевого анализа я написал алгоритм, который считает расстояние от Аn до всех точек Б (используя слой дорог как граф) и выбирает минимальные расстояние для каждого типа дорог.
Проблема в следующем: Множество точек Б очень велико и алгоритм работает медленно.
Есть у кого идеи как сократить множество Б(Я уже прописал в алгоритме, чтобы он не считал расстояние до типа дороги, который является ближайшим)?.
Есть полигональный слой с земельными участками и слой дорог. Дороги бывают нескольких типов (тип дороги отражен в атрибуте). Задача следующая: рассчитать расстояния от земельных участков до разных типов дорог по графу дорог. Первым делом я нашел тип ближайшей дороги к каждому ЗУ с помощью выражения "overlay_nearest(layer:='Road', expression:="Type", limit:=1)[0]".
Далее я нашел расстояние до этой дороги.
Выражение:
"length(shortest_line($geometry, geometry( get_feature( 'Road',fid, overlay_nearest(layer:='Road', expression:=fid, limit:=1)[0] ) ) ))".
Далее я нашел ближайшую точку на слое дорог от ЗУ.
Выражение:
"end_point( shortest_line($geometry, geometry( get_feature( 'road',fid, overlay_nearest(layer:='road', expression:=fid, limit:=1)[0] ) ) ))".
И вот теперь от множества этих точек (Множество А) мне нужно рассчитать расстояния до остальных типов дорог. Предварительно я нашел "пересечения" разных типов дорог получив множество точек (Множество Б). То есть мне нужно найти расстояние от Аn до нескольких точек Б (количество точек зависит от количества типов дорог)
С помощью библиотеки сетевого анализа я написал алгоритм, который считает расстояние от Аn до всех точек Б (используя слой дорог как граф) и выбирает минимальные расстояние для каждого типа дорог.
Проблема в следующем: Множество точек Б очень велико и алгоритм работает медленно.
Есть у кого идеи как сократить множество Б(Я уже прописал в алгоритме, чтобы он не считал расстояние до типа дороги, который является ближайшим)?.