CalculateMatrix с использованием API JavaScript, а не REST - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь использовать API Calculate Matrix, чтобы получить груз пунктов назначения и рассчитать расстояние до них от заданного местоположения (мои примеры сначала преобразовывают почтовый индекс в значение)

Используя REST API и JQuery, я могу заставить это работать нормально. Посмотреть это JSFiddle - https://jsfiddle.net/vostrx9m/

$.ajax({
  url: 'https://geocoder.api.here.com/6.2/geocode.json',
  type: 'GET',
  dataType: 'jsonp',
  jsonp: 'jsoncallback',
  data: {
    app_id: 'XHHvADl4hLUQWLbUOGNp',
    app_code: '-Zhl4CYrM03JxXabdROElA',
    searchtext: 'TR9 6QA'
  },
  success: function(data) {
    var LatLon = data.Response.View[0].Result[0].Location.NavigationPosition[0].Latitude + "," + data.Response.View[0].Result[0].Location.NavigationPosition[0].Longitude;
    $.ajax({
      url: 'https://matrix.route.api.here.com/routing/7.2/calculatematrix.json',
      type: 'GET',
      dataType: 'jsonp',
      jsonp: 'jsoncallback',
      data: {
        mode: 'fastest;truck;traffic:disabled;',
        start0: LatLon,
        destination0: '50.395118,-4.934356',
        destination1: '50.464852,-5.031908',
        destination2: '50.541548,-4.938789',
        app_id: 'XHHvADl4hLUQWLbUOGNp',
        app_code: '-Zhl4CYrM03JxXabdROElA',
        summaryAttributes: 'distance,traveltime'
      },
      success: function(data) {
        for (i in data.response.matrixEntry) {
          $('p').append("dest(" + i + "), " + data.response.matrixEntry[i].summary.distance + " meters, " + data.response.matrixEntry[i].summary.travelTime + " seconds<br\>");
        }
      }
    });
  }
});

Однако наш сайт использует MooTools, поэтому я переписал это для mootools и теперь у меня возникают проблемы с CORS. msgstr "был заблокирован политикой CORS: Ответ на предполётный запрос не прошел проверку контроля доступа: у него нет статуса HTTP ok." Похоже, что предпечатная проверка получает ошибку разрешения - см. Этот JSFiddle здесь - https://jsfiddle.net/1av2wkye/5/

getDistancesFromPostCode('TR84LP')
function getDistancesFromPostCode(StartPostCode) {
    console.log('getDistancesFromPostCode: ' + StartPostCode)
    var req = new Request({
        method: 'get', 
        url: "https://geocoder.api.here.com/6.2/geocode.json", 
        data: {
            app_id: 'XHHvADl4hLUQWLbUOGNp',
        app_code: '-Zhl4CYrM03JxXabdROElA',
            searchtext: StartPostCode
        }, 
        onComplete: function(data) {
            console.log(data)
            var StartLatLon = data.Response.View[0].Result[0].Location.NavigationPosition[0].Latitude + "," + data.Response.View[0].Result[0].Location.NavigationPosition[0].Longitude;
            console.log(StartLatLon)
            getDistancesFromLatLng(StartLatLon)
        },
    }).send();
}

function getDistancesFromLatLng(StartLatLon) {
    console.log('getDistancesFromLatLng: ' + StartLatLon)
    var req = new Request({
        method: 'get', 
        url: "https://matrix.route.api.here.com/routing/7.2/calculatematrix.json", 
        data: {
            mode: 'fastest;truck;traffic:disabled;',
            start0: StartLatLon,
            destination0: '50.4153650,-5.0698703',destination1: '50.4154830,-5.0698890',destination2: '50.473036820553446, -4.707902895605457',
            app_id: 'XHHvADl4hLUQWLbUOGNp',
        app_code: '-Zhl4CYrM03JxXabdROElA',
            summaryAttributes: 'distance,traveltime'
        }, 
        onComplete: function(data) {
            console.log(data)
            for (i in data.response.matrixEntry) {
                console.log("dest(" + i + "), " + data.response.matrixEntry[i].summary.distance + " meters, " + data.response.matrixEntry[i].summary.travelTime + " seconds<br\>");
            }
        },
    }).send();
}

Есть идеи, что MooTools делает неправильно или как это исправить?

Если нет, я попробовал другую тактику, написав что-то против API Javascript, и у меня получился работающий гео-код, но я не вижу никакой ссылки на Calculatematric API в документации JavaScript, есть идеи?

Спасибо

...