2012-10-02 90 views
0

我已經寫了一個函數,返回任何GPS座標傳遞給該功能,但由於某種原因,它不返回鎮的城鎮。如果我提醒這個城鎮,它會讓我看到正確的城鎮。谷歌地圖地理編碼位置不返回鎮

代碼:

function getTown(latitude,longitude){ 

    // Define Geocoding 
    var geocoder = new google.maps.Geocoder(); 

    // Using the longitude/latitude get address details 
    var latlng = new google.maps.LatLng(latitude,longitude); 

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

     // If response ok then get details 
     if (status == google.maps.GeocoderStatus.OK) {   
      var town = results[1].address_components[1].long_name; 

      return town; // Returns Norwich when alerted using the e.g below. 
     }   
    }); 
} 

例子:

getTown(52.649334,1.288052); 

回答

0

這是因爲您從嵌套函數返回城裏。對geocoder.geocode的調用是異步的,經過一段時間後會返回。你可以將它設置爲這樣的變量:

var theTown = null; 
function getTown(latitude,longitude){ 

// Define Geocoding 
var geocoder = new google.maps.Geocoder(); 

// Using the longitude/latitude get address details 
var latlng = new google.maps.LatLng(latitude,longitude); 

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

    // If response ok then get details 
    if (status == google.maps.GeocoderStatus.OK) {   
     var town = results[1].address_components[1].long_name; 

     theTown = town; // Returns Norwich when alerted using the e.g below. 
    }   
}); 
} 
+0

這沒有什麼區別? –

+0

如果你期望的是運行'var town = getTown(52.649334,1.288052);'並且將城鎮設置爲** Norwich **,那麼它的**從不會**發生。對「geocoder.geocode」的調用需要時間。多少時間?每次您調用該方法時,它會有所不同,但在您通過互聯網發送請求以從Google獲取一些數據時可能需要幾百毫秒。您正在使用[異步I/O](http://en.wikipedia.org/wiki/Asynchronous_I/O),這是您編程任務中的一個重要概念。 –

+0

我怎麼能立即發出警報,而不是回報它? –