将纬度,经度转换为地址作为字符串

时间:2013-04-15 08:36:23

标签: javascript google-maps google-geocoder

请帮我解决这个问题。
我想从谷歌地图中获取纬度,经度的地址。 这是我的功能:

function codeLatLng() {
var geocoder = new google.maps.Geocoder();
var lati = document.getElementById("latitude_value").value;
var lngi = document.getElementById("longitude_value").value;
var latlng = new google.maps.LatLng(lati, lngi);
var infowindow = new google.maps.InfoWindow();
var ngo;
geocoder.geocode({'latLng': latlng}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    if (results[1]) {
      map.setZoom(11);
      marker = new google.maps.Marker({
        position: latlng,
        map: map
      });
      ngo = results[1].formatted_address;
      infowindow.setContent(results[1].formatted_address);
      infowindow.open(map, marker);
    }
  } else {
    alert("Geocoder failed due to: " + status);
  }
});
return ngo;
 }

执行此功能时。地址显示在地图中 但是,这不是我需要的。我只想将这个地址分配给变量'ngo'作为字符串。
此函数返回'ngo',它在文本字段中显示为'undefinded' 我需要一些帮助才能解决这个问题 感谢。

2 个答案:

答案 0 :(得分:1)

  

我只想将此地址作为字符串分配给变量'ngo'。

那就是问题所在。你不能这样做。 JavaScript只是不起作用。地理编码器调用是异步。它在从服务器接收数据之前返回。在调用地理编码器回调函数之前,数据尚未就绪。

您需要做的是在回调函数本身中使用ngo数据,或者调用另一个函数并将数据传递给它,并在那里使用数据。

例如,你有这一行:

ngo = results[1].formatted_address;

您可以将其替换为:

useNGO( results[1].formatted_address );

其中useNGO是您定义的函数(在任何地方),如下所示:

function useNGO( ngo ) {
    // Do stuff with ngo here
}

答案 1 :(得分:0)

我认为您的问题是,在声明var时使用var ngo关键字会使ngo成为局部变量,因此它不会出现在codeLatLng()之外。尝试删除var ngo,将ngo = "";置于任何函数声明之外的某处(例如function codeLatLng() {之前),并告诉我是否有效:)