【问题标题】:Google Maps Ajax New Markers谷歌地图 Ajax 新标记
【发布时间】:2012-05-16 22:27:21
【问题描述】:

我有一个 google api3 地图。在空闲时,我计算地图可见区域的半径,执行 ajax 请求并从 xml 文档中检索可见区域中的所有标记。

然后我解析 xml,清除当前地图标记并用新标记替换它们。

这可行,但有两个警告。 1) 重新加载时所有标记都会闪烁。和 2) 这会导致我下载并重新加载标记,即使用户没有将地图移动到足够远以使它们离开屏幕。换句话说,我正在重新加载屏幕上已经存在的标记。

最好的方法是只拉出地图可见区域中的标记,而不是已经在屏幕上?

我会追求性能,因为我有大量的标记。

测试网址:http://whosopennow.com/maintenance/test.php#(泛华盛顿特区)

【问题讨论】:

    标签: php javascript jquery ajax google-maps


    【解决方案1】:

    假设地图边界不包括国际日期变更线或地图换行(您可能必须将最小缩放设置为 4 左右),我将使用map.getBounds()(未测试)采取以下步骤:

    1. 始终存储现有的可见边界。我就叫它lastViewable
    2. 当检测到可见边界发生变化时,执行 Ajax 调用。
    3. 对于 XML 中的每个标记,如果它在 lastViewable 之外,请将其添加到屏幕上。这些是新的标记。
    4. 现在,假设地图已被拖动。现在需要移除可视区域之外的标记。
    5. lastViewable 设置为当前边界
    6. 删除这些lastViewable 边界之外的所有标记。

    【讨论】:

    • 但是,这仍然需要我在 xml 文档中下载那些额外的标记,然后使用 javascript 跳过它们。我根本不想将它们放在 xml 中,以尽量减少加载之间的时间。
    • 能否让服务器端进行处理(确定哪些标记在最后显示的范围内)?然后只发回新的标记。
    • 是的,但这需要我进行额外的服务器调用,向服务器发送屏幕上所有标记的 ID,从而有效地使我的加载时间加倍。
    • 不,您只需像我描述的那样将 SW/NE 边界发送到服务器,然后让服务器丢弃重复项。我确实看到了我的方案删除旧标记只能使用 JavaScript 完成的问题。
    • 我们会尝试的。有没有更快的方法来发送有关标记的数据,而不是创建、下载和解析 xml 文档?
    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 2014-05-23
    • 2012-02-21
    • 2013-08-28
    • 2016-09-10
    • 2015-05-09
    • 2015-08-22
    • 2014-02-28
    相关资源
    最近更新 更多