当边界发生变化时,如何动态地将点添加到Google Map?

我现在可以在地图窗口中放置静态点:

var latlng = new GLatLng(lat, lng); map.addOverlay(new GMarker(latlng, markerOptions)); 

我知道如何获得窗口的界限。 我还可以编写一个页面来获取边界并以任何格式返回其中的点。

我现在遇到的问题:

  1. moveend事件是否捕获所有移动,包括缩放更改? 或者我是否需要单独观看该事件?
  2. 我该如何调用外部数据源? (我应该只是做一个JQuery $.get请求吗?)
  3. 该数据源应该返回什么?
  4. 如何在地图上显示该数据?

我在我的一个网站上使用它 。 我认为这正是你要找的。 但是请注意“gmaps-utility-library”插件有一些错误/错误的代码所以最好重新检查它并仔细检查一切是否正常工作(我没有在标记管理器中遇到任何错误但在某些来自该库的其他插件)。

这是参考和例子 。

即使你想自己编码,这也许是一个很好的起点。

编辑

我对3-4的答案:

这真的取决于情况。 如果它是静态的(你只需要在地图上管理很多点> 300)那么你可以将所有点与地图所在的页面一起提供(例如JavaScript数组)。 如果用户与数据交互,那么使用AJAX可能更好。 如果您在站点中使用jQuery(或任何其他JS库),那么如果没有那么使用该库中的ajax函数,那么请使用来自gmaps的函数。 这是因为在整个站点中使用相同的AJAX函数而不是使用2执行相同的工作是很好的。

如果您正在使用AJAX路径,您有两个选择:

  1. 在一个请求中加载整个地图的所有标记。
  2. 加载显示在用户屏幕上的标记+小边距。

如果您希望用户想要看到全局或者他想要查看所有/大多数积分,那么请选择选项1 +标记管理器(就像我推荐的那个或您自己的类似)。

如果真的有很多积分并且用户永远不会对大多数积分感兴趣那么请选择2 +经理或只是这个简单的算法:清除地图 – >地图窗口边界的请求点+ magin /(缓存) – >绘制点 – >重复每次移动/缩放。

从个人经验(我已经使用了两个AJAX选项)标记管理器做得相当不错,可以处理很多点,整体用户体验更加顺畅,然后只为视口加载点。 请求新点并在地图上绘制它们是相当滞后/不连贯的。 当然这取决于积分数量。

以下是从谷歌外部调用数据源的一个很好的例子: 谷歌地图PHP和SQL

如果你只是将点存储在外部javascript文件中,那么我建议在XML上使用JSON格式,因为谷歌地图使用的XML解析器比json慢得多。

  1. Moveend yes捕获任何类型的更改。
  2. 如果您只使用外部XML文件,那么您可以使用google的函数来调用和下载XML文件(见上面的链接),否则我将创建一个可以更新的文件,并使用json进行解析。
  3. 我相信它应该返回一个JSON,因为我发现它比XML解析要快得多。
  4. 您将解析数组并使用其中的每一个创建标记。 这是使用json的一个很好的例子:

Jquery和谷歌地图

祝好运!

我目前正在做与此类似的事情,以及服务器上的群集。

  1. 是的, moveend将捕获缩放变化。
  2. 如果您已经在使用jQuery,那么$.get请求将会很有效。
  3. 我试过返回XML和JSON。 这些工作正常,但我发现解析这些数据格式导致应用程序变得越来越慢,因为更多的点添加到数据库。 我现在返回使用eval()执行的普通Javascript。 我对此没有任何问题,因为我完全信任Javascript(me)的来源。
  4. 添加标记的Javascript函数仅包含标记的纬度,经度和ID。 该页面已包含一个Javascript数组,其中包含每个标记的所有数据,单击标记时可以访问该数据。

我就是这样做的,但你肯定可以用你想要的方法来完成许多方法。