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

时间:2009-07-28 21:40:52

标签: javascript jquery google-maps mapping dynamic-data

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

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

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

我现在遇到的问题:

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

以下是从谷歌对数据源进行外部调用的一个很好的示例: Google Maps PHP and SQL

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

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

    祝你好运!

答案 2 :(得分:1)

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

此处为referenceexamples

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

修改

我对3-4的回答:

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

如果您正在使用AJAX路径,则有2个选项:

  1. 在一个请求中加载整个地图的所有标记。
  2. 加载显示在用户屏幕上的标记+小边距。
  3. 如果您希望用户想要看到全局或者他想要查看所有/大多数积分,那么请选择选项1 +标记管理器(就像我推荐的那个或您自己的类似)。

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

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