【问题标题】:Getting JSON for OSRM routing为 OSRM 路由获取 JSON
【发布时间】:2015-12-03 16:45:36
【问题描述】:

我使用 cloudmade API 在我的网站中成功实现了一个路由系统。我也想对 OSRM 路由系统 (https://github.com/DennisOSRM/Project-OSRM) 做同样的事情,但我在获取 OSRM json 输出时遇到了一些问题。

以下是从 cloudmade API 检索 json 的示例:

使用 $.ajax - http://jsfiddle.net/mayooresan/FhfVW/2/

$(function () {
$("#getJSON").click(function () {
    var url = "http://routes.cloudmade.com/c6f2762bfe00414f822a9dec443569f5/api/0.3/51.500,0.100,51.500,0.1001/car.js";
    $.ajax({
        async: false,
        dataType: "jsonp",
        url: url,
        success: function (data) {
            test = data.route_geometry;
            alert(test);
        }
    });
});
});

使用 $.getJSON - http://jsfiddle.net/V3qgZ/72/

$(function () {

$("#getJSON").click(function () {

    $.getJSON("http://routes.cloudmade.com/c6f2762bfe00414f822a9dec443569f5/api/0.3/51.500,0.100,51.500,0.1001/car.js?callback=?", function (data) {
        var test = data.route_geometry;
        alert(test);
    });
});
});

OSRM 的服务器 API 位于此处:https://github.com/DennisOSRM/Project-OSRM/wiki/Server-api(查询的服务器位置位于 http://router.project-osrm.org)。

将 url 与上面使用的相同坐标 (http://router.project-osrm.org/viaroute?loc=51.500,0.100&loc=51.500,0.1001) 放入浏览器会检索一个 json 文件。但无论我尝试将它与 $.getJSON 或 $.ajax 一起使用 - 使用回调,设置数据类型,我都无法获取 json 数据,这让我发疯了!我确信这是可能的,因为它记录在 API 中。

非常感谢任何帮助。

尼克

【问题讨论】:

    标签: javascript jquery ajax openstreetmap osrm


    【解决方案1】:

    时间过去了,我想我会回答这个问题,以防万一有人遇到同样的问题。

    OSRM 的 JSON 响应与 Cloudmade 返回的不同。您问题中的 OSRM wiki 实际上回答了这个问题。来自 OSRM 的 JSON 已编码,您需要对此进行特殊处理。引用维基,

    路线的几何形状以编码形式传输。

    长话短说,有人已经为我们简化了事情。看看这个:https://github.com/perliedman/leaflet-routing-machine

    【讨论】:

      【解决方案2】:

      试试这个: (其实jQuery内部是解析json的)

      Check this fiddle

      $(function () {
      
      $("#getJSON").click(function () {
      
      $.getJSON("http://routes.cloudmade.com/c6f2762bfe00414f822a9dec443569f5/api/0.3/51.500,0.100,51.500,0.1001/car.js?callback=?", function (data) {
          var test = data.route_geometry;
                  alert(JSON.stringify(test));
      
          });
      });
      });
      

      【讨论】:

      • 抱歉,我认为这并不能真正回答我的问题 - cloudmade 服务没有问题,我正在努力解决 OSRM 问题。
      【解决方案3】:

      这是 jquery 的事情:新版本默认添加一个回调参数,因此您的 url 最终会像 http://router.project-osrm.org/viaroute?loc=51.500,0.100&loc=51.500,0.1001&callback=jQuery1504317377423867583_1366895174226&_=1366895275399 一样。 OSRM 不喜欢这样。

      请参阅“why callback parameter is added to query string using jQuery AJAX request”的答案以获取有关如何防止这种情况的建议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多