У меня есть шейп-файл полилинии, представляющий дорожную сеть, и второй шейп-файл, содержащий точки. Я хотел бы использовать 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/
Второе - не совсем тот ответ, который я ищу, потому что я хочу, чтобы полилинии обрезались до моего расстояния - мне все равно, доберусь ли я до самого узла.
Ответы:
Одна мысль, которая у меня была, заключалась в том, чтобы: 1) запустить процедуру Driving_distance и 2) использовать процедуру «points_as_polygon» из pgRouting (которая вызывает функцию alphashape), чтобы сгенерировать наименьший многоугольник (ы) на заданных ценовых расстояниях, основываясь на точках, вызываемых процедурой drive_distance. возвращается. Затем вы можете выбрать все улицы в пределах полигонов, которые дадут вам общее представление о путешествии.
Если вы не следили за обсуждением в списке пользователей pgRouting , в последнее время они обсуждают другие варианты (темы за май и июнь 2011 года).
источник
Поскольку это действительно проблема с графиком, вам нужна информация о подключении / топологии + стоимости. Для pg_routing это таблица, которую вы отправляете алгоритму кратчайшего пути. Эта статья содержит информацию о том, как ее создать (я полагаю, у вас уже есть такая). Извините, я не могу дать вам точную функцию в pg_routing, которая делает это, но написание ее должно быть выполнимым. Тем не менее, я могу вам сказать, что если вы продолжаете вызывать shorttest_path снова и снова, вы выполняете алгоритм, приведенный ниже, снова и снова и уничтожаете результат - вообще неэффективно.
Тогда ваше решение становится обходным путем, добавляя их в «список обхода» и вычисляя стоимость, пока ваш бюджет (т. Е. Расстояние) не будет превышен. Если бюджет является приемлемым (т. Е. Бюджет не был превышен), вы также добавляете геометрию в «пакет приемлемой геометрии списка». Вы должны обрабатывать каждое ребро только один раз. Для самого последнего края (где ваши бюджеты перерасходованы) вам необходимо получить длину и интерполировать точное расстояние, которое вы хотите пройти , а затем добавить результат в «приемлемый список». Ваш результат - объединение этой геометрической сумки.
источник
Поскольку вам нужно рассмотреть только небольшой регион (максимум 1 км), вы, вероятно, можете избежать разбиения ссылок на несколько маленьких кусочков (в зависимости от точности, которую вы хотите достичь) и создания необходимых узлов. Получающиеся сети с высоким разрешением должны быть управляемыми.
источник