Google maps 使用markerclusterer过滤Google地图,以便仅显示屏幕上可见的标记(在侧边栏上)-通过xml加载的内容

Google maps 使用markerclusterer过滤Google地图,以便仅显示屏幕上可见的标记(在侧边栏上)-通过xml加载的内容,google-maps,google-maps-api-3,markerclusterer,Google Maps,Google Maps Api 3,Markerclusterer,我正在运行一个基于谷歌地图的网站。 多亏了这个社区,我已经设法让它从xml文件中读取数据,将其处理成markerclusterer对象,并让它显示一个包含内容的侧栏。 现在我想看看是否有可能只使用屏幕上的标记来过滤侧边栏(放大将从列表中删除项目)。 我已经尝试过了,但没有成功,因为markerclusterer给我带来了困难。 谢谢你的帮助。谢谢 观察地图的边界事件,然后在标记上循环,检查地图边界是否包含标记: google.maps.event.addListener(map,'bounds_

我正在运行一个基于谷歌地图的网站。 多亏了这个社区,我已经设法让它从xml文件中读取数据,将其处理成markerclusterer对象,并让它显示一个包含内容的侧栏。 现在我想看看是否有可能只使用屏幕上的标记来过滤侧边栏(放大将从列表中删除项目)。 我已经尝试过了,但没有成功,因为markerclusterer给我带来了困难。
谢谢你的帮助。谢谢

观察地图的边界事件,然后在标记上循环,检查地图边界是否包含标记:

google.maps.event.addListener(map,'bounds_changed',function(){
var bounds=map.getBounds();
$('#side_bar a').each(function(i,e){
  $(e).add($(e).next('br'))
    .css('display',(bounds.contains(gmarkers[i].getPosition()))?'block':'none');
});
});
这将过滤边栏元素,但lazyload不会注意到更改。但您可以通过触发滚动事件强制lazyload加载图像:

google.maps.event.addListener(map,'bounds_changed',function(){
var bounds=map.getBounds();
$('#side_bar a').each(function(i,e){
  var c=bounds.contains(gmarkers[i].getPosition());
  $(e).add($(e).next('br')).css('display',c?'block':'none')
   .find('img').trigger((c)?'scroll':'void');
});
});

这是可能的,我有这样的例子,只是不使用markerclusterer。您的代码是什么样子的(您试图执行代码但无法使其工作)?是的!你和你的优秀教程是在谷歌地图api上教了很多东西!包括填充边栏,从xml加载。。。我敢肯定,我是在geocodezip.com的例子中尝试做我想做的事情,但并没有成功地使它与clusterer一起工作)。谢谢你的网站!谢谢,你真的为我指明了正确的方向!这项工作是CPU密集型的,任何滚动或平移都会使地图冻结一两秒钟。但有了这个,我现在也许可以实现一个按钮(“显示来自此区域的架构师”,例如)。PS:我将您的代码放在markerCluster声明之前(如果我将其放在其他事件侦听器旁边,它将挂起映射)。谢谢你的帮助!您可以使用
idle
来代替
bounds\u changed
,这样可以减少触发次数,这有助于。。。仍然可能需要太多的CPU:/(我的机器还不错…)但我会看看我能做些什么!:)我认为添加延迟会有所帮助,使空闲侦听器仅在1.5秒后启动。再次感谢!这就是现在的情况(仅限我的本地主机):
google.maps.event.addListener(映射,'idle',(函数(){var delay;返回函数(){clearTimeout(delay);timer=setTimeout(函数(){var bounds=map.getBounds();$('.#side_bar a')。每个函数(i,e){var c=bounds.contains(gmarkers[i].getPosition());$(e)。添加($(e).next('br')).css('display',c'block':'none').find('img').trigger((c)'scroll':'void');});},1500);}}()