【问题标题】:Calculate driving time with OSM and Itinero使用 OSM 和 Itinero 计算驾驶时间
【发布时间】:2019-03-12 23:56:04
【问题描述】:

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

目前我正在做以下事情:

  1. 从 geofabrik.de 下载“pbf”数据库
  2. 将“pbf”转换为 routerdb 文件
  3. 在代码中使用 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


【解决方案1】:

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

猜你喜欢
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 2011-06-17
  • 2020-10-23
  • 2013-05-22
  • 1970-01-01
  • 2012-12-26
  • 2013-06-21
相关资源
最近更新 更多