2014-01-15 3 views
3

Мы думаем использовать его в нашем проекте, где нам нужно выполнить планирование маршрута. Первая проблема, с которой мы столкнулись, состоит в том, что мы имеем очень переменные dyanimc, представляющие наши значения веса; это означает, что мы не можем использовать алгоритм сокращения иерархии, потому что каждый раз, когда изменяется одна из этих переменных, мы должны воссоздать «сжатый» график, поэтому мы решили сконфигурировать графический процессор, чтобы не использовать алгоритм CHПоддерживает ли GraphHopper динамические веса ребер?

В этом сценарии можно изменить код графического купе, чтобы поддерживать эти значения веса динамических краев? Например, предположим, что мы имеем узел A и узел B и ребро A - B; предположим, что это ребро имеет значение 3 В нашем сценарии может быть событие, которое может изменить значение края A-B от 3 до 6 или от 3 до 2 Можем ли мы изменить код для поддержки этого особенность? Это зависит от реализации DataAccess?

Спасибо Angelo

ответ

5

Чтобы изменить скорость или расстояние ребра вам нужно получить EdgeIteratorState (например, из координат), а затем установите флажки или расстояние. Вот фрагмент кода:

// find edge for lat,lon point 
QueryResult qr = locationIndex.findClosest(lat, lon, EdgeFilter.ALL_EDGES); 
if(!qr.isValid()) 
     throw RuntimeException("Cannot find nearby location " + lat+","+lon); 
EdgeIteratorState edge = qr.getClosestEdge(); 
// use existing flags to reuse access information 
long existingFlags = edge.getFlags(); 
// set speed 
edge.setFlags(carFlagEncoder.setSpeed(existingFlags, newSpeed)); 
// set distance 
edge.setDistance(newDistance); 
+0

С последней версией GraphHopper (0.5) вы должны использовать что QueryResult ор = locationIndex.findClosest (широта, долгота, EdgeFilter.ALL_EDGES); EdgeIteratorState edge = qr.getClosestEdge(); – PStember

+0

Спасибо! обновил фрагмент – Karussell

+0

Я пытаюсь динамически изменять вес ребер. Я использовал вышеупомянутый edge.setDistance (oldDistance * 100); метод. Я не изменял флаги, поскольку carFlagEncoder дает мне ошибку. Проблема в том, что даже после перезапуска/удаления приложения расстояние до края установлено постоянно. Что мне нужно изменить? Спасибо. – user2070333