0

これに対する簡単な答えを求めてインターネット全体を見てきましたが、どこにも見つからないようです。緯度と経度の単純な逆ジオコードを実行すると、巨大な結果オブジェクトが返されます。そこからどこへ行けばいいですか?これが私がこれまでに持っているものです。現在、郵便番号は「未定義」を返します。

geocoder.geocode( {'latLng' : event.latLng}, function(results, status) {
    for(var i; i < results.length; i++){
        for(var j=0;j < results[i].address_components.length; j++){
            for(var k=0; k < results[i].address_components[j].types.length; k++){
                if(results[i].address_components[j].types[k] == "postal_code"){
                    var zipcode = results[i].address_components[j].short_name;
                }
            }
        }
    }
});
4

4 に答える 4

9
for(var i=0; i < results[0].address_components.length; i++)
{
    var component = results[0].address_components[i];
    if(component.types[0] == "postal_code")
    {
        console.log(component.long_name);
    }
}

これが私が働いたものです。基本的に、すべての情報が含まれているため、最初の住所コンポーネントで郵便番号を検索するだけです。console.log() はあなたの友達です。

何年も後に編集

Move ブラウザーでサポートされている素敵な ES6 のおかげで、これをより簡単に実行できるようになりました。いくつかの簡単な方法を見てみましょう。まず、ループをそのように単純化できます

for(let component of results[0].address_components))
{
    if(component.types[0] == "postal_code")
    {
        console.log(component.long_name);
    }
}

または、find メソッドを使用することもできます

let postalCode = results[0].address_components.find(function (component) {
    return component.types[0] == "postal_code";
});
console.log(postalCode.long_name);
于 2012-06-07T06:21:42.067 に答える
2

( https://stackoverflow.com/users/638040/johann )が別のスタックオーバーフローの質問からの回答として投稿したこのきちんとした関数を見つけました。

要求したタイプに一致するものを見つけて返します。

function extractFromAdress(components, type){
 for (var i=0; i<components.length; i++)
  for (var j=0; j<components[i].types.length; j++)
   if (components[i].types[j]==type) return components[i].long_name;
  return "";
}

使用法:

var postCode = extractFromAdress(results[0].address_components, "postal_code");
var country = extractFromAdress(results[0].address_components, "country");
于 2015-01-23T14:12:29.587 に答える
0

コードは次のことを行います。たとえば、2 つまたは 3 つの回答がある場合。最後の 1 つを zipcode 変数に連続して格納します。たとえそれが未定義であっても。郵便番号が有効かどうかを確認するチェックを組み込む必要があります。郵便番号変数に戻す必要があります。関数の外で変数を定義します。そうしないと、関数内でスタックします。

于 2012-06-07T06:19:12.083 に答える
0

問題は、zipcode 変数が関数のローカル変数であることです。私はこのjsfiddleで実際の例を持っています

    var zipcode = null;
function testFunct (results, status) {
for(var i in results){
    var result = results[i];
        for(var j in result.address_components){
            var address_component = result.address_components[j];
            for(var k in address_component.types){
                var addrtype = address_component.types[k];
                if(addrtype  == "postal_code"){
                    zipcode = results[i].address_components[j].short_name;
                    console.log(zipcode);
                    return;
                }

            }
        }
    }

}
于 2012-06-07T06:17:26.380 に答える