2017-08-30 65 views
1

我使用這個腳本從一個地址獲取經緯度,如何從功能獲取經緯度並將其發送到新的google.maps.LatLng(經度,緯度)的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); 

我的問題是我無法在這部函數來獲取經緯度值,我嘗試使用其他功能

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

所以我的問題是如何從我的功能得到緯度和經度?謝謝

+0

你得到的錯誤是什麼? –

+0

當我寫console.log(緯度); console.log(longitude);出了函數,它說undefined undefined –

回答

0

基於你的標題(我可能是錯的,你應該清楚地表明你的代碼做在什麼的問題),這聽起來像您成功獲得緯度和經度,但隨後未能將其發送到地圖。

問題可能在於這樣一個事實:

訪問地理編碼服務是異步的,因爲谷歌地圖 API需要外部服務器的呼叫。因此, 需要傳遞迴調方法,以在完成 請求時執行。這個回調方法處理結果。請注意, 地理編碼器可能會返回多個結果。 (API docs

這樣做的異步特性意味着,當你的回調函數(function(results, status) {...}))是在響應等待,你也執行這一行:

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

但是,當然,經緯度還沒有定義,因爲我們還沒有迴應。

要在行動中明確地看到這一點,替代與alert()console.log()定義center的代碼,並將陸續在回調函數,並首先看到觸發:

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

最簡單的解決辦法可能是地方在回調函數中需要這個特定經度和緯度的代碼,這樣它纔會執行,直到你有一個響應,並擴展一個經度和緯度。

+0

感謝您的回覆,但即使我在我的函數中放置了var center = new google.maps.LatLng(緯度,經度),我稍後需要這個中心值,因爲我有長腳本 –

+0

如果你想使用這些變量(經度和緯度),你必須在回調函數中使用它,除非你有一個方法來確定回調完成的時間(可能是一個函數,檢查每一秒,看看那些變量被定義),但是將所有長腳本放入函數並在回調函數內調用該函數應該相當容易(實際上,這是一種將需要經度和緯度的所有代碼放入調用的視覺上不同的方式後退功能)。 –