javascript 获取JSON用于OSRM路由

whitzsjs  于 2023-05-05  发布在  Java
关注(0)|答案(3)|浏览(163)

我已经成功地在我的网站上使用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)。
将上面使用的相同坐标(http://router.project-osrm.org/viaroute?loc=51.500,0.100&loc=51.500,0.1001)的URL放入浏览器中,检索json文件。但是无论我尝试使用$.getJSON或$. AJAX -使用回调,设置数据类型,我都无法获得JSON数据,这让我抓狂!我确信这是可能的,因为它在API中有文档记录。

bgibtngc

bgibtngc1#

时间流逝,我想我还是回答这个问题吧,以防有人遇到同样的问题。
OSRM的JSON响应与Cloudmade返回的响应不同。OSRM wiki在您的问题上实际上回答了这个问题。来自OSRM的JSON是编码的,您需要对此进行特殊处理。引用wiki的话
路线的几何形状以编码形式传输。
长话短说,有人已经让我们的事情变得容易了。看看这个:https://github.com/perliedman/leaflet-routing-machine

2w2cym1i

2w2cym1i2#

试试这个:(实际上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));

    });
});
});
6jjcrrmo

6jjcrrmo3#

这是一个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”的答案,了解如何防止这种情况。

相关问题