我想编写一个程序,能够使用 OSM 和 Itinero 库计算从 A 点到 B 点的行驶时间 (http://www.itinero.tech/)
目前我正在做以下事情:
在代码中使用 routerdb 文件,如以下代码片段所示:
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 分钟来计算驾驶时间,这对于我的程序来说太多了。
如果有人给我建议那就太好了!
最诚挚的问候, 安德烈亚斯
您的代码是正确的。你只需要添加这个: routerDb.AddContracted(配置文件); 在我的电脑上,它会在 3-4 秒内计算出类似的距离。
对于较长的距离,根据我的经验,添加将总距离大致等分的航路点可以缩短路线计算的处理时间。