GIS中将矢量数据转换删格数据算法

在GIS系统中,删格数据和矢量数据相互转化是一项重要工作,在本文中将介绍GIS中常见的矢量数据转换删格数据算法。

点的栅格化

矢量数据中的点坐标用X、Y来表示,而在栅格数据中,像元的行、列号用I、J来表示。设O为矢量数据的坐标原点,O′(Xo,Yo)为栅格数据的坐标原点。A为制图要素的任一点,则该点在矢量和栅格数据中可分别表示为(X,Y)和(I,J)。 DX、DY分别表示一个栅格的宽和高,[]表示取整。

线的栅格化

线的栅格化主要有两种方法:八方向栅格化和全路径栅格化

八方向栅格化

设1和2为一条直线段的两个端点,其坐标分别为(X1,Y1)、(X2,Y2)。先按点的栅格化方法,确定端点1和2所在的行、列号(I1、J1)及(I2,J2),并将它们“涂红”。然后求出这两点位置的行数差和列数差。若列数差大于行数差,则逐列求出本列中心线与过这两点的直线的交点:

全路径栅格化

全路径栅格化是一种“分带法”,即按行计算起始列号和终止列号(或按列计算起始行号和终止行号)的方法。基于矢量的首末点和倾角a的大小,可以在带内计算出行号或列号(Ia,Ie或Ja,Je):

当|X2-X1|<|Y2-Y1|时,计算行号Ia,Ie;

当|X2-X1|≥|Y2-Y1|时,计算列号Ja,Je。

下面给出|X2-X1|≥|Y2-Y1|时的计算过程。

设当前处理行为第i行,像元边长为m,转换步骤为:

面域的栅格化

面的栅格化也有两种方法:种子点填充算法和扫描线种子点填充算法

种子点填充算法

可采用递归方式实现种子点填充算法:对符合填充条件的种子点近邻点赋以和种子点相同的象素值,并以它们作为新的种子点再进行同样的近邻填充,直至不再产生新种子。

算法表示成:

Seed-Fill-4(x,y,con,value)
{
  if (pixel(x,y)<>con)
  {
    putpixel(x,y,value);
    for (i=-1,i<=1;i=i+2)
      Seed-Fill-4(x+i,y,con,value);
     for (i=-1;i<1;i=i+2)
      Seed-Fill-4(x,y+i,con,value);
  } 
}

算法中,con为面域的边界色,value为欲填充色。

扫描线种子点填充算法

扫描线种子点填充算法是将每个扫描行中连续待填充段作为一个处理单位,因而减少了对栈空间大小的需求。其算法过程是:

① 选择一个种子点Seed(x,y),并将其存入栈内。

② 若栈已空,算法结束,否则执行③。

③ 从栈中取出要填色的像素,对在同一扫描线上与该点相连的所有需要填色的点进行填色操作,记下进行填色的最左和最右位置: Xleft和Xright。

④ 对③的上一行和下一行扫描,在Xlef≤x≤Xright范围内,考察是否全是边界点或已被填色的点,若不完全是,则将要填色的每一段最右位置作为新的种子点存入栈。

⑤ 回到②。

GIS空间矢量数据的压缩编码方法 GIS中栅格数据转换矢量数据算法

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

已有 3 条评论

  1. 主席
    1#
    主席  · 2014-02-21 00:53

    牛逼啊!!!!!

      1. 木丁西
        木丁西  · 2014-02-21 01:21

        嘿嘿,主席过奖了~

  2. 莹子
    2#
    莹子  · 2016-05-15 19:17

    联系性强

发表评论