3 votes

JavaScript Google Maps Geolocation Comment puis-je obtenir le code postal, la ville, l'état à partir de ceci ?

OK, je m'inspire d'un exemple que j'ai trouvé, mais mon cerveau est grillé par la chaleur, et les api de Google me font toujours quelque chose, quoi qu'il en soit.

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);
      }
    });
}

J'ai commenté une alerte pour formated_address, ce que j'essaie de faire est de comprendre comment je peux prendre le code postal, l'état, la ville de cette adresse formatée et l'afficher à l'écran. Mais comme je l'ai dit, j'ai la tête dans le guidon, et j'ai une horloge qui tourne, alors j'ai besoin d'un peu d'aide pour me lancer.

2voto

Tina CG Hoehr Points 2596

Ma démo est une collection comique d'accolades, mais l'idée est de regarder à l'intérieur de l'élément résultats.types pour :

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

Et comme pour l'itération, lorsque vous faites correspondre ces types, remplissez les valeurs. J'ai demandé le pays parce que cette approche est expliquée dans la documentation pour correspondre aux Etats-Unis, mais je n'ai aucune idée, disons si c'est valable à Singapour. Comme on dit, ce n'est pas une science exacte.

Ainsi, en cas d'expansion, il se peut que vous deviez d'abord vérifier le pays, puis le faire correspondre à un autre pays. wantedTypes avec des correspondances différentes avec les types de Google Maps (dans un autre pays, l'État pourrait être Admin. area level 2).

J'utilise le nom abrégé parce qu'il est probable que vous vouliez AZ et non Arizona. Je ne suis pas allé jusqu'à vérifier si les villes différaient, par exemple St. Paul (abrégé) vs. Saint Paul.

    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));
        }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X