首先感谢您提前花时间帮助我,感谢您的努力。
我在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的混乱道歉)。
答案 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”初始化中的地图)