Javascript 通过HTTP处理大型地图数据

Javascript 通过HTTP处理大型地图数据,javascript,json,google-maps,Javascript,Json,Google Maps,如何通过HTTP有效地发送大量地图数据供客户端渲染?似乎有一种比提供一个更好的方法。我很好奇像Apartments.com或Foursquare这样的大型网站是如何在“需要知道”的基础上提供地图数据的。通常,这些大型网站会“懒散地加载”地图数据。基本上,这意味着即使是一个大的数据集,他们一次只下载相关的项目,当你排序、翻页等时,他们会加载更多的内容。因此,可以有数百万行,但实际上一次只能处理一个非常小的子集 如果您使用谷歌惰性加载,您会发现很多示例。如果地图图层的数据很大,您可能需要考虑以下几个

如何通过HTTP有效地发送大量地图数据供客户端渲染?似乎有一种比提供一个更好的方法。我很好奇像Apartments.com或Foursquare这样的大型网站是如何在“需要知道”的基础上提供地图数据的。

通常,这些大型网站会“懒散地加载”地图数据。基本上,这意味着即使是一个大的数据集,他们一次只下载相关的项目,当你排序、翻页等时,他们会加载更多的内容。因此,可以有数百万行,但实际上一次只能处理一个非常小的子集


如果您使用谷歌惰性加载,您会发现很多示例。

如果地图图层的数据很大,您可能需要考虑以下几个选项:

  • 一次只能传输一个屏幕的数据量。(使用这种方法,在屏幕周围包含一个缓冲区也很有用,这样当用户平移一小段距离时,您就不必刷新数据了。)我在以前的项目中使用过这种方法,对于低密度到中等密度的层也很好

    您可能希望为密集层引入缩放触发器,以避免渲染过多。编写基于AJAX的层系统相对简单。我们的结果是几十行,主要涉及响应地图缩放和移动事件,如果用户发现未加载的区域,则使层无效,以及处理对返回GeoJSON的web服务的AJAX请求

    显然,您还必须处理传入感兴趣的空间边界的问题,但是所有空间数据库都支持只请求整个数据集的一小部分。如果您有性能问题,您可能必须使用空间索引-例如,我必须对存储在SQL Server中的非常密集的层进行一些调整

  • 根据缩放级别对地图数据进行聚类。尽管现代web映射引擎功能强大,但当您试图在一个图层上渲染数千个标记时,即使是最好的引擎也会变得很慢。使用群集将元素紧密地组合在一起,提高性能并创建外观更清晰的地图。这是一个很好的例子

  • 如果所有其他操作都失败,则可以尝试使用UTFGrid方法对交互层数据进行基于平铺的渲染。这会将基础地图数据分割成统一大小的平铺(比如256x256像素),并且在幕后将数据建模为角色网格。例如,“X”可以对应于某个种群密度。创建这些网格的成本相对较高,但如果数据是静态的,它们非常容易进行激进的缓存;您甚至可以预先生成整个地图的UTFGrid数据

  • 这里有一个很好的UTFGrids介绍:


    Mapnik和Tilestache可以从给定的多边形+数据源生成UTFGrid,或者编写自己的UTFGrid相对容易。

    谢谢。这绝对是我想要的。我发现了一些延迟加载谷歌地图本身的例子,但是我还没有发现太多关于延迟加载标记的内容。如果您碰巧对此有更多了解,请与我们分享。您可以根据您的使用情况尝试分页:-如果您需要延迟加载它们,您可能需要通过自定义算法通过地理编码来完成。您对如何使用Node和MongoDB实现选项1有何想法或参考?(例如:从前端发送边界和缩放层,并获取特定视图边界的geojson特性)