生成像SpatialKey这样的密度/热图

时间:2010-02-05 17:22:08

标签: maps geospatial spatial postgis heatmap

SpatialKey生成了一些非常漂亮的热图,我们正在研究为内部项目实现这一点所涉及的内容,以便可视化大量的点。我正在寻找关于从哪里开始的一些想法的反馈(这只是一个非常有趣的问题)。

SpatialKey heatmap http://img697.imageshack.us/img697/7964/resolutiondays508x17550.jpg

我们知道他们正在使用Flash,从我们可以看出,热图是交互式的,而不是从平铺服务器渲染。我们首先猜测这是如何实现的,即服务器为他们的Flash客户端提供一个网格 - 每个单元都有一个由服务器计算的计数。然后,Flash客户端根据网格中的单元格值进行一些插值,以生成您在上面看到的漂亮输出。

在这个阶段,我只对如何有效地在服务器端生成网格感兴趣(如果我们对它们的实现的假设是正确的)。它似乎涉及:

  1. 执行查询当前地图范围内的内容
  2. 为这些边界内的每个单元格执行聚合子查询(执行上面示例中的计数,求和或平均值)。
  3. 以理智的网格分辨率在多个缩放级别执行此操作,看起来您需要自定义空间索引才能提高效率。

    任何接受解释替代路线的人?如果重要的是,我们习惯于将我们的数据存储在PostgreSQL中,并使用PostGIS进行空间索引,但我愿意尝试任何事情。

2 个答案:

答案 0 :(得分:5)

只是猜测,我想他们已经在客户端的Flash中实现了一个GIS库,并使用它来将纬度和经度坐标投影到像素空间中。然后它们按像素聚合以确定每个像素的“高度”并渲染它就像渲染圆圈一样,但使用带透明度的渐变填充,渐变填充的开始和结束颜色由高度确定像素。多个圆圈叠加在一起将创建更亮的像素。

另一种方法可能是在灰度中执行此操作,然后将亮度值映射到颜色标度。这可能是最有效的。

我们销售更传统的树形图热图,以便在可视化分析应用程序中集成使用(例如:热图SDK),现在还有地理热图,用于着色区域。我们阅读标准的ESRI Shapefile贴图,并在客户端进行所有投影和渲染(在Java中,不是Flash,但是相同的概念)。我认为SpatialKey正在做同样的事情,因为它们支持区域填充渲染,如果您使用像Google Maps这样的磁贴服务器,则无法真正完成。

我们还没有像这样做密度热图,但是使用静态图像作为背景进行了几次测试。如果您想了解更多信息,请告诉我,我可以向我的开发人员询问我们是如何做到这一点的。我知道我们目前正在开发更多基于点的功能,但我不知道密度热图在时间表上的位置。

SpatialKey实际上只是在区域填充热图(即:专题图)和密度热图之间的不同文章上写了一篇好文章。您可以在http://blog.spatialkey.com/2010/02/comparing-thematic-maps-with-density-heatmaps/查看。

如果你确实找到了一种做密度热图的好方法,我会有兴趣了解你是如何做到这一点的,因为它对我们的可视化分析SDK来说是一个有价值的补充。祝你好运。

答案 1 :(得分:0)

MapReduce用于实际的聚合地图总计,以及数据库的地理空间索引 - 用于提供这些MapReduce作业。我正在考虑实现这种完全相同的方法,但是对于接口而不是地图:) MongoDB目前似乎非常适合。