使用 OSM 和 Itinero 计算驾驶时间

问题描述 投票:0回答:2

我想编写一个程序,能够使用 OSM 和 Itinero 库计算从 A 点到 B 点的行驶时间 (http://www.itinero.tech/)

目前我正在做以下事情:

  1. 从 geofabrik.de 下载“pbf”数据库
  2. 将“pbf”转换为routerdb文件
  3. 在代码中使用 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 分钟来计算驾驶时间,这对于我的程序来说太多了。

如果有人给我建议那就太好了!

最诚挚的问候, 安德烈亚斯

c# asp.net-core openstreetmap
2个回答
0
投票

您的代码是正确的。你只需要添加这个: routerDb.AddContracted(配置文件); 在我的电脑上,它会在 3-4 秒内计算出类似的距离。


0
投票

对于较长的距离,根据我的经验,添加将总距离大致等分的航路点可以缩短路线计算的处理时间。

© www.soinside.com 2019 - 2024. All rights reserved.