谷歌地图JavaScript问题

时间:2011-08-14 12:18:19

标签: javascript google-maps-api-3

首先感谢您提前花时间帮助我,感谢您的努力。

我在google maps api,JavaScript版本3时遇到问题。

我写了以下代码

    $('.adr').ready(function(){    

    initialize();

})

function initialize() {

    var myLatlng = codeAddress();

    var myOptions = {
      zoom: 14,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.SATELLITE
    };

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

  }

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

    var address;
    var street = cropAdr($(".street-address").text());
    var city = cropAdr($(".locality").text());
    var state = cropAdr($(".region").text());
    var zip = cropAdr($(".zip").text()); 

    address = street + ", " + city + ", " + state + ", " + zip;    

    geocoder.geocode( {'address': address}, function(results, status) 
    {

      if (status == google.maps.GeocoderStatus.OK) 
      {
        var latlng = results[0].geometry.location;
        return latlng;
      }  
      else 
      {
        alert("Geocode was not successful for the following reason: " + status);        
        return null;
      }

    });
}



function cropAdr(args)
{
  var index = args.indexOf(":");
  var value = args.substr(index+1);

  return value;
}

但它不起作用。

我已经检查了“results [0] .geometry.location”返回的值和它的完美,所以地址操作有效。 “results [0] .geometry.location”是一个google.maps.Latlng对象,但我试图将co-ords删除为字符串,然后创建一个新的google.maps.Latlng对象,但没有骰子。< / p>

但是,如果我手动复制该字符串并将值粘贴到“var myLatlng = new google.maps.Latlng(粘贴复制字符串!)”,整个过程就可以了!

我看不出这个脚本还有什么问题(为Jquery和Javascritpt的混乱道歉)。

1 个答案:

答案 0 :(得分:1)

Google Maps API地理编码器接受一个函数,该函数将在地址编码时运行,但该函数可以异步调用 - 也就是说,在其余代码已经完成运行之后。

在codeAddress中,您调用Geocoder并使用以下行传递函数:

geocoder.geocode( {'address': address}, function(results, status)

然后尝试从传递给地理编码器的函数返回latLng,但这与从codeAddress返回值不同。从此函数内部返回的值将传递给地理编码器对象,该对象将忽略它。

您需要将传递给地理编码的功能与latLng做一些事情。例如,替换:

return latLng;

使用:

map.setCenter(latLng);

一旦结果可用,地图应该以地理编码的地址为中心。

(为此,您需要将地图对象设为全局或以其他方式使其可用于codeAddress。我建议在代码顶部添加“var map;”,并从使用前删除“var”初始化中的地图)