2012-10-02 36 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

我怎么能立即发出警报,而不是回报它? –