我有一个非常奇怪的错误,当我尝试调整地图大小以适应我放置的标记时,会导致浏览器冻结。
我的调整大小代码供参考:
function sizeMap() {
// create a new bounds object to define the new boundry
var bounds = new google.maps.LatLngBounds();
// loop through each the string latlang values held in the latlng
// aray
for ( var i = 0; i <latlngArray.length ; i++) {
// create a new LatLng object based on the string value
var tempLatLng = new google.maps.LatLng(latlngArray[i]);
// extend the latlng bounds based on the new location
bounds.extend(tempLatLng);
}
// map.fitBounds(bounds); <== everything seems to work fine until this line is uncommented
}
问题是我无法使用firebug正确调试它因为冻结了! 任何人都对问题可能有什么想法?
提前致谢。
更新
在回答问题时,以下代码显示了填充latlng数组的位置:
function geocodeAddress (address) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode( {'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
loadMarker(results[0].geometry.location,"Info here",address);
latlngArray.push(results[0].geometry.location); <== latlngs are first added here they are as a result of a call to the google geocode service with a standard string address.
} else {
alert("Geocode was not successful for the following reason: " +" "+ status);
}
});
}
答案 0 :(得分:4)
正如其他人提到的那样,您尝试使用另一个LatLng对象作为参数创建LatLng对象。它只接受2或3个参数,其中前两个是数字。 https://developers.google.com/maps/documentation/javascript/reference#LatLng
但是,您可以完全跳过创建新LatLng对象的部分,并使用循环内数组中的当前对象。
这解决了问题:http://jsfiddle.net/y9ze8a1f/1/
function sizeMap() {
// create a new bounds object to define the new boundry
var bounds = new google.maps.LatLngBounds();
// loop through each the string latlang values held in the latlng
// aray
for ( var i = 0; i <latlngArray.length ; i++) {
// This is causing the issue, you can only create a LatLng with two separate latitude and longitude arguments
//var tempLatLng = new google.maps.LatLng(latlngArray[i]);
bounds.extend(latlngArray[i]);
}
map.fitBounds(bounds);
}
如果您想基于旧的LatLng创建新的LatLng,可以使用LatLng方法lat()
和lng()
function sizeMap() {
// create a new bounds object to define the new boundry
var bounds = new google.maps.LatLngBounds();
// loop through each the string latlang values held in the latlng
// aray
for ( var i = 0; i <latlngArray.length ; i++) {
// create a new LatLng object based on the string value
var tempLatLng = new google.maps.LatLng(latlngArray[i].lat(), latlngArray[i].lng());
// extend the latlng bounds based on the new location
bounds.extend(tempLatLng);
}
map.fitBounds(bounds);
}
答案 1 :(得分:0)
据我所知,您无法从单个字符串参数创建LatLng对象。如果你有一个“lat,lng”形式的字符串,那么在创建LatLng对象之前将它们拆开。你的循环内部将如下所示:
var tempLatLng = latlngArray[i].split(',');
bounds.extend(new google.maps.LatLng(tempLatLng[0], tempLatLng[1]));
答案 2 :(得分:-1)
您不从字符串创建新的LatLng。它是由2个数字创建的,虽然看起来2个字符串也可以工作,一个用于纬度,一个用于经度。一个字符串不起作用。
所以你可以说new google.maps.LatLng(-25.363882, 131.044922)
甚至new google.maps.LatLng('-25.363882', '131.044922')
但不是new google.maps.LatLng('-25.363882, 131.044922')
因此,您需要将2个单独的值传递给新的google.maps.LatLng,但看起来您只传递了一个。
http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLng
答案 3 :(得分:-1)
根据您更新的代码,您根本不需要创建tempLatLng。您的数组已包含LatLng对象,因此您应该能够在for循环中说出bounds.extend(latlngArray[i])
...
答案 4 :(得分:-1)
使用计时器:
var Timer="";
$(window).resize(function() {
clearInterval(Timer);
run_timer();
});
function run_timer() {
Timer = setInterval(function(){sizeMap();}, 1500);
}
function sizeMap() {
clearInterval(Timer);
// create a new bounds object to define the new boundry
var bounds = new google.maps.LatLngBounds();
// loop through each the string latlang values held in the latlng
// aray
for (var i = 0; i <latlngArray.length ; i++) {
// create a new LatLng object based on the string value
var tempLatLng = new google.maps.LatLng(latlngArray[i]);
// extend the latlng bounds based on the new location
bounds.extend(tempLatLng);
}
// map.fitBounds(bounds); <== everything seems to work fine until this line is uncommented
}