webentwicklung-frage-antwort-db.com.de

lat/Long-Speicherort mit google.maps.geocoder abrufen

ich habe versucht, etwas Ajax zu verwenden, um den Standort in meiner Anwendung zu speichern, und bin über den folgenden Code auf Stapelüberlauf gestolpert

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

mein Problem ist, wenn ich die Funktion anrufe, gibt es nichts zurück und wenn ich in Chrome debugge und Haltepunkte setze, bricht es beim Ergebnis zuerst, bevor es beim Ergebnis bricht [lat] = results [0] .geometry.location.Pa; 

Ich weiß, das Array sollte als Typarray deklariert werden, aber selbst als ich gerade das Ergebnisobjekt [0] .geometry.location zurückgegeben habe, wurde nichts zurückgegeben

was kann ich tun, um den lat/long des standorts zurückzugeben, damit ich ihn in meiner Datenbank speichern kann?

17
Chris Mccabe

Das Problem, mit dem Sie konfrontiert sind, besteht darin, dass Sie die Funktion geocoder.geocode so behandeln, als würden sie sofort abgeschlossen, bevor Sie das Ergebnis zurückgeben. Was wirklich passiert ist, dass der geocoder.geocode ausgelöst wird, und Sie erhalten sofort eine Ergebnisrückgabe. Da das asynchrone Ergebnis höchstwahrscheinlich nicht zurückgegeben wurde, ist Ihr Ergebnis leer. Stellen Sie sich das Geokodierungsergebnis als Push und nicht als Pull vor. Die StoreResult-Funktion (nicht gezeigt) ist der Code, den Sie zum Speichern der Informationen benötigen. Da Sie ein Ergebnis mit einer Fehlerzeichenfolge kombinieren, müssen Sie dies in Ihrer storeResult-Funktion behandeln. Alternativ können Sie im Ergebnis einen Status haben, der auf Erfolg oder Misserfolg hinweist.

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

Dies ist nicht die Antwort, aber verwenden Sie nicht Pa und Qa verwenden Sie immer die Funktionen lng () und 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

Ich kämpfte hart damit und fand, dass das Folgende funktioniert.

  1. Durchlaufen Sie das Objekt und drücken Sie in ein neues Array:

    var newArray = [];
    
    for (var key in latLng) {
    
       newArray.Push(key);
    
    }
    
  2. Rufen Sie Ihr Objekt mit variablen Werten mit der eckigen Klammer-Syntax auf.

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

In meinem Fall war die einfachste Lösung, um Längen- und Breitengrad von einem Platzobjekt zu erhalten:

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