9

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

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

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

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

4

5 回答 5

8

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

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

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

于 2009-04-29T19:04:16.400 回答
7

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

替代文字
(来源:googlecode.com

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

于 2009-04-29T21:14:06.137 回答
1

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

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

于 2009-04-29T19:09:06.623 回答
1

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

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

于 2009-04-29T20:58:59.323 回答
0

解决此问题的可能方法:

  • 根据缩放级别构建JSON服务器端(con:缩放后需要重新加载,pro:只需要加载少量数据)
  • 包括有关如何在JSON数据中访问标记的信息(亲:只需要加载一次数据,con:使用 遍历数据JavaScript
  • 计算可见标记JavaScript(赞成:非常动态,反对:繁重的计算负载)
于 2009-04-29T19:03:18.510 回答