1

我正在尝试使用 google maps javascript API 来映射基于此示例的地址。

https://google-developers.appspot.com/maps/documentation/javascript/examples/geocoding-simple

该文档推荐客户端 javascript 方法作为处理请求配额的最佳方式。到现在为止还挺好。我的问题是从这个例子转移到我的具体案例。我的地址已经在数据库中,所以我不需要用户输入。此外,我不希望地图与页面一起加载。相反,我希望在用户单击链接时加载地址的地图。

我有一个脚本可以使用initialize()将地图加载到div中。但我的问题是初始化以使用地理编码。示例中的地理编码取决于使用我不想要的 bodyonload 初始化加载。

这是代码。将不胜感激任何建议:

javascript

    var map;
    var geocoder;


     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);
              }
            });
          }

      function initialize() {
    geocoder = new google.maps.Geocoder();
        var latlng = new google.maps.LatLng(40.7562008,-73.9903784);
        var myOptions = {
          zoom: 18,
          center: latlng,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
      }

html

<input id="address" type="hidden" value="Palo Alto CA">
<a href="javascript:void(0)" onclick="initialize()">View map without geocoding</a>
<div id="map_canvas" style="width:300px; height:300px;"></div>
<a href="javascript:void(0)" onclick="codeAddress()">View map of geocoded address</a>
4

1 回答 1

2

我对您的脚本的唯一问题是函数中的以下行initialize()

var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

通过声明var map,您的脚本只是声明了一个名为 的局部变量map,而不是使用在map脚本顶部声明的全局变量。

通过删除var,脚本使用全局变量并运行良好:

map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

最后,要在链接单击时加载地理编码地图,onclick请将您的地理编码地址更改为onclick="initialize();codeAddress();".

添加:

尝试将您的initialize()codeAddress()方法组合到以下内容中:

function initialize() {
    geocoder = new google.maps.Geocoder();

    var address = document.getElementById('address').value;
    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var myOptions = {
                zoom: 18,
                center: results[0].geometry.location,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        } else {
            alert('Geocode was not successful for the following reason: ' + status);
        }
    });
}

然后只需initialize()从您的链接中调用。

基本上,我们正在做的是调用正在执行的调用geocoder.geocode()codeAddress()并且在生成的委托中,我们results[0].geometry.location用来初始化地图。这样,临时的 latlong 就不需要显示了。

于 2012-12-02T00:52:28.393 回答