2011-02-25 66 views
2

我有一个商店定位器,它将商店作为标记显示在地图上,并将它们列在边栏中。有大约600个商店,它们全部通过AJAX加载到页面上。所以我可以随时访问数组中的所有元素。现在,我想要的功能是,当用户在视口中移动/缩放时,我将显示当前区域的边界,并在侧边栏中过滤结果(位置阵列,每个位置都有一个lat和long)根据他们是否会在该区域展示。然后我会画出相关位置的标记。基本上,在视口中可以查看的任何位置也会列在侧栏中,保持同步。谷歌地图(v3)通过地图移动来过滤

有人能指出我在正确的方向来实现这个吗?这甚至听起来像是处理这种功能的有效方式吗?

回答

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

一个更好的方法是将商店存放在当前窗口大小的两倍的区域中,并且只在当前窗口超出上一个请求的范围时才获取新数据。 – rob 2011-11-03 22:14:42

2

您可以将移动/缩放事件附加到地图上,并基本上执行绑定检查以在查看边界内隐藏/显示标记。您可以使用LatLngBounds(sw?:LatLng, ne?:LatLng)来实现此目的,并使用getBounds();针对地图的当前边界检查标记LatLng。此外,在LatLngBounds内有一种方法来检查LatLtn是否在边界contains(latLng:LatLng)内。所以你会循环你的标记'LatLng并检查它。

Google Map API LatLngBounds

Google Map API Map

至于那张栏,如果你有保存那么你可以删除或隐藏侧边栏上的相关位置的标记。