2016-12-03 4 views
0

Я создал сеть маршрутизации на основе OSM с OSM2PO в PostgreSQL с расширением pgrouting. У меня есть столбец km (расстояние в км), столбец cost (время вождения) и max_speed. Я пытаюсь создать водосбор с функцией pgr_drivingDistance используя колонку km (расстояние в км). Это вычисляет водосбор с кратчайшим путем, который в большинстве случаев не является реалистичным расстоянием для автомобилей. Поэтому я хочу рассчитать водосбор на основе кратчайшего времени вождения, используя cost. Но в результате мне нужны единицы метров и не время. Большое спасибо за любой намек.Получить расстояние от самого быстрого пути с помощью pgr_drivingDistance

Короткая версия: Мне нужен водосбор с расстоянием в км за самый быстрый маршрут (мин. Время)!

Вот стандартный код для pgr_drivingDistance с кратчайшим расстоянием в км:

SELECT * 
    FROM routing_vertices_pgr 
    JOIN(
SELECT * FROM pgr_drivingDistance(' 
SELECT id, 
    source, 
    target, 
    km as cost 
    FROM routing', 
1, 100, false)) AS route ON routing_vertices_pgr.id = route.node ; 
+0

Это довольно специализированный вопрос. Возможно, вам лучше на http://dba.stackexchange.com –

+0

Речь идет о пространственных функциях так лучше gis.stackexchange.com – Jendrusk

ответ

0

Вы не можете так поступать ... В пути вы решаете, какова ваша стоимость (время или расстояние или еще что-то еще), а функция обрабатывает эту стоимость. Стоимость - только одна ... Я думаю, что одна из резолюций может состоять в том, чтобы рассчитывать на расстояние, но исключать из ребер эту «нереалистичную для автомобилей», используя поле clazz или flags. Описания этих полей вы найдете в конфигурационном файле osm2po.

0

Если у вас есть тип объекта (шоссе, первичный й), создавая столбец с max_speed и разделив эту max_speed на расстояние будет дать вам время, необходимое для путешествия по сегменту дороги. Это время можно выбрать как стоимость, чтобы дать кратчайшее расстояние.

+0

Спасибо за ваш ответ. Инструмент OSM2PO создал уже столбец «cost» с временем вождения. Но расчет водосбора, основанный на «стоимости», не даст мне расстояния в км для самого быстрого маршрута. – Martin

+0

изменить стоимость столбца (расстояние/скорость), чтобы получить самый быстрый маршрут 1. разделите столбец затрат на новый столбец max_speed, в который вы вставляете максимальную скорость для каждого типа объектов. 2. возьмите этот новый столбец как стоимость и вычислите pgr_drivingDistance (время как стоимость). – Columbo25

+0

Спасибо за ваш ответ. Возможно, я не понимаю, но, на мой взгляд, это невозможно для моей цели, потому что я не рассчитываю самый быстрый маршрут в начале, я могу использовать только функцию _pgr_drivingDistance_. Мне нужны самые быстрые маршруты для всех узлов на расстоянии 100 км от точки А с информацией о расстоянии в км. – Martin