【问题标题】:using OSRM Routing in Openlayers 3 to draw polyines on the map along the direction of the map在Openlayers 3中使用OSRM Routing沿地图方向在地图上绘制折线
【发布时间】:2016-04-04 02:35:23
【问题描述】:

我想使用 OSRM 和 Openlayers 3 在我的地图上实现路由,但似乎没有任何示例或教程。所有示例都令人困惑

参考来源 1:http://workshop.pgrouting.org/chapters/ol3_client.html(在此示例中,我不知道从哪里获取数据以绘制折线,我将获取数据作为 json 格式,其中包含经纬度对象数组)

2:http://wiki.openstreetmap.org/wiki/Routing/online_routers不知道从哪里开始完成它

3:Openlayers 3 中的 OSRM 路由

我可以画一条直线,但我想沿着地图的方向画不同颜色的线,我知道为此我必须使用方向服务,任何人都可以指点一些示例代码或帖子任何帮助将不胜感激,请说出实现它的方法

【问题讨论】:

    标签: routing openlayers-3 polyline osrm


    【解决方案1】:

    开始使用在线服务,如果您觉得舒服,请自行开发(如果需要)

    假设您将使用您的路由服务。信息和详细信息here

    1. 创建一个 GET 请求 http://www.yournavigation.org/api/1.0/gosmore.php?format=geojson&flat=52.215676&flon=5.963946&tlat=52.2573&tlon=6.1799&v=motorcar&fast=1&layer=mapnik

    只需将上述网址放入浏览器即可。它会给你一个回复,其中包含你正在寻找的线的坐标。要在您自己的应用程序中使用它,您可能必须创建一个代理 servlet 以避免跨域脚本问题。

    1. 解析返回的响应。请注意,响应不是正确的 geojson(至少 ol3 可能理解它),因此您获取坐标,创建几何并将它们重新投影到您的投影中

    2. 最后在地图上显示您的路线并缩放到您的路线范围

    这里有一个fiddle 来查看它的运行情况。请注意,我将上述请求的响应用作代码中的 json 对象。

    更新

    对 OSRM 的相同请求将是

    https://api-osrm-routed-production.tilestream.net/viaroute?instructions=true&alt=true&loc=52.215676,5.963946&loc=52.2573,6.1799

    这应该返回一个编码的折线。因此,您可以使用 ol.format.Polyline 类解码您的路线。检查这个fiddle

    【讨论】:

    • 非常感谢您在尝试从本地小提琴重新创建代码时提供的详细步骤,我得到错误有 TypeError: map.getView(...).fit is not a function I have included只有脚本中的 ol.js 请说出我哪里出错了 map.getView().fit(extentToZoom,map.getSize())
    • 您可能使用的是旧版本的 ol3。尝试升级到最新版本。
    • 你是个错误
    • 你能说在哪里寻找 url 以发送获取地图任务和 OSRM 的请求
    • 我使用 OSRM 添加了另一种替代方法(更新我的答案)。但是您必须调查并找出哪些服务是免费的并且适合您的需求。我无法为您提供更多帮助,因为我对此没有进一步的经验。如果您想出一些有趣的事情,请告诉我们。祝你好运
    【解决方案2】:

    fiddle 开头:

    map.on('click', function(evt){
      utils.getNearest(evt.coordinate).then(function(coord_street){
        var last_point = points[points.length - 1];
        var points_length = points.push(coord_street);
    
        utils.createFeature(coord_street);
    
        if (points_length < 2) {
          msg_el.innerHTML = 'Click to add another point';
          return;
        }
    
        //get the route
        var point1 = last_point.join();
        var point2 = coord_street.join();
    
        fetch(url_osrm_route + point1 + ';' + point2).then(function(r) { 
          return r.json();
        }).then(function(json) {
          if(json.code !== 'Ok') {
            msg_el.innerHTML = 'No route found.';
            return;
          }
          msg_el.innerHTML = 'Route added';
          //points.length = 0;
          utils.createRoute(json.routes[0].geometry);
        });
      });
    });
    

    【讨论】:

    • 嗨 Jonatas,OSRM 有问题吗?一周前我试过你的小提琴,它工作正常,但现在不行了
    • @HichamZouarhi 现在检查了,没问题,只是换了 OSM 磁贴。
    • 非常感谢 :D 我也将磁贴更改为 OSM,但之前没有用
    • @HichamZouarhi - 小提琴不能在我身边工作......有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多