Как получить правильные результаты pgRouting

Я пытаюсь запустить pgRouting на основе данных OSM, и у меня возникают некоторые проблемы с его настройкой.

Я установил PostgreSQL 9.5 на машину с Ubuntu. PostGIS_full_version возвращается с

  • "POSTGIS =" 2.2.2 r14797 "
  • GEOS = "3.4.2-CAPI-1.8.2 r3921"
  • PROJ = "Rel. 4.8.0, 6 марта 2012 г."
  • GDAL = "GDAL 1.11.2, выпущено 2015/02/10"
  • Libxml = "2.9.1"
  • LIBJSON = "0.11.99"
  • ТОПОЛОГИЯ РАСТРА ",

и pgRouting установлен в версии 2.2.3.

Я использую osm2pgrouting в версии 2.1 для импорта файла osm из Geofabrik и построения топологии.

После импорта столбец length в табличных значениях содержит очень малые значения, в то время как предполагается, что он имеет информацию о расстоянии в километрах. Сравнение со столбцом length_m показывает, что либо расстояние в метрах, либо расстояние в километрах неверно. Основываясь на этом обсуждении, я могу решить проблему расстояния.

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

Поэтому я добавил еще один столбец ('to_cost') с пересчитанными расстояниями. Следующий SQL-запрос использует это:

SELECT SUM(distance) as "Distance (km)", SUM(zeit) as "Time (min)" FROM
  (SELECT b.length as distance, b.length/b.maxspeed_forward*60 as zeit
    FROM pgr_dijkstra('SELECT gid::integer as id,
                            source::integer,
                            target::integer,
                            to_cost as cost,
                            reverse_cost
                     FROM ways',
                     728126, 508421, true, false) a,
                     ways b
  WHERE a.id1=b.gid::integer) AS my routing;

Возвращенное расстояние составляет 232,388203319894 км, а время в минутах, необходимое для этой поездки, составит 275,537860166885 минут.

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

Кроме того, когда я использую столбец "стоимость" с данными импорта из osm2pgrouting вместо столбца "to_cost", тогда я получаю 123.397950457207 км, независимо от того, говорю ли я, что reverse_cost имеет значение true или false.

Используя столбец to_cost и поворачивая reverse_cost на true, я получаю расстояние всего 143.048209059395 км и значение времени 169.415916099922 минут назад.

0 ответов

Другие вопросы по тегам