GIS:矢量转栅格⛷️
GIS:矢量转栅格⛷️

GIS:矢量转栅格⛷️

1、矢量点转栅格

关于矢量点转栅格,依次介绍最近邻方法、密度计数方法,让读者对矢量点转栅格有个简单了解。

(1)最近邻算法:该算法,将该栅格单元内是否有点作为栅格的属性值,初始化栅格数据每个栅格单元为0,如果有点,值为1。提前设定栅格参数:栅格单元大小cell_size,并计算行列数,其中栅格单元大小直接决定了分辨率,具体参数要根据具体问题而定!这里设置简单参数,作为算法演示。

(2)密度计数方法

该算法与最近邻算法只有属性存储的本质区别,这里只简单介绍差异点:

此外,还有加权平均、双线性插值、最值等算法…不再介绍。

2、矢量线转栅格

(1)布雷森汉姆算法:布雷森汉姆算法(Bresenham’s Line Algorithm)是1962年IBM的Jack Elton Bresenham发明的直线光栅化算法。核心思想:从起点出发,每一步都要决定下一个栅格选水平方向还是对角方向。

使用该算法处理过程中,会考虑如下八种情况:右上陡、右上缓、左上陡、左上缓、右下陡、右下缓、左下陡、左下缓。在后续代码处理过程中,会利用if分支进行判断,不算复杂。

算法优势:整数运算:仅使用加减法,无需浮点运算。高效快速:每步只需计算决策变量。精确可靠:生成的直线最接近理想直线。支持全方向:通过stepX和stepY支持四个象限。

可见,该算法针对直线栅格化,不仅处理起来简单,而且精度较高,适用范围较广。

(2)矢量曲线转栅格

算法思路:矢量曲线转栅格,将相邻点两两成对,转为99个直线转栅格是最准确的。但是,如果有10000个点呢?那么就需要9999次直线转栅格运算,不得不考虑时间复杂度问题。那么可能会想到,每隔n个点取一对点,这样就降低了时间复杂度问题,但是曲线是有很多特征点来保证曲线的走向,这样很大可能会导致错过特征点,即使进行了栅格化处理,也没有任何意义,因为曲线的走向很可能被改变了!

那么,一个很好的想法浮出:先利用Douglas-Peucker算法提取曲线的特征点,再进行特征点两两成对进行直线转栅格,这样不仅解决了时间复杂度问题,还保留的曲线所有特征点!

DP算法读者可以简单参考如下代码进行了解:

3、矢量面转栅格

步骤1: 栅格化边界(布雷森汉姆算法,注意最后一次的首尾点成边达成闭合)

步骤2: 确定包围盒

步骤3: 遍历包围盒内的所有栅格单元

步骤4: 判断每个栅格单元是否在多边形内部(转角法、射线法)(该思想为射线法)

步骤5: 填充内部栅格单元

(如果多边形较复杂,可以通过DP简化多边形,然后依次进行上述步骤)

可见,矢量面的栅格化只比矢量边栅格化多了一个内部填充部分,核心算法不变。

其中5种面填充算法:

方法核心思想常用程度
种子填充从内部扩散2
扫描线填充一行一行填写4
射线法数交点奇偶4
复数积分绕数1
边界代数边界方向判断2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注