浅谈SuperMap iObjects制作热力图

作者:xinxin

众所周知,热力图是通过不同的颜色来表示某种事物或事件在研究区域内发生的频率,或者说体现的密集度,这个使我们从宏观角度更清晰的了解事物的分布情况。从网上收集的资料来看更多的是采用HeatMap.jp方法在B/S上实现,如百度热力图主要是反应某区域道路的拥挤情况(图1):
浅谈SuperMap iObjects制作热力图_第1张图片
图1:百度热力图
那么在C/S上是否能实现,超图的产品又是否能实现呢?答案是肯定的,超图的产品可以通过SuperMap iObjects .NET/Java来实现,下面我将通过SuperMap iObjects Java组件来实现在C/S中热力图的制作。
1、 数据准备
根据你项目需求来准备数据,如果想做道路拥挤热力图需要准备线数据集;如果你想做人口分布热力图就需要准备点数据集。由于热力图是宏观的表达,结果分析中是通过每个对象所占的权重来体现的,所以准备数据时必须要有一个字段(不能为文本型)来存储代表对象权重的数据,比如道路拥挤热力图的线数据集中可以用Count(int型)字段来存储某段时间内各条道路上通过的车流量/车道数;还比如如果你想做人口分布热力图可以将建筑抽象为点对象,用Count字段存储每个建筑居住的人口数等等。由于我是制作道路拥挤热力图所以我准备了线数据,如图2:
浅谈SuperMap iObjects制作热力图_第2张图片
图2:线数据准备
2、 初步得到道路拥挤热力图
数据准备完后,通过调用SuperMap iObjects Java中的jar包初步得到道路拥挤热力图,是一个栅格数据集,图3:

图3 道路拥挤结果分析图
关键代码如下:
浅谈SuperMap iObjects制作热力图_第3张图片
PS: densityAnalystParameter.setSearchRadius()中参数的单位和数据集的单位是一致的,如果你的数据集是地理坐标系,单位就是度,分辨率的设置可以通过范围和希望生成的栅格行列数来确定。
3、 热力图修饰
步骤2中的结果热力图的栅格值段用什么颜色渲染和一共用几种颜色渲染都是系统默认的,有时和项目中的要求或者行业常用颜色不一样,可以通过栅格对照表来重新设置;另外为了使生成的热力图不覆盖下面的数据,可以设置热力图的透明度,这样看起来效果更好。关键代码如下:

分析结果图4:

图4:修饰后的热力图
4、 热力图的动态变化
如果你想实现的热力图有一个动态变化的过程,你需要准备多份不同时间段的数据,比如研究某个区域一天内早8点到晚6点道路的拥挤热力图,需要准备该天内从8点起每隔1小时的线数据(主要是数据集中Count字段的变化),重复步骤2、3,得到不同时间点的道路拥挤热力图,达到动态宏观统计的目的。

你可能感兴趣的:(supermap,超图)