谷歌地图 - 成千上万的标记 - JSON

时间:2009-04-29 18:57:41

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

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

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

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

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

5 个答案:

答案 0 :(得分:8)

地图视图中存在“边界矩形”的概念。地图api为您提供两个纬度/经度坐标对 - 一个用于SW角,另一个用于NE角。

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

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

答案 1 :(得分:6)

有一个名为MarketClustered的新图书馆可以帮助您

alt text
(来源:googlecode.com

即使数据太大,我认为将所有数据提供给地图会更好,并让它做到这一点。

答案 2 :(得分:1)

是的,我在一个地方当局的申请中做了类似的事情,我们在那里展示了每个房屋在6000多个家庭中回收的数量。由于数据总量(包括每个家庭的地址和统计信息)非常大,一次性拉回整个数据文件导致浏览器似乎挂起。

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

解决此问题的可能方法:

  • 在服务器端构建JSON,具体取决于缩放级别(con:需要在缩放后重新加载,专业版:只需要加载少量数据)
  • 包含有关如何在JSON数据中访问标记的信息(专业:只需要加载一次数据,con:使用JavaScript迭代数据)
  • 计算JavaScript中的可见标记(专业:非常动态,con:重计算负载)