『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

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

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

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

 

     点的栅格化

 

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

 

 

 

     线的栅格化

 

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

 

     八方向栅格化

 

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

 

 

 

     全路径栅格化

 

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

 

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

 

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

 

     下面给出|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;i1;i=i+2)

      Seed-Fill-4(x,y+i,con,value);

  }

}

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

 

    扫描线种子点填充算法

 

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

 

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

 

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

 

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

 

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

 

    ⑤ 回到②。

      京ICP备2025132830号-1 京公网安备 号