web-dev-qa-db-fra.com

Géocodage Javascript d'une adresse à une latitude et une longitude qui ne fonctionnent pas

J'utilise la fonction de géocodage suivante pour convertir une adresse textuelle en nombres de latitude et de longitude, mais cela ne fonctionne pas correctement. L'alerte écrit "non défini".

Quelqu'un peut-il dire ce qui ne va pas?

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">

var geocoder = new google.maps.Geocoder();
var address = "new york";

geocoder.geocode( { 'address': address}, function(results, status) {

if (status == google.maps.GeocoderStatus.OK) {
    var latitude = results[0].geometry.location.latitude;
    var longitude = results[0].geometry.location.longitude;
    alert(latitude);
    } 
}); 
</script>
55
Ash

Essayez d'utiliser ceci à la place:

var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();

Il est un peu difficile de naviguer dans l'API de Google mais voici la documentation correspondante.

Une chose que j’avais du mal à trouver était de savoir comment aller dans l’autre direction. Des coordonnées à une adresse. Voici le code que j'ai utilisé avec upp. S'il vous plaît pas que j'utilise aussi jquery.

$.each(results[0].address_components, function(){
    $("#CreateDialog").find('input[name="'+ this.types+'"]').attr('value', this.long_name);
});

Ce que je fais est de parcourir en boucle tous les address_components et teste si leurs types correspondent aux noms d'éléments d'entrée que j'ai dans un formulaire. Et s’ils le font, je mets la valeur de l’élément sur le address_components valeur.
Si vous n'êtes intéressé que par l'adresse formatée entière, vous pouvez suivre exemple de Google

85
Skadlig

Vous n'accédez pas correctement à la latitude et à la longitude.

Essayer

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">

var geocoder = new google.maps.Geocoder();
var address = "new york";

geocoder.geocode( { 'address': address}, function(results, status) {

  if (status == google.maps.GeocoderStatus.OK) {
    var latitude = results[0].geometry.location.lat();
    var longitude = results[0].geometry.location.lng();
    alert(latitude);
  } 
}); 
</script>
46
Dancrumb

La balise de script de l'API a récemment été modifiée. Utilisez quelque chose comme ceci pour interroger l'API de géocodage et récupérer l'objet JSON.

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/geocode/json?address=THE_ADDRESS_YOU_WANT_TO_GEOCODE&key=YOUR_API_KEY"></script>

L'adresse pourrait être quelque chose comme

1600 + Amphitheatre + Parkway, + Montagne + Vue, + CA (URI Encodé; vous devriez le rechercher sur Google. Très utile)

ou simplement

1600 Amphitheatre Parkway, Mountain View, Californie

En entrant cette adresse https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY dans le navigateur, avec ma clé API , je récupère un objet JSON qui contient le Latitude & Longitude pour la ville de Moutain view, CA.

{"results" : [
  {
     "address_components" : [
        {
           "long_name" : "1600",
           "short_name" : "1600",
           "types" : [ "street_number" ]
        },
        {
           "long_name" : "Amphitheatre Parkway",
           "short_name" : "Amphitheatre Pkwy",
           "types" : [ "route" ]
        },
        {
           "long_name" : "Mountain View",
           "short_name" : "Mountain View",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "Santa Clara County",
           "short_name" : "Santa Clara County",
           "types" : [ "administrative_area_level_2", "political" ]
        },
        {
           "long_name" : "California",
           "short_name" : "CA",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "United States",
           "short_name" : "US",
           "types" : [ "country", "political" ]
        },
        {
           "long_name" : "94043",
           "short_name" : "94043",
           "types" : [ "postal_code" ]
        }
     ],
     "formatted_address" : "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
     "geometry" : {
        "location" : {
           "lat" : 37.4222556,
           "lng" : -122.0838589
        },
        "location_type" : "ROOFTOP",
        "viewport" : {
           "northeast" : {
              "lat" : 37.4236045802915,
              "lng" : -122.0825099197085
           },
           "southwest" : {
              "lat" : 37.4209066197085,
              "lng" : -122.0852078802915
           }
        }
     },
     "place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
     "types" : [ "street_address" ]
  }],"status" : "OK"}

Les frameworks Web tels que AngularJS nous permettent d’effectuer facilement ces requêtes.

3
AllJs