Javascript Google Elevation调用可用于浏览器,但不能用于node.js TL;博士

Javascript Google Elevation调用可用于浏览器,但不能用于node.js TL;博士,javascript,node.js,google-maps-api-3,google-polyline,google-elevation-api,Javascript,Node.js,Google Maps Api 3,Google Polyline,Google Elevation Api,我正在使用node.js构建一个应用程序,从纬度/经度点数组开始检索高程 为了从纬度/经度坐标获取高程,我使用谷歌地图API,特别是谷歌高程API(查找文档) 为什么这个url // FOR OBVIOUS REASONS, THE API_KEY WAS REPLACED WITH XXXX_XXXX https://maps.googleapis.com/maps/api/elevation/json?locations=enc:wyitGexebA?PB\&key=XXXX_XX

我正在使用node.js构建一个应用程序,从纬度/经度点数组开始检索高程

为了从纬度/经度坐标获取高程,我使用谷歌地图API,特别是谷歌高程API(查找文档)

为什么这个url

// FOR OBVIOUS REASONS, THE API_KEY WAS REPLACED WITH XXXX_XXXX

https://maps.googleapis.com/maps/api/elevation/json?locations=enc:wyitGexebA?PB\&key=XXXX_XXXX
通过浏览器工作并返回数据,而node.js中不会发生同样的情况,从而导致以下响应错误

{ results: [], status: 'INVALID_REQUEST' }

为了最勇敢的人 以下是我使用的坐标,它们给我带来了麻烦:

lat="45.4391630", lon="11.0120330"
lat="45.4391600", lon="11.0119420"
lat="45.4391410", lon="11.0117930"
我正在使用模块来转换坐标,效果非常好。坐标将转换为以下字符串:

wyitGexebA?PB\
您可以直接从Google的Polilyne实用程序中再次检查结果的有效性,但我保证字符串是正确的

到目前为止没有问题,我很高兴地构建了请求url,结果如下

// FOR OBVIOUS REASONS, THE API_KEY WAS REPLACED WITH XXXX_XXXX

https://maps.googleapis.com/maps/api/elevation/json?locations=enc:wyitGexebA?PB\&key=XXXX_XXXX
url在浏览器中就像一个符咒,输出如下

{
   "results" : [
      {
         "elevation" : 57.68282699584961,
         "location" : {
            "lat" : 45.43916,
            "lng" : 11.01203
         },
         "resolution" : 19.08790397644043
      },
      {
         "elevation" : 57.85408401489258,
         "location" : {
            "lat" : 45.43916,
            "lng" : 11.01194
         },
         "resolution" : 19.08790397644043
      },
      {
         "elevation" : 58.09893417358398,
         "location" : {
            "lat" : 45.43914,
            "lng" : 11.01179
         },
         "resolution" : 19.08790397644043
      }
   ],
   "status" : "OK"
}
不幸的是,相同的url在节点内不起作用。我在这里使用模块来完成以下脏活:

var polyline = require('polyline');
var request = require('request');

var poly = polyline.encode([
    ['45.4391630', '11.0120330'],
    ['45.4391600', '11.0119420'],
    ['45.4391410', '11.0117930']
]);
var url = 'https://maps.googleapis.com/maps/api/elevation/json?locations=enc:' + poly + '&key=XXXX_XXXX';
request(url, function(err, res, body){
    if(err || res.statusCode != 200){
        console.log({err: err, status: 'Erorr'});
    }else{
        console.log(url);
        console.log(JSON.parse(body));
    }
});
使用节点运行此操作时,将在控制台中打印以下内容:

https://maps.googleapis.com/maps/api/elevation/json?locations=enc:wyitGexebA?PB\&key=XXXX_XXXX
{ results: [], status: 'INVALID_REQUEST' }
该问题与代码逻辑无关,因为相同的逻辑用于检索15k到30k高程,没有问题,如果您不相信我(您应该这样做),您可以测试以下坐标

var poly = polyline.encode([
    ['45.4393160', '11.0129670'],
    ['45.4393160', '11.0129200'],
    ['45.4392910', '11.0128690']
]);

有什么提示或帮助吗?为什么会有这种不同的行为?提前感谢

根据您的字符串形成方式,反斜杠可能会绊倒您。URL的后一部分:

enc:wyitGexebA?PB\&key=XXXX_XXXX
当插入字符串时,反斜杠将被视为转义字符并消失。用via将其替换为
%5C
(或者通过
encodeURI
运行整个URI)