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范围内,考察是否全是边界点或已被填色的点,若不完全是,则将要填色的每一段最右位置作为新的种子点存入栈。
⑤ 回到②。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
牛逼啊!!!!!
嘿嘿,主席过奖了~
联系性强
栅格数据的栅字是不是打错了
谢谢,已经修改