道路热力图制作小结

原文发布时间:2015-04-13 09:58:34

作者:星空      

接到制作热力图的这个任务时,我还对热力图知之甚少。于是有很长一段时间,我都处在查找文献和看文献的状态中。但是,在查找的文献中,涉及道路热力图的文章很少。我不得不寻求其他的方式来解决这个问题。经过一段时间的摸索,得到一些结果,现在把它贴出来,也是希望能够和大家分享。废话不多说,马上给出下面的热力图制作方法。

方法很简单,就是构建三角网,生成等高线,利用等高线的间隔划分区域,然后进行颜色渲染。

首先,我们来看看制作此热力图的一些需求:

?  客观反映道路的真实情况——显示结果与实际情况吻合

?  反映某个区域内的整体道路情况——显示某个区域内的交通状况,而不仅仅局限于某条道路

?  热力图充分地圆滑——尽量减少尖锐的拐角

?  采用渐变色对颜色进行渲染——主要用红黄绿三色来标注

现有的数据库有下面的形式:

 对于一个城市的道路系统来说,我们可以认为道路线是连续的,如果我们将道路上的车流看做是连续的话,一个很自然的想法是利用Delaunay三角剖分来反映道路的拥堵情况。当我们直接带入道路线并且用TINGenerator

直接进行三角剖分,我们得到了非常糟糕的结果(以部分道路线为例):

分析上图,我们可以看到这里存在几个问题:

? 三角剖分中存在狭长的三角形——狭长的三角形会导致生成的等高线过分远离道路线,并且形成尖角,得到的效果不佳(图2)

?  道路线穿过三角网——这会导致穿过三角网的道路信息的丢失,插值偏离原有的道路值(图3)

为了解决这个问题,我们放弃非规则三角网(TIN),采用规则三角网进行估计和插值。

主要的制作内容分三部分完成:

 一、构建规则三角网如下图(图4):

模板实现:

  这里,我们对整个道路边界(_xmin, _xmax, _ymin, _ymax)作了一个缓冲,目的是防止边界点不存在邻点,导致无法输出完整的闭合等高线。

二、构建好三角网以后,就是对三角网点进行插值估计。我们将每个估计值作为三角网点的z坐标值。未估计的点默认为0。这里给出了两种方式:

?  给离道路最近的三角点赋值

   我们对于每条道路寻找离它最近的点,并且将道路上的相关属性值作为z坐标赋给这些点。

?  给道路附近一定范围内的三角点赋值

在一定的距离权重下,对一定的搜索范围内的点作估值。每个点的影响区域为这个搜索范围内的圆形区域。

    其他的插值方案可以根据具体的需要来设计。 

三、生成带有高程的等高线,渲染渐变颜色。我们需要一个缓慢的过渡来标示道路的拥堵情况,最直观的想法是根据等高线的数值大小来决定拥堵情况:

这里作了三部分部分工作:一是光滑等高线,二是生成面,三是根据生成的面决定渲染颜色。这里,我们用RGB色设置“fme_color”和“fme_fill_color”,得到渐变色。

然后,用ImageRasterizer进行栅格化,如下图:

最后生成栅格图片(给出下面的一个效果图):

将上面的三个部分整合起来,生成转换器:

HotSpot转换器实现功能:接收输入的道路线或者点,输出等高线、规则三角剖分网、三角形、规则三角网表面,三角顶点。

 参数:

Analysis Attribute:待分析属性,也就是,对点进行插值的属性。

Triangular Point Type:选择剖分三角网的类型——一是保留所有的剖分三角网点,二是保留道路附近的部分网点。

Algorithm:估值算法,有SinglePoint和MultiPoint两种,参考热力图制作的第二部分。

Side Length:三角网的边长值。

Search Range:搜索范围。插值点搜索此范围内的道路线进行插值。

Contour Interval:等高线间隔。

Colorizer转换器实现功能:接收输入的等高线,输出经过渐变色渲染后的面。

 参数:

Red:红色区域的分割线,大于Red值的等高线将会被舍弃。

Yellow:红色与绿色区域的分割线。

Green:绿色区域的分割线,小于Green值的等高线将会被舍弃。

Elevation:等高线的高程属性。

以上就是我这段时间以来所作的工作,鉴于上面的方法是对三角剖分点进行估值,所以跟实际的情况是有一部分误差的。我们可以通过减小网格边长来提高插值精度,只是,这会造成时间和存储空间的浪费;若是网格取得太大,插值点远离道路,得到的结果会与实际情况有较大偏差。如果我们只是需要对整体有一个大致的了解,它算是一个不错的解决方案。

进一步的研究:

为解决上述问题,我们可以将三角剖分与比例尺缩放结合起来,得到在不同比例尺下的不同热力图。可以尝试下面的方法:

一、固定三角网点的边长。这里可以选择自己认为合适的边长。

二、改变道路图的比例大小,计算每个点的估计值。

三、每改变一次比例尺,每个点的值都刷新一次。

    这种方式解决了在查看某个区域内的道路状况时,既能减少网格点的生成,又能保证一定的精度。

    若对文章有疑问,可发送邮件至[email protected]提问或讨论。

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/81279885