PgRouting - Как обрезать ссылки при достижении максимальной стоимости?


13

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

По сути, я надеюсь задать вопрос: «Начиная с пункта X, как далеко я могу идти в любом заданном направлении, учитывая общий бюджет поездки в 1 км, следуя сети дорог?» В результате будет получен набор обрезанных полилиний, представляющих общий диапазон возможных перемещений с учетом бюджета в 1 км.

Для справки, этот анализ GRASS, кажется, именно то, что я хочу сделать (за исключением того, что я хочу сделать это в PostGIS): http://www.gdf-hannover.de/lit_html/grass60_v1.2_en/node57.html#sec: optalloc

Этот следующий пример, кажется, почти то, что я хочу сделать, за исключением того, что он, кажется, отвечает на вопрос "к каким узлам я мог бы путешествовать, учитывая бюджет путешествия X расстояния?" http://underdark.wordpress.com/2011/02/12/drive-time-isochrones/

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


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

Ответы:


2

Одна мысль, которая у меня была, заключалась в том, чтобы: 1) запустить процедуру Driving_distance и 2) использовать процедуру «points_as_polygon» из pgRouting (которая вызывает функцию alphashape), чтобы сгенерировать наименьший многоугольник (ы) на заданных ценовых расстояниях, основываясь на точках, вызываемых процедурой drive_distance. возвращается. Затем вы можете выбрать все улицы в пределах полигонов, которые дадут вам общее представление о путешествии.

Если вы не следили за обсуждением в списке пользователей pgRouting , в последнее время они обсуждают другие варианты (темы за май и июнь 2011 года).


1
Интересные обсуждения в списке пользователей. Жаль, что функция Driving_distance глючит.
Подземье

1

Поскольку это действительно проблема с графиком, вам нужна информация о подключении / топологии + стоимости. Для pg_routing это таблица, которую вы отправляете алгоритму кратчайшего пути. Эта статья содержит информацию о том, как ее создать (я полагаю, у вас уже есть такая). Извините, я не могу дать вам точную функцию в pg_routing, которая делает это, но написание ее должно быть выполнимым. Тем не менее, я могу вам сказать, что если вы продолжаете вызывать shorttest_path снова и снова, вы выполняете алгоритм, приведенный ниже, снова и снова и уничтожаете результат - вообще неэффективно.

Тогда ваше решение становится обходным путем, добавляя их в «список обхода» и вычисляя стоимость, пока ваш бюджет (т. Е. Расстояние) не будет превышен. Если бюджет является приемлемым (т. Е. Бюджет не был превышен), вы также добавляете геометрию в «пакет приемлемой геометрии списка». Вы должны обрабатывать каждое ребро только один раз. Для самого последнего края (где ваши бюджеты перерасходованы) вам необходимо получить длину и интерполировать точное расстояние, которое вы хотите пройти , а затем добавить результат в «приемлемый список». Ваш результат - объединение этой геометрической сумки.


1
В последнем шаге есть тонкость: некоторые ребра могут быть достигнуты с любой из его конечных точек. Это может привести к тому, что части обоих концов будут включены или даже весь край, даже если прохождение всего края от одной из конечных точек превысит бюджетный лимит. Например, рассмотрим путешествие из точки а вдоль неориентированного графа с ребрами единичной длины {(a, b), (a, c), (b, c)} и бюджетом в 1,6. Вы можете достичь или b или c по цене 1, с 0,6 осталось потратить. Это делает каждую точку вдоль ребра (b, c) доступной.
whuber

Вы правы :) +1
Раги Язер Бурхум

1

«Начиная с пункта X, как далеко я могу идти в любом заданном направлении, учитывая общий бюджет поездки в 1 км, следуя сети дорог?»

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

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