【发布时间】:2019-03-12 23:56:04
【问题描述】:
我想编写一个程序,它能够使用 OSM 和库 Itinero (http://www.itinero.tech/) 计算从 A 点到 B 点的行驶时间
目前我正在做以下事情:
- 从 geofabrik.de 下载“pbf”数据库
- 将“pbf”转换为 routerdb 文件
-
在代码中使用 routerdb 文件,如下面的 sn-p:
RouterDb routerDb = new RouterDb(); string path = "PathToRouterDB"; using (var stream = new FileInfo(path).OpenRead()) { routerDb = RouterDb.Deserialize(stream); } router = new Router(routerDb); var profile = router.Db.GetSupportedProfile("car"); Coordinate from = new Coordinate(fromLatidutde, fromLongitude); Coordinate to = new Coordinate(toLatitude, toLongitude); List<RouterPoint> points = new List<RouterPoint> { router.TryResolve(profile, from, 200), router.TryResolve(profile, to, 200) } var route = router.TryCalculate(profile, points.ToArray()); float drivingTime = route.Value.TotalTime;
这是正确的方法吗?当我计算大距离(例如 500 公里)时,计算行驶时间需要 5 分钟,这对我的程序来说太多了。
如果有人对我有建议,那就太好了!
最好的问候, 安德烈亚斯
【问题讨论】:
-
如果 Itinero 的路由引擎对于长距离来说太慢,那么请考虑切换到外部 OSM router,例如 OSRM、GraphHopper 或 ValHalla。
标签: c# asp.net-core openstreetmap