2014-12-18 5 views
1

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

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, соответствующие идентификатору ребер, не присутствуют в таблице planet_osm_roads. Фактически эти значения не могут быть найдены ни в одном столбце таблиц planet_osm_roads или planet_osm_roads_vertices_pgr. Я что-то упускаю? Возможно, раньше кто-то сталкивался с такой же проблемой.

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

ответ

3

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

+0

Большое спасибо. Это была точная проблема. Тип столбца был bigint в postgres. Ты действительно спас мой день. Спасибо. – geoandri

Смежные вопросы