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

问题描述 投票:8回答:5

在以下示例中,标记是从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
5个回答
8
投票

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

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

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


6
投票

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

alt text (来源:googlecode.com

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


1
投票

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

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


1
投票

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

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


0
投票

解决此问题的可能方法:

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