Noob问题:如果加载谷歌地图(初始化)如何获取信息

时间:2010-11-16 12:08:48

标签: javascript google-maps map

我是google maps api的新手。我从手册中拿了一些样本并尝试按照我需要的方式进行更改,所以这就是我要做的事情: 这是谷歌地图手册

中的示例
  var geocoder;
  var map;
  function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng( 40.714353, -74.005973);
    var myOptions = {
      zoom: 10,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  }

  function codeAddress() {
    var address = document.getElementById("address").value;
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: map, 
            position: results[0].geometry.location
        });
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
  }

我稍微更改了codeAddress函数并尝试在页面加载时调用它:

function codeAddress(address) {
        //var address = document.getElementById("address").value;
        geocoder.geocode( { 'address': address}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
            var marker = new google.maps.Marker({
                map: map, 
                position: results[0].geometry.location
            });
          } else {
            alert("Geocode was not successful for the following reason: " + status);
          }
        });
      }
codeAddress("Some Address");

但它给我一个javascript错误“地理编码器未定义”。如何使脚本等到加载映射然后运行codeAddress函数?我不希望在初始化期间找到我的地址。

我希望这很清楚 提前谢谢。

1 个答案:

答案 0 :(得分:2)

问题是你在定义它之后直接调用codeAddress(因此这是在initialise()方法运行之前。

因此,您需要稍后在某个触发器上运行此操作。快速而肮脏的方法是将其设置为正文onload事件;这将等到所有资源(包括图像)都已完全加载,但考虑到地图也是图像,这可能不是太大的问题。

或者,大多数JS框架将为您提供非常方便的方法来在页面生命周期的各个点触发处理程序。如果您正在使用其中一种,您可能希望调查可用的选项并选择最佳选项,这取决于许多因素。

重要的是,请不要忘记在致电initialise()之前必须致电codeAddress()