3

TL;DR

緯度/経度ポイントの配列から始めて、標高を取得する node.js を使用してアプリケーションを構築しています。

緯度/経度座標から標高を取得するために、GoogleMaps API、特にGoogle Elevation 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"

Polylineモジュールを使用してPolyline Algorithmで座標を変換していますが、うまく機能します。座標は次の文字列に変換されます。

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']
]);

ヒントやヘルプはありますか?この異なる動作はなぜですか?前もって感謝します

4

1 に答える 1

3

文字列をどのように形成しているかによっては、そのバックスラッシュがつまずく可能性があります。URL の後半のセクション:

enc:wyitGexebA?PB\&key=XXXX_XXXX

文字列に突っ込むと、そのバックスラッシュはエスケープ文字と見なされて消えます。%5Cそれをviaに置き換えますencodeURIComponent(または単に URI 全体を実行しますencodeURI) 。

于 2016-07-31T18:26:28.033 に答える