首页 百科知识 矢量数据结构向栅格数据结构的转换

矢量数据结构向栅格数据结构的转换

时间:2022-10-09 百科知识 版权反馈
【摘要】:在一般情况下,城市用地、城市道路、城市基础设施等数据都是以矢量数据方式进行处理的,但矢量数据直接用于多种数据复合分析比较复杂,相比之下利用栅格数据模式进行处理则容易得多,加之DEM数据及从遥感图像中获得土地覆盖等数据都表现为栅格数据,因此矢量数据有时要转换成栅格数据,以方便相关分析操作。两种数据变换时,要对两种数据的坐标系统进行转换。

4.5.3 矢量数据结构栅格数据结构的转换

在一般情况下,城市用地、城市道路、城市基础设施等数据都是以矢量数据方式进行处理的,但矢量数据直接用于多种数据复合分析比较复杂,相比之下利用栅格数据模式进行处理则容易得多,加之DEM数据及从遥感图像中获得土地覆盖等数据都表现为栅格数据,因此矢量数据有时要转换成栅格数据,以方便相关分析操作。

矢量数据的基本坐标是直角坐标(x,y),其坐标原点一般取图的左下角。栅格数据的基本坐标是行和列(i,j),其坐标原点一般取图的左上角。两种数据变换时,要对两种数据的坐标系统进行转换。矢量数据的基本要素是点、线、面,因而只要实现点、线、面的转换,各种线画图形的变换问题基本上都可以得到解决。

1.点的栅格化

点的变换十分简单,只要这个点落在哪个网格中,它就属于哪个网格元素(如图4-20所示)。其行、列坐标i,j可由下式求出:

img49

图4-20 点、线实体栅格化示意图

i=1+Int[(y0-yP)/Dy

j=1+Integer[(xP-xO)/Dx

其中xP、yP为矢量点位P的坐标,xO、yO为左上角原点坐标,Dx、Dy则表示栅格单元的二个边长。

在这里,设I,J为全图网格的行数和列数,它们可以由原地图比例尺根据地图对应的地面长宽和网格分辨率相除求得,并取整数。则Dx、Dy和I,J的关系为:

Dx=(xmax-xmin)/J

Dy=(ymax-ymin)/I

其中,两个值xmin,xmax表示全图x坐标的最小值和最大值;ymin,ymax表示全图y坐标的最小值和最大值。

2.弧段数据的栅格化方法

由于曲线由多条直线构成,因此只要说明了一条直线段如何被栅格化,对任何曲线的栅格化过程也就清楚了。在此,设一条直线段的两个端点坐标分别为(x1,y1)、(x2,y2)。先按上述点的栅格化方法,确定两个端点所在的行、列号(I1、J1)及(I2,J2),并将属性值赋予它们。然后求出这两点位置的行数差和列数差,在此出现两种可能,分别是:

第一种情况,若行数差大于列数差,则逐行求出每行中心线与过这两点的直线的交点,在此,首先确定每行中心线的y坐标值为:

y中心线=ymax-Dy×(I-1/2),

依据y中心线坐标值求出中心线与该直线交点的x坐标,计算公式为:

x=(y中心线-y1)×m+x1

其中m=(x2-x1)/(y2-y1)

然后依据x坐标值获得该交点的列号,从而确定该栅格的位置,并把该线的属性赋予该栅格。

第二种情况是:若行数差小于等于列数差,则逐列求出本列中心线与过这两个端点的直线的交点,在此,首先确定每行中心线的x坐标值为:

x中心线=xmin+Dx×(J-1/2)

依据x中心线坐标值求出中心线与该直线交点的Y坐标,计算公式为:

y=(x中心线-x1)×m+y1

其中m=(y2-y1)/(x2-x1)

然后依据Y坐标值获得该交点的行号,从而确定该栅格的位置,并把该线的属性赋予该栅格。

如图4-20所示直线AB,设其两个端点的行列号已经求出,行号分别为2和7,列号分别为2和4,其行号差大于列号差,则逐行求出每行中心线与过这两点的直线的交点,由于已知其中间网格的行号为3、4、5、6,则按照上述公式可先计算第3行中心线的y坐标,再按公式计算出该列中心线与直线交点的x坐标,进而求出相应列号,并设定像元属性。然后依次求出直线经过的每一网格单元,并用直线的属性值去填充这些网络,就完成了该段直线的转换,再经过分段直线的连续运算,即可完成曲线或多边形边界的栅格化转换。

3.面域的栅格化

面域的栅格化包括扫描法、内部扩散法、填充法等。面域的栅格化最简单方法是在一个区域内对所有点进行判别,即逐个像素点判别其是否在多边形内部,这样来确定位于多边形内部的像素点的集合。

逐点判别方法虽然简单,但不可取,主要原因是速度太慢,常用算法是扫描线算法。扫描线算法充分利用了扫描线连贯性原理,避免了对像素点的逐点判别,有效地选择像素点来进行多边形的填充。算法的基本思想是:对于一个给定的多边形,用一组水平或者垂直的扫描线进行扫描,对每一条扫描线均可求出与多边形的交点,这些交点将扫描线分割成落在多边形内部的线段和落在多边形外部的线段,并且二者相间排列。于是,将落在多边形内部的线段上的所有像素点赋予给定的属性值。可见,算法中不需要检验每一个像素点,而只考虑与多边形边线相交后被分割的扫描线段。

内部点扩散法是由一个内部的种子点,向其4个方向的邻点扩散。判断新加入的点是否在多边形边界上,如果是,不作为种子点,否则当作新的种子点,直到区域填满,无种子点为止。该算法比较复杂,而且可能造成阻塞而使扩散不能完成,若多边形不完全闭合时还会扩散出去。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈