我最近一直在玩OSRM路由库。它似乎在解决最短路径问题方面非常有效。但是,我没有看到如何用它计算单源最短路径。更确切地说,给定一个固定的起始点,计算到达给定距离限制内可达到的所有位置的最短距离(例如,可在30分钟内到达)。
OSRM在内部使用收缩层次结构。根据我的理解,当计算真实世界数据中两个位置之间的距离时,这种技术优于Dijkstra算法。但是,对于我的问题,Dijkstra的算法似乎更合适,不是吗?
OSRM是否提供API来计算单源最短路径问题(距离限制)?是否有其他免费路由库更适合此类问题?最好是对OpenStreetMap数据有良好支持的。
答案 0 :(得分:9)
OSRM正在使用收缩层次结构(CH)来快速实现“一对一路由”。要使CH工作,您需要一个适应的双向算法(A *,Dijkstra,...),因此单一来源案例更加困难。但是,如果您事先知道自己想要的目的地,那么一对多算法就相对简单了。
如果您想要使用查找表的“非目标导向的双向搜索”解决方案,请查看论文“Fast Detour Computation for Ride Sharing”或here。
其他免费路由库?
我建议我的Java GraphHopper项目;)