为OSRM路由获取JSON

Getting JSON for OSRM routing

本文关键字:JSON 获取 路由 OSRM      更新时间:2023-09-26

我已经使用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中有文档。

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

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

路由的几何形状以编码的形式传递。

长话短说,有人已经让事情变得容易了。看看这个:https://github.com/perliedman/leaflet-routing-machine

试试这个:(实际上jQuery内部解析json)

检查这个小提琴

$(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));
    });
});
});

这是一个jquery的东西:新版本默认添加一个回调参数,所以你的url最终类似http://router.project-osrm.org/viaroute?loc=51.500,0.100&loc=51.500,0.1001&callback=jQuery1504317377423867583_1366895174226&_=1366895275399。OSRM不喜欢这样。

请参阅"为什么使用jQuery AJAX请求将回调参数添加到查询字符串"的答案,了解如何防止这种情况。