2012-05-18 75 views
0

我的数据库中有很多地址我想添加到Google地图中作为标记。我只想加载和添加地图上选定区域的标记。如果地图放大或拖曳,则应更新地图上的标记。 我该怎么做?使用AJAX动态更新Google地图

非常感谢!

+0

标记由谷歌地图自动更新缩放,拖动,如果你想改变捕捉这个事件。 – Aristos

回答

0

正如Aristos所说,标记会在焦点时自动显示。但是,如果我有一大批联系人,只有在需要时才可能更容易做到。

我的策略是:

  • 您已经添加了地址的跟踪 - 不点做两次。

  • 从地址得到LatLng。

  • 获取地图的当前范围(使用的getBounds()来获得分/地图的最大经纬度当前显示的)

  • 检查地址的经纬度是否在范围内。

  • 如果是,请添加标记。

如果你真的有很多,你可能想预取经纬度,并存储在SQL表的地址。然后你可以用间隔查询表格。

HTH

编辑:一些代码。假设你有标记的Array(),以及西北和东南边界,你可以这样做:

function filterMarkers(nw, se, myMarkers) { 
    var north=nw.lat(); 
    var west=nw.lng(); 
    var south=se.lat(); 
    var east=se.lng(); 
    var isInsideBounds=[]; 
    for (var i in myMarkers) { 
    if(myMarkers[i].position.lat()>=north && myMarkers[i].position.lat()=<south && myMarkers[i].position.lng()>=west && myMarkers[i].position.lng()=<east) { 
     isInsideBounds.push(myMarkers[i]); 
    } 
    } 
    return isInsideBounds; 
} 
+0

非常感谢您的回复! 您是否知道任何代码示例,该代码示例显示如何仅为地图上的选定区域加载必要的标记? – PNR

+0

我会捡起一些东西。 – dda

+0

非常感谢您的回复! 我的计划是从web服务获取标记,并让web服务过滤标记。所以我需要告诉webservice索姆关于地图上可见区域的信息。据我所知,web服务的参数是nw.lat(),nw.lng(),se.lat()和se.lng()。但是,在你的例子中,你从哪里开始? 谢谢! – PNR

0

为了管理大量的标记,你一定要充分利用已经被内置到做基础设施这个。 Google Developers博客上有一篇很棒的文章,讨论了流行的选项。

https://developers.google.com/maps/articles/toomanymarkers

标记聚类器是一种很常见的成分,我看到所有的地方,当涉及到地图应用程序,并似乎适合你正在寻找的要求。我还会看看Fusion Tables,因为它可以使数千个位置的地图非常简单。

+0

感谢您的回复! 我已经在使用这个函数:-)但是我在源代码中为标记写了所有的坐标,它填充了200k字节。我认为它会更圆滑,只是加载地图显示区域中的标记。 – PNR

+0

查看标题为“视口标记管理”的标题,它讨论如何使用Ajax仅返回当前可视区域中的标记。显然,如果采用这种方法,您将需要限制应用中的缩放级别。 – javram