我有一个商店定位器,它将商店显示为地图上的标记,并将其列在侧边栏中。有大约600个商店,它们都是通过AJAX在页面加载时一次加载的。所以我可以随时访问阵列中的所有内容。现在,我想要的功能是,当用户在视口中移动/缩放时,我得到当前区域的显示边界并过滤侧边栏中的结果(位置数组,每个位置都有一个lat和long)根据他们是否会在该区域展示。然后我会绘制相关位置的标记。基本上,视口中可以看到的任何位置也会在侧边栏中列出,保持同步。
有人能指出我正确的方向来实现这个目标吗?这听起来像是一种处理此功能的有效方法吗?
答案 0 :(得分:4)
您需要为bounds_changed
事件编写处理程序(更多文档here)
google.maps.event.addListener(map, 'bounds_changed', function(){
// your logic here - map.getBounds() will give you the updated bounds
});
至于效率,一次加载所有内容可能不是最具扩展性的方法。如果您明年有6000家商店或者为每家商店添加额外数据怎么办?更好的方法是使用AJAX调用将边界传递回服务器,并仅返回属于该区域的存储。
答案 1 :(得分:2)
您可以将移动/缩放事件附加到地图,并且基本上执行绑定检查以隐藏/显示查看范围内的标记。您可以使用LatLngBounds(sw?:LatLng, ne?:LatLng)
实现此目的,并使用getBounds();
检查标记LatLng与地图的当前边界。此外,在LatLngBounds
范围内,有一种方法可以检查LatLtn是否在Bounds contains(latLng:LatLng)
范围内。所以你会遍历你的标记'LatLng并检查它。
和
就侧边栏而言,如果您保存了标记,则可以删除或隐藏侧边栏上的相关位置。