【发布时间】:2010-10-22 16:05:33
【问题描述】:
在以下示例中,标记是从 JSON 加载的。
如果有 20,000 个标记,那么 JSON 将会非常大。
有没有办法根据缩放级别发送不同的JSON文件而不是发送一个巨大的数组?
【问题讨论】:
标签: javascript json google-maps google-maps-markers
在以下示例中,标记是从 JSON 加载的。
如果有 20,000 个标记,那么 JSON 将会非常大。
有没有办法根据缩放级别发送不同的JSON文件而不是发送一个巨大的数组?
【问题讨论】:
标签: javascript json google-maps google-maps-markers
地图视图有一个“边界矩形”的概念。地图 api 以两个纬度/经度坐标对的形式提供给您 - 一个用于 SW 角,一个用于 NE 角。
因此,如果您有一个返回 JSON 点的自定义数据服务,则需要接受这些坐标作为输入,并相应地调整返回的数据集(很可能作为 SELECT 语句中的 WHERE 子句)。
我没有记住这个边界矩形的详细信息,但这就是 API docs 的用途。
【讨论】:
【讨论】:
是的,我在一个地方当局的应用程序中做了类似的事情,我们展示了 6,000 多个家庭中每所房屋的回收量。由于数据总量(包括每个家庭的地址和统计信息)相当大,一口气拉回整个数据文件导致浏览器出现死机。
因此,在对数据库的 AJAX 调用中,我们发送了地图区域的边界矩形坐标(纬度、经度),然后只返回那些我们可见的点。由于应用程序的性质,用户驱动的“获取数据”按钮是完全可以接受的,但显然你可以在主题上玩很多其他变体——一旦你将边界坐标传送到服务器端,你就可以决定什么在那里做 - 例如,如果缩放级别太高,只返回一个子集。您也应该能够捕捉到地图绘制事件并自动执行此操作。
【讨论】:
当缩放变化时,将新的缩放级别发送到您的 JSON 服务并返回应该在该级别可见的标记。使用addMarkers() 将结果添加到 MarkerManager 并使其仅在当前缩放级别可见。
此处的其他回复建议仅返回当前视图中的标记,但您也可以仅返回该缩放级别的所有标记。这取决于您对要在每个级别显示哪些标记的了解程度。
【讨论】:
解决此问题的可能方法:
JSON,具体取决于缩放级别(缺点:缩放后需要重新加载,优点:只需要加载少量数据)JSON 数据中包含有关如何访问标记的信息(亲:只需要加载一次数据,con:使用JavaScript 遍历数据)JavaScript 中的可见标记(赞成:非常动态,反对:计算负荷大)【讨论】: