使用JavaScript API而不是REST计算矩阵

问题描述 投票:1回答:1

我正在尝试使用calculatematrix API来接收目的地的负载并计算从给定位置到目的地的行驶距离(我的示例首先将邮政编码转换为latlng)

使用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问题。 “已被CORS策略阻止:对预检请求的响应未通过访问控制检查:它没有HTTP正常状态。”似乎预检过程中出现权限错误-在此查看此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做错了什么或我如何解决?

[否则,我尝试通过针对Javascript API编写代码尝试了另一种策略,并且使geoencode正常运行,但是我在JavaScript文档中看不到对calculatematric API的引用,有什么想法吗?

谢谢

mootools here-api
1个回答
0
投票
由于该请求应该是JSONP类型的请求,我猜想使用MooTools的Request.JSONP应该有助于解决CORS问题。这里的Javascript API不支持API的计算矩阵端点。
© www.soinside.com 2019 - 2024. All rights reserved.