0

Googleが提供する JSON 出力形式を認識しています

ただし、少し異なる形式を取得することがあります。これは、resultsのコールバック関数の変数からのものですgecoder.geocode({'address': address}, callback)

"location": {
          "Za": 37.3492097,
          "$a": -122.03260190000003
        },

...

"viewport": {
          "aa": {
            "b": 37.329901,
            "f": 37.37543489999999
          },
          "ba": {
            "b": -122.06526500000001,
            "f": -121.99577999999997
          }
        }

location、bounds、viewport の下のキーに注目してください。これらは標準のものとは異なります。この JSON をAJAX 呼び出しを介してサーバーに送信し、解析する必要があり、パーサーが "$a" を有効なキー名として取得できないため、これは私にとって問題です。

これは正常ですか、それとも何か不足していますか?

編集: 私はクラウド ホスト プラットフォーム (salesforce.com) を使用しています。Javascript API v3 を使用しています。この問題は、ローカルの HTML ファイルから再現できました。 私は今、私が企業のプロキシの背後にいるためかもしれないと考えています. 誰もこれに直面しましたか?

4

2 に答える 2

0

バグ レポートと API ドキュメントのコメントで指摘されているresponseように、コールバック内のオブジェクトは純粋な JSON ではありません。JSON オブジェクトを取得するには、以下のように自分で作成する必要がありました。

//assume status is ok

var bestResult = getBestResultFromJSON(results);

var bounds = {'northeast' : {'lat' : 0, 'lng' : 0}, 'southwest' : {'lat' : 0, 'lng' : 0}};
var location = {'lat' : 0, 'lng' : 0};
var viewport = {'northeast' : {'lat' : 0, 'lng' : 0}, 'southwest' : {'lat' : 0, 'lng' : 0}};
// bounds not always available (https://developers.google.com/maps/documentation/javascript/reference#GeocoderGeometry)
if(bestResult.geometry.hasOwnProperty(bounds)) {
    bounds.southwest.lat = bestResult.geometry.bounds.getSouthWest().lat();
    bounds.southwest.lng = bestResult.geometry.bounds.getSouthWest().lng();
    bounds.northeast.lat = bestResult.geometry.bounds.getNorthEast().lat();
    bounds.northeast.lng = bestResult.geometry.bounds.getNorthEast().lng();
}
else {
    bounds = null;
}                       

viewport.southwest.lat = bestResult.geometry.viewport.getSouthWest().lat();
viewport.southwest.lng = bestResult.geometry.viewport.getSouthWest().lng();
viewport.northeast.lat = bestResult.geometry.viewport.getNorthEast().lat();
viewport.northeast.lng = bestResult.geometry.viewport.getNorthEast().lng();

location.lat = bestResult.geometry.location.lng();
location.lng = bestResult.geometry.location.lng();

var jsonResults = {'results' : [{'address_components' : bestResult.address_components,
              'formatted_address': bestResult.formatted_address,
              'geometry' : {'bounds' : bounds, 'location' : location, 'location_type' : bestResult.location_type, 'viewport' : viewport},
              'types' : bestResult.types}], 'status' : status};
于 2012-04-27T07:52:48.523 に答える
0

文書化された方法のみを使用し、文書化されていない応答を得ている場合、それはバグです。問題リストに問題を提出してください。一貫して間違った応答を生成するものがある場合は、デモンストレーターのアドレスを含める必要があります。一貫して間違った住所がない場合は、できるだけ詳細に記入してください。たとえば、要求が近すぎて繰り返された場合に発生しますか?

また、別のブラウザー クライアントを使用してテストすることも確認してください。API の誤動作の原因となっている現在のブラウザーまたはコンピューターに異常がある可能性があります。

今後の参考のために、この回答に問題番号を付けてコメントすることをお勧めします。

于 2012-04-19T13:51:46.340 に答える