3

OK、私は見つけた例から取っていますが、私の脳は熱で揚げられています.とにかく、Google APIは常に私に何かをします.

function codeLatLng(lat, lng)
{
    var latlng = new google.maps.LatLng(lat, lng);
    geocoder.geocode({'latLng': latlng}, function(results, status)
    {
        if (status == google.maps.GeocoderStatus.OK)
        {
            //console.log(results)
            if(results[1])
            {
                //formatted address
                //alert(results[0].formatted_address)
                //find country name
                $('#geolocation_latlng').html(latlng);
                for(var i=0; i<results[0].address_components.length; i++)
                {
                    for(var b=0;b<results[0].address_components[i].types.length;b++)
                    {

                        //there are different types that might hold a city admin_area_lvl_1 usually does in come cases looking for sublocality type will be more appropriate
                        if(results[0].address_components[i].types[b] == "administrative_area_level_1")
                        {
                            //this is the object you are looking for
                            city=results[0].address_components[i];
                            break;
                        }
                    }
                }
            //city data
            //alert(city.short_name + " " + city.long_name)
            }
            else
            {
                alert("Could not Determin Location");
            }
      }
      else
      {
          alert("Location dection failed: " + status);
      }
    });
}

lat と lon が既に渡されており、結果が得られていると想定しても安全です。formated_address のアラートを 1 つコメントアウトしました。私がやろうとしているのは、フォーマットされた住所から郵便番号、州、都市を取得する方法を見つけることです。そしてそれを画面に表示します。しかし、私が言ったように、私は今揚げ物をしていて、時計を刻んでいるので、私をキックスタートさせるために少し助けが必要です.

4

1 に答える 1

2

私のデモは中かっこのコミカルなコレクションですが、アイデアはresults.typesの内部を調べることです:

 "locality"                     // CITY
 "administrative_area_level_1"  // STATE
 "postal_code"                  // ZIP

そして繰り返しながら、これらの型が一致したら、値を入力します。このアプローチはドキュメントで米国に対応するように説明されているため、国を尋ねましたが、シンガポールで有効かどうかはわかりません。彼らが言うように、それは正確な科学ではありません。

したがって、展開する場合は、最初に国を確認し、wantedTypesGoogle マップのタイプに対応する別のオブジェクトと一致させる必要がある場合があります (別の国では、州は Admin. area level 2 である可能性があります)。

ほとんどの場合、Arizona ではなく AZ が必要なため、短い名前を使用します。セントポール(ショート)とセントポールなど、都市が異なるかどうかを確認することはあまりしませんでした。

    if (status == google.maps.GeocoderStatus.OK) {
        if (results[0]) {
            var typeCorrespondence = {
                "city": "locality",
                "state": "administrative_area_level_1",
                "zipcode": "postal_code"
            };

            var geocoderResults = {};

            var components = results[0].address_components;

            for (var i = 0; i < components.length; i++) {
                for (var j = 0; j < components[i].types.length; j++) {

                    for (myType in typeCorrespondence) {
                        if (typeCorrespondence[myType] == components[i].types[j]) {
                            geocoderResults[myType] = components[i].short_name;
                        }
                    }
                }
            }
            $("#result").val(JSON.stringify(geocoderResults));
        }
    }
于 2012-07-09T01:24:58.090 に答える