谷歌地图反向地理编码:传递变量

时间:2013-07-09 22:55:43

标签: google-maps reverse-geocoding

我正在尝试将地址存储在变量(javascript)中的纬度,经度中。我创建了一个回调函数(在阅读了很多帖子后),代码如下。现在我想将地址存储在名为location3的变量中。

奇怪的是,对于分配了location3之后的警报,它是未定义的。但如果在300毫秒后查看它,那么它会给出正确的价值。我想立即将地址分配给location3。欢迎任何建议。

  function codeLatLng1(lat,long,callback) {
  var geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(lat,long);
  if (geocoder) {
    geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[1]) {
          callback(results[1].formatted_address);
          myvariable=results[1].formatted_address;
        } else {
          alert("No results found");
        }
      } else {
        alert("Geocoder failed due to: " + status);
      }
    });
  }
}


lat1_last=37;long1_last=-100;
codeLatLng1(lat1_last,long1_last,function(locat) {location3=locat;});
alert (location3); // THIS ALERT SHOWS THAT IT IS STILL UNDEFINED
setTimeout(function(){alert (location3);},300);  // THIS ALERT GIVES THE RIGHT ADDRESS

1 个答案:

答案 0 :(得分:0)

这里要抓住的想法是,geocode()(回调函数)的第二个参数不会立即被调用,而是仅在从Google收到结果之后。同时,已发布请求的函数codeLatLng1()将控制权返回给调用者。在你的程序中,这意味着接下来会发生第一个警报(),然后是Google等待你的一段等待时间,调用回调,依此类推。

同样,设置location3的匿名回调仅在收到结果时执行 - 而不是在codeLatLng1返回之前执行。

将警报置于匿名回调中会更有意义。通常情况下,这是结果的最终处理。

这是异步或事件驱动编程的一个例子。

我希望这说清楚!