编辑: 问题 =“有没有办法循环遍历数组,并检查每个位置(长/纬度)是否直接落入当前视口”(未通过视口中的所有标记)
背景:
我有一个位置数组(lat,long,id)。
我想:
谷歌有一个.contains,所以我猜你可能会使用像
这样的东西 map.getBounds().contains
并以某种方式引用每个marker.getPosition()
但我想知道是否有办法循环遍历数组并检查每个位置(长/纬)是否直接落入当前视口
答案 0 :(得分:2)
你的意思是这样(未经测试),map是google.maps.Map对象,需要在范围内。 markersArray是标记数组。
for (var i=0; i< markersArray.length; i++) {
if (map.getBounds().contains(markersArray[i].getPosition())) {
// the marker is in view
} else {
// the marker is not in view
}
}
答案 1 :(得分:0)
感谢geocodezip,你给了我如何通过循环遍历数组解决它的想法。我不知道这是否是最有效的方法,但是我把一些似乎做我想要的代码放在一起 - 如果你检查上面的jsfiddle并查看控制台,你可以看到它记录何时以及哪些点在视口中。
$(document).ready(function(){
var myOptions = {
center: new google.maps.LatLng(51, -2),
zoom: 9,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var storeArray = new Array(["51.38254", "-2.362804", "ID1"], ["51.235249", "-2.297804","ID2"], ["51.086126", "-2.910767","ID3"]);
google.maps.event.addListener(map, 'idle', function() {
for (i = 0; i < storeArray.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(storeArray[i][0], storeArray[i][1]),
map: map
});
}
for (var i=0; i<storeArray.length; i++) {
if (map.getBounds().contains(new google.maps.LatLng(storeArray[i][0], storeArray[i][1]))) {
console.log("marker: " + storeArray[i][2]);
}
}
});
});