2017-08-30 6 views
1

ich dieses Skript von einer Adresse Breitengrad Längengrad, istwie Breite Länge von Funktion zu erhalten und sie zu neuen google.maps.LatLng (Breitengrad, Längengrad) javascript

var latitude=""; 
var longitude =""; 


function codeAddress(address) { 

    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == 'OK') { 


    latitude = results[0].geometry.location.lat(); 
    longitude = results[0].geometry.location.lng(); 
    // myAfterFunction(); 
    // console.log(this.latitude); 

    } else { 
     alert('Geocode was not successful for the following reason: ' + status); 
    } 
    }); 

} 

var center = new google.maps.LatLng(latitude,longitude); 

mein Problem, das ich bekommen bin mit schicken kippt die Breiten- und Längenwerte von dieser Funktion erhalten, habe ich versucht, eine andere Funktion

function myAfterFunction(){ 
    console.log(latitude); 
} 

mit so meine Frage ist, wie geografische Breite und Länge von meiner Funktion zu bekommen? Danke

+0

Was ist der Fehler, den Sie bekommen? –

+0

wenn ich console.log (latitude) schreibe; console.log (Länge); aus der Funktion, sagte es undefined undefined –

Antwort

0

Basierend auf Ihrem Titel (ich könnte falsch sein, sollten Sie deutlich angeben, was Ihr Code in der Frage tut), es klingt wie Sie erfolgreich die Breite und Länge erhalten, aber dann scheitern es an die Karte zu senden .

Das Problem liegt wahrscheinlich in der Tatsache:

Zugriff auf das Geocoding Service asynchron ist, da die Google Maps API einen Anruf an einen externen Server zu machen braucht. Aus diesem Grund müssen Sie eine Callback-Methode übergeben, die nach Abschluss der Anforderung ausgeführt wird. Diese Callback-Methode verarbeitet das Ergebnis (die Ergebnisse). Beachten Sie, dass der Geocoder mehr als ein Ergebnis zurückgeben kann. (API docs)

Die asynchrone Natur bedeutet dies, dass, während die Rückruffunktion (function(results, status) {...})) auf eine Antwort zu warten, sind Sie auch diese Zeile ausführen:

var center = new google.maps.LatLng(latitude,longitude); 

Aber natürlich, Länge und Breite sind noch nicht definiert, da wir noch keine Antwort haben.

Um dies in Aktion zu sehen ausdrücklich, ersetzen Sie den Code center mit einem alert() oder console.log(), und legen Sie eine andere in der Call-Back-Funktion und sehen Sie definieren, was zuerst löst:

function codeAddress(address) { 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': address}, function(results, status) { 
    console.log("Response recieved"); 
    } 
    }); 

} 
console.log("Tried to use response"); 

Die einfachste Lösung Ort sein könnte der Code, der diese spezifische Länge und Breite innerhalb der Callback-Funktion benötigt, so dass er erst ausgeführt wird, wenn Sie eine Antwort haben, und durch eine Erweiterung einen Längen- und Breitengrad.

+0

Vielen Dank für Ihre Antwort, aber auch wenn ich var center = new google.maps.LatLng (Breite, Länge) in meiner Funktion, ich brauche diese Center-Werte später, weil ich habe Langes Skript –

+0

Wenn Sie diese Variablen (Längen- und Breitengrad) verwenden möchten, müssen Sie sie innerhalb der Rückruffunktion verwenden, es sei denn, Sie haben eine Methode, um festzustellen, wann der Rückruf abgeschlossen ist (möglicherweise eine Funktion, die jede Sekunde prüft, ob diese angezeigt wird) Variablen sind definiert), aber es sollte ziemlich einfach sein, all dein langes Skript in eine Funktion zu setzen und diese Funktion innerhalb der Callback-Funktion aufzurufen (im Wesentlichen eine visuell andere Art, all deinen Code zu setzen, der den Breiten- und Längengrad im Aufruf benötigt Zurück-Funktion). –

Verwandte Themen