Получение JSON для маршрутизации OSRM

Я успешно внедрил систему маршрутизации на свой веб-сайт с помощью облачного API. Я также хочу сделать то же самое с системой маршрутизации OSRM (https://github.com/DennisOSRM/Project-OSRM), но у меня возникли проблемы с получением вывода OSRM json.

Вот примеры получения json из облачного API:

Использование $.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);
    });
});
});

Серверный API для OSRM находится здесь: 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.

Любая помощь очень ценится.

Ник


person NickF    schedule 20.04.2013    source источник


Ответы (3)


Проходит время, и я думаю, что просто отвечу на этот вопрос, на случай, если у кого-то возникнет такая же проблема.

Ответ OSRM в формате JSON отличается от ответа Cloudmade. Вики OSRM в вашем вопросе на самом деле ответят на это. JSON из OSRM закодирован, и к этому нужно особое отношение. Цитируя вики,

Геометрия маршрута передается в закодированном виде.

Короче говоря, кто-то уже упростил нам задачу. Взгляните на это: https://github.com/perliedman/leaflet-routing-machine

person danylaksono    schedule 19.02.2014

попробуйте это: (на самом деле 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));

    });
});
});
person Vicky Gonsalves    schedule 20.04.2013
comment
Извините, я не думаю, что это действительно отвечает на мой вопрос - с облачным сервисом проблем нет, я борюсь с OSRM. - person NickF; 20.04.2013

Это вещь jquery: новые версии добавляют параметр обратного вызова по умолчанию, поэтому ваш URL-адрес заканчивается чем-то вроде http://router.project-osrm.org/viaroute?loc=51.500,0.100&loc=51.500,0.1001&callback=jQuery1504317377423867583_1366895174226&_=1366895275399 . ОСРМ это не нравится.

См. ответы на вопрос «, почему параметр обратного вызова добавлено в строку запроса с использованием запроса jQuery AJAX" для получения рекомендаций о том, как предотвратить это.

person Jussi Kukkonen    schedule 25.04.2013