pgr_drivingDistance с гибким значением расстояния на каждом маршруте - PullRequest
0 голосов
/ 27 июня 2019

Я хотел бы рассчитать график, подобный изохроне, используя pgsql. Поэтому я уже использовал алгоритм pgr_drivingDistance . Вы указываете начальную точку и значение расстояния и получаете изохрону.

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

SELECT * FROM pgr_drivingDistance(
        'SELECT id, source, target, cost FROM edge_table',
        2, 2, false -- starting point, distance, directed
      );

Красная звезда представляет отправную точку.

Теперь мне нужен график, который работает одинаково, например, начиная с одной точки и получая маршруты во всех направлениях. Разница в том, что я не хочу указывать расстояние, а список с точечными координатами, которые лежат в сети дорог. Маршрут в каждом направлении должен останавливаться в первой точке, лежащей на каждом маршруте. Расстояние на каждом маршруте разное, и я не знаю, какие точки являются ближайшими.

Предполагается, что желаемый вывод с использованием точек «остановки», которые отображаются зеленым цветом, выглядит следующим образом.

Я уже пробовал:

  • Использование заданного алгоритма pgr_drivingDistance и повышение значения расстояния каждый раз, когда точка не достигнута -> проблема здесь: расстояние одинаково для всех направлений и не индивидуально для каждого маршрута.
  • Использование алгоритма pgr_dijkstra для каждого маршрута -> проблема здесь: поскольку вы не знаете, какая точка затронута, вы не знаете, какую конечную точку выбрать для расчета. Вы также не можете взять ближайший в непосредственной близости, потому что вам нужен ближайший на конкретном маршруте.

Я знаю, что мне нужно построить почти полный новый алгоритм, но, возможно, у кого-то есть идея, как начать или даже испытать эту проблему.

Заранее спасибо!

1 Ответ

0 голосов
/ 28 июня 2019

Это проблема маршрутизации один ко многим.Вы должны рассчитать маршрут до каждой конечной точки, чтобы найти самую короткую.В последнее время я не смотрел на функцию pgRouting, но считаю, что есть функция Дейкстры «один ко многим», «один ко многим» и «многие ко многим».Вы должны иметь возможность использовать один ко многим для вычисления всех маршрутов за один раз, а затем вы можете отсортировать маршруты по длине, чтобы найти самый короткий.

...