我目前有一个谷歌地图填充了数据库中的数据。我正在使用markerclusterer v3来聚类标记以使地图加载更快。我已经搜索了文档,似乎无法找到一种方法来获取地图边界中所有标记的列表。基本上我正在尝试在外部div中创建标记地址的外部列表。目前在页面加载时,它会附加整个收件人列表。我想要做的只是标记,以及当时出现在该地图上的群集中包含的标记出现在列表中。所以在缩放13处有6个簇,每个簇有3个,还有一个独奏标记。在缩放14处,存在3个3和2个独立标记的簇。在缩放13处,列表中将有19个地址,而在缩放14处,列表中将有11个地址。只是地图边界中的标记列表。我目前在初始地图创建时加载所有地址一次。我想在每次缩放时向服务器创建一个ajax帖子,但认为在每个地图移动上调用服务器都没有必要。必须有一种方法来获取由markersclusterer控制的边界中的标记列表。
的.js
var markers = [];
for (var i = 0; i < data.coords.length; i++) {
var dataInd = data.coords[i];
var latLng = new google.maps.LatLng(dataInd[1],dataInd[2]);
var marker = new google.maps.Marker({position: latLng});
markers.push(marker);
}
var map;
var myOptions = {
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
function init() {
map = new google.maps.Map(document.getElementById("map"), myOptions);
var markerCluster = new MarkerClusterer(map, markers);
}
for (var i=0; i < markers.length; i++) {
if (map.getBounds.contains(markers[i])) {
console.log(markers);
} else {
console.log('failed');
}
}
google.maps.event.addDomListener(window, 'load', init);
答案 0 :(得分:15)
运行此代码:
for (var i=0; i < markers.length; i++)
{
if (map.getBounds().contains(markers[i].getPosition()))
{
// markers[i] in visible bounds
}
else
{
// markers[i] is not in visible bounds
}
}
更新:您可能需要这样做(如果您尝试将循环添加到init函数中)。其他选项(你还没有真正清楚为什么你想要这样做):
每当地图被缩放或平移时(当边界再次改变时),你可能想要重新渲染“listOfItems”
var map = null;
var markers = [];
function init()
{
var myOptions =
{
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"), myOptions);
for (var i = 0; i < data.coords.length; i++)
{
var dataInd = data.coords[i];
var latLng = new google.maps.LatLng(dataInd[1],dataInd[2]);
var marker = new google.maps.Marker({ position: latLng });
markers.push(marker);
$('#listOfItems').append('<li>' + latlng + '</li>');
}
var markerCluster = new MarkerClusterer(map, markers);
google.maps.event.addListener(map, 'bounds_changed', function()
{
for (var i = 0; i < markers.length; i++)
{
if (map.getBounds().contains(markers[i].getPosition()))
{
// markers[i] in visible bounds
}
else
{
// markers[i] is not in visible bounds
}
}
});
}
google.maps.event.addDomListener(window, 'load', init);