【问题标题】:Google Maps (v3) filter by map movementGoogle Maps (v3) 按地图移动过滤
【发布时间】:2011-02-25 17:01:43
【问题描述】:

我有一个商店定位器,可以在地图上将商店显示为标记,并在侧边栏中列出它们。大约有 600 家商店,它们都是通过 AJAX 在页面加载时一次性加载的。所以我可以随时访问数组中的所有它们。现在,我想要的功能是,当用户在视口中移动/缩放时,我得到当前显示区域的边界并在侧边栏中过滤结果(位置数组,每个位置都有纬度和经度)基于它们是否会在显示的那个区域中。然后我会绘制相关位置的标记。基本上,在视口中可以查看的任何位置也会在侧边栏中列出,并保持同步。

有人可以为我指出正确的实施方向吗?这听起来像是处理此功能的有效方式吗?

【问题讨论】:

    标签: javascript google-maps


    【解决方案1】:

    您需要为bounds_changed 事件编写一个处理程序(更多文档here

    google.maps.event.addListener(map, 'bounds_changed', function(){
      // your logic here - map.getBounds() will give you the updated bounds
    });
    

    至于效率,一次加载所有内容可能不是最具可扩展性的方法。如果您明年有 6000 家商店,或者您为每家商店添加额外数据怎么办?更好的方法是使用 AJAX 调用将边界传回服务器,并且只返回落入该区域的商店。

    【讨论】:

    • 更好的方法是在两倍于当前窗口大小的区域中获取商店,并且仅在当前窗口偏离上一个请求的范围时才获取新数据。
    【解决方案2】:

    您可以将移动/缩放事件附加到地图上,并基本上进行边界检查以隐藏/显示查看范围内的标记。您可以使用LatLngBounds(sw?:LatLng, ne?:LatLng) 实现此目的,并使用getBounds(); 检查标记LatLng 与地图的当前边界。此外,在LatLngBounds 中,有一种方法可以检查 LatLtn 是否在边界contains(latLng:LatLng) 内。因此,您将遍历标记的 LatLng 并对其进行检查。

    Google Map API LatLngBounds

    Google Map API Map

    就侧边栏而言,如果您保存了标记,那么您可以删除或隐藏侧边栏上的相关位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2012-07-17
      相关资源
      最近更新 更多