【问题标题】:Google Maps - Thousands of markers - JSON谷歌地图 - 数以千计的标记 - JSON
【发布时间】:2010-10-22 16:05:33
【问题描述】:

在以下示例中,标记是从 JSON 加载的。

如果有 20,000 个标记,那么 JSON 将会非常大。

有没有办法根据缩放级别发送不同的JSON文件而不是发送一个巨大的数组?

http://gmaps-utility-library.googlecode.com/svn/trunk/markermanager/release/examples/weather_map.html

【问题讨论】:

    标签: javascript json google-maps google-maps-markers


    【解决方案1】:

    地图视图有一个“边界矩形”的概念。地图 api 以两个纬度/经度坐标对的形式提供给您 - 一个用于 SW 角,一个用于 NE 角。

    因此,如果您有一个返回 JSON 点的自定义数据服务,则需要接受这些坐标作为输入,并相应地调整返回的数据集(很可能作为 SELECT 语句中的 WHERE 子句)。

    我没有记住这个边界矩形的详细信息,但这就是 API docs 的用途。

    【讨论】:

      【解决方案2】:

      有一个名为 MarketClustered 的新库可以帮助您


      (来源:googlecode.com

      即使数据太大,我认为将所有数据都提供给地图会更好,让它做它的事情。

      【讨论】:

      • 任何超过 2,000 个标记的 MarkerClusterer 对我来说都太慢了(在 Firefox 中 - Chrome 和 Safari 4 最多可以达到 8,000 个)。尽管它确实取决于标记的密集程度。我确实同意一次导入所有数据可能会更好,而不是在缩放更改时发送块。
      【解决方案3】:

      是的,我在一个地方当局的应用程序中做了类似的事情,我们展示了 6,000 多个家庭中每所房屋的回收量。由于数据总量(包括每个家庭的地址和统计信息)相当大,一口气拉回整个数据文件导致浏览器出现死机。

      因此,在对数据库的 AJAX 调用中,我们发送了地图区域的边界矩形坐标(纬度、经度),然后只返回那些我们可见的点。由于应用程序的性质,用户驱动的“获取数据”按钮是完全可以接受的,但显然你可以在主题上玩很多其他变体——一旦你将边界坐标传送到服务器端,你就可以决定什么在那里做 - 例如,如果缩放级别太高,只返回一个子集。您也应该能够捕捉到地图绘制事件并自动执行此操作。

      【讨论】:

        【解决方案4】:

        当缩放变化时,将新的缩放级别发送到您的 JSON 服务并返回应该在该级别可见的标记。使用addMarkers() 将结果添加到 MarkerManager 并使其仅在当前缩放级别可见。

        此处的其他回复建议仅返回当前视图中的标记,但您也可以仅返回该缩放级别的所有标记。这取决于您对要在每个级别显示哪些标记的了解程度。

        【讨论】:

          【解决方案5】:

          解决此问题的可能方法:

          • 在服务器端构建JSON,具体取决于缩放级别(缺点:缩放后需要重新加载,优点:只需要加载少量数据)
          • JSON 数据中包含有关如何访问标记的信息(亲:只需要加载一次数据,con:使用JavaScript 遍历数据)
          • 计算JavaScript 中的可见标记(赞成:非常动态,反对:计算负荷大)

          【讨论】:

            猜你喜欢
            • 2023-03-28
            • 1970-01-01
            • 2018-11-24
            • 2014-05-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多