web-dev-qa-db-fra.com

récupération de la latitude et de la longitude à l'aide de google.maps.geocoder

j'ai essayé d'utiliser un ajax pour enregistrer l'emplacement de la salle dans mon application et suis tombé par hasard sur le code suivant sur le débordement de pile.

function getLatLong(address) 
{
    var geocoder = new google.maps.Geocoder();
    var result = "";
    geocoder.geocode( { 'address': address, 'region': 'uk' }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            result[lat] = results[0].geometry.location.Pa;
            result[lng] = results[0].geometry.location.Qa;
        } else {
            result = "Unable to find address: " + status;
        }
    });
    return result;
}

mon problème est que lorsque j'appelle la fonction, il ne renvoie rien et lorsque je débogue et définit des points d'arrêt en chrome, il casse le résultat avant de commencer avant le résultat [lat] = results [0] .geometry.location.Pa; 

Je sais que le tableau doit être déclaré comme type tableau, mais même lorsque je retournais simplement les résultats [0] .geometry.location

que puis-je faire pour retourner le lat/long de l'emplacement afin que je puisse stocker dans ma base de données?

17
Chris Mccabe

Le problème que vous rencontrez est que vous traitez la fonction geocoder.geocode comme étant immédiatement terminée avant que vous ne renvoyiez le résultat. Ce qui se passe réellement est que le geocoder.geocode est déclenché, vous obtenez alors un retour immédiat du résultat. Comme le résultat asynchrone n'a probablement pas été renvoyé, votre résultat est vide. Considérez le résultat de géocodage comme un Push et non comme un pull. La fonction storeResult, non indiquée, correspond au code que vous devez utiliser pour enregistrer les informations. Étant donné que vous combinez un résultat avec une chaîne d'erreur, vous devez gérer cela dans votre fonction storeResult. Au lieu de cela, vous pouvez avoir un statut dans le résultat qui indique une réussite ou un échec.

function getLatLong(address) {
var geocoder = new google.maps.Geocoder();
var result = "";
geocoder.geocode( { 'address': address, 'region': 'uk' }, function(results, status) {
     if (status == google.maps.GeocoderStatus.OK) {
         result[lat] = results[0].geometry.location.Pa;
         result[lng] = results[0].geometry.location.Qa;
     } else {
         result = "Unable to find address: " + status;
     }
     storeResult(result);
    });
}
16
Tony Miller

Ce n'est pas la réponse mais n'utilisez pas Pa et Qa utilisez toujours les fonctions lng () et lat ():

 place.geometry.location
{...}
    Pa: 56.240477
    Qa: -0.902655999999979
    toString: function(){return"("+this.lat()+", "+this.lng()+")"}
    equals: function(a){return!a?k:Cd(this.lat(),a.lat())&&Cd(this.lng(),a.lng())}
    lat: function(){return this[a]}
    lng: function(){return this[a]}
    toUrlValue: function(a){a=Hd(a)?a:6;return $d(this.lat(),a)+","+$d(this.lng(),a)}
20
Lee Smith

J'ai eu beaucoup de difficulté avec cela et j'ai trouvé ce qui suit au travail.

  1. Boucle à travers l'objet et Push dans un nouveau tableau:

    var newArray = [];
    
    for (var key in latLng) {
    
       newArray.Push(key);
    
    }
    
  2. Appelez votre objet avec des valeurs variables avec la syntaxe entre crochets, la notation par points saute:

    var lat = latLng[newArray[0]];
    
    var lng = latLng[newArray[1]];
    
2
vars
function getLatLong(address) 
{
    var geocoder = new google.maps.Geocoder();
    var result = '';
    geocoder.geocode( { 'address': address }, function(results, status{
        if (status == google.maps.GeocoderStatus.OK) {
            result[lat] = results[0].geometry.location.lng();
            result[lng] = results[0].geometry.location.lng();
        } else {
            result = 'Unable to find address: ' + status;
        }
    });
    return result;
}

getLatLong('address'); 
0

Dans mon cas, la solution la plus simple pour obtenir la latitude et la longitude d'un objet de lieu était la suivante:

  var latitude=place.geometry.location['k'];
  var longitude=place.geometry.location['A'];
0
Mr Br