如何从Geocoder中提取地图中心坐标?

时间:2014-01-15 18:06:21

标签: javascript google-maps geocoding reverse-geocoding

var address = "Boston";
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        map.fitBounds(results[0].geometry.bounds);
        createLatLng();
    } else {
        alert("Geocode was not successful for the following reason: " + status);
    }

});

function createLatLng() {
  var MapCenter=map.getCenter();
  var x=MapCenter.lat(), y=MapCenter.lng(), z=0;
}

现在我有了这段代码,大部分来自google:https://developers.google.com/maps/documentation/javascript/geocoding的这个例子。

现在x和y变量未定义。为什么这样,我怎样才能正确得到x和y变量?

如果它有帮助,这里也是演示:http://jsbin.com/ilOTIQIn/1/edit

2 个答案:

答案 0 :(得分:1)

由于geocode是异步的,因此您无法在所需的位置设置MapCenter,因为此时API调用的结果不会返回。我建议您使用callback来帮助您管理通话:

var MapCenter, map, x, y, z;

function geocode(callback) {
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      map.setCenter(results[0].geometry.location);
      map.fitBounds(results[0].geometry.bounds);
      callback();
    } else {
      alert("Geocode was not successful for the following reason: " + status);
    }
  });
}

geocode(function () {
  MapCenter = map.getCenter();
  x = MapCenter.lat(), y = MapCenter.lng(), z = 0;
});

答案 1 :(得分:1)

Javascript是一种异步语言。您的地理编码请求将被发送,并且在发生这种情况时,将评估您的x,y和z变量。然后返回您的地理编码结果,但已设置x,y和z变量。我会在函数上面定义你的x,y,z变量,然后在那里检查状态是否为'ok'将它们设置在那里。

感知事件顺序:

  1. 发送请求
  2. 请求返回
  3. 设置变量x,y z
  4. 事件的实际顺序:

    1. 发送请求
    2. 设置变量x,y,z
    3. 结果返回