如何确定我的哪些标记在我的 Google 地图中可见?

Posted

技术标签:

【中文标题】如何确定我的哪些标记在我的 Google 地图中可见?【英文标题】:How do I work out which of my markers are visible in my Google map? 【发布时间】:2010-10-25 10:14:07 【问题描述】:

这就是我想要做的。我有大约 160 个名胜古迹。用户输入我使用 Google 进行地理编码的地址(邮政编码、完整地址等)。然后,我创建一个以该点为中心的 Google 地图,并为地图上的每个兴趣点添加一个标记(使用 MarkerManager)。到目前为止一切顺利。

我想在地图旁边显示与正在显示的标记相对应的项目列表。当用户拖动窗口,或者放大或缩小,或者其他什么时,我想更新这个列表。如果一次显示的项目太多,我想向用户显示一条消息。

最好的方法是什么?我尝试向 MarkerManager 添加一个侦听器,以便在它更改时我可以确定哪些标记仍然显示。但是,该事件似乎没有像我预期的那样触发,即当显示的标记发生变化时。另外,我怀疑每次像这样循环超过 160 多个标记是否有效。

             GEvent.addListener(mgr, "changed", 
                function(bounds, markerCount) 
                
                    var visibleBounds = map.getBounds();

                    for (var i = 0; i < gmarkers.length; i++) 
                    
                        //alert(gmarkers[i].getPoint());
                        if (visibleBounds.containsLatLng(gmarkers[i].getLatLng())) 

                            // this will need to be replaced with an ajax call
                            // to get the details from the server
                            strhtml += "<div>Another item</div>";
                            count ++;
                        
                    
                    alert(count);
                );

最好的方法是什么?

更新:此代码有效,但该事件似乎仅在地图移动某个最小距离时触发。因此,如果用户将地图拖动一小段距离,该事件似乎不会触发。

【问题讨论】:

【参考方案1】:

'changed' 事件仅在标记发生更改时触发,因此肯定会有小动作不会改变任何内容的情况。 MarkerManager 大大扩展了它的工作范围,以使移动时更加流畅(它显示地图之外的标记,在一定距离内)。

【讨论】:

【参考方案2】:

您需要监听“idle”事件,该事件在地图在平移或缩放后变为空闲时触发。

google.maps.event.addListener(map, 'idle', function() 
  var bounds = map.getBounds();
  ...
);

【讨论】:

【参考方案3】:

要首先获取所有标记,您必须找到当前视口的边界,然后您必须循环所有标记并查看它们是否包含在边界中。下面是一个例子。

var bounds =map.getBounds();

for(var i = 0; i < markers.length; i++) // looping through my Markers Collection        
if(bounds.contains(markers[i].position))
 console.log("Marker"+ i +" - matched");

【讨论】:

以上是关于如何确定我的哪些标记在我的 Google 地图中可见?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的网站上向 Google 地图小部件添加用户输入标记,并从中获取纬度和经度数据?

使用 AGM 拖动地图时如何将 Google 地图标记保持在中心?

在我的屏幕上显示给我的区域中的android上的地图中显示标记

来自 JSON 的 Google 地图上的标记

Google 地图:当前位置标记(地图的定期更新)

为什么我的脚本无法在Google地图上显示标记?