javascript - 当边界发生变化时,如何向 Google map 动态添加点?

标签 javascript jquery google-maps mapping dynamic-data

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

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

而且我知道如何获取窗口的边界。我还可以编写一个页面,该页面将采用边界并以任何格式返回边界内的点。

我现在遇到的问题:

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

最佳答案

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

这是 referenceexamples .

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

编辑

我对 3-4 的回答:

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

如果您采用 AJAX 路径,您有 2 个选择:

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

如果您希望用户想要看到大图或者他想要看到所有/大部分点,那么请选择选项 1 + 标记管理器(比如我推荐的或您自己的类似管理器)。

如果确实有很多点,而用户永远不会对其中的大多数点感兴趣,那么选择选项 2 + 管理器或只是这个简单的算法:清除 map -> 请求 map 窗口边界的点 + magin/(缓存)-> 绘制点 -> 对每次移动/缩放重复。

根据个人经验(我使用了两种 AJAX 选项),标记管理器做得很好,可以处理很多点,整体用户体验比只为视口(viewport)加载点要流畅得多。请求新点并将它们绘制在 map 上非常缓慢/断断续续。当然,这取决于积分的多少。

关于javascript - 当边界发生变化时,如何向 Google map 动态添加点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1196915/

相关文章:

javascript - Angular 谷歌地图

javascript - 单击时获取 div 的类名

javascript - SVG 使用多个,加载一次

android - 谷歌地图无法在某些设备上播放并且应用程序崩溃

javascript - IE 7 问题 : jquery click to edit Not working

javascript - 如何检查单选按钮是否被选中,然后检查下一个单选按钮并显示不同的内容?

javascript - 如何同时显示谷歌地图和街景?

javascript - 对象映射 : Promise. 全部捕获迭代结束和错误

javascript - 如何确保我的 ajax 调用始终成功?

jQuery 加载无效的安全证书错误