Postgres pgrouting2 Dijkstra кратчайший путь возвращает несуществующие ребра

Я борюсь с очень странной проблемой в течение нескольких дней, когда я не могу найти решение. Я использую postgresql 9.3 с расширениями postgis 2 и pgrouting 2. Я импортировал данные OSM для города и успешно создал сеть топологии с помощью функции pgr_createTopology(). Я могу успешно найти кратчайший путь с помощью алгоритма Дейкстры, выполнив, например, (игнорировать упрощенную функцию стоимости)

 SELECT * from pgr_dijkstra(
   'SELECT id, source, target, st_length(way) as cost FROM planet_osm_roads',
    5744, 5900, false, false
    )

и получить следующий результат (seq,id1,id2, стоимость)

0;5744;178191032;428.359590042932
1;5749;177327184;61.7533237967002
2;5821;177327456;544.454553269731
3;5833;177338744;51.1559809959342
4;5871;177338880;71.0702814120015
5;5900;-1;0

Проблема в том, что возвращаемые значения id2, которые соответствуют id ребер, отсутствуют в таблице planet_osm_roads. На самом деле эти значения невозможно найти ни в одном столбце таблиц planet_osm_roads или planet_osm_roads_vertices_pgr. Я что-то пропустил? Возможно, кто-то сталкивался с такой же проблемой раньше.

Спасибо всем заранее

1 ответ

Решение

Какие значения у вас есть для пограничных идентификаторов? pgRouting поддерживает только 32-битные целочисленные значения, если ваши идентификаторы больше, они будут молча усечены. Это известная проблема.

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