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

转载http://www.dljs.net/showart.asp?art_id=10636

了解下矢量,方便以后用GDAL进行转

5.4 矢量数据向栅格数据的转换

 

    矢量数据向栅格数据转换时,首先必须确定栅格元素的大小。即根据原矢量图的大小,精度要求及所研究问题的性质,确定栅格的分辨率。如把某一地区的矢量数据结构的地形图向栅格数据转换时,必须考虑地形的起伏变化,当该地区的地形起伏变化很大时(如黄土高原丘陵沟壑区),必须选用高的分辨率,否则无法反映地形变化的真实情况。又如当你把矢量数据向栅格数据转换后,希望同TM卫星图象匹配时,应尽量考虑同TM的分辨率相同,以便进行各种处理。

    此外,必须了解矢量数据和栅格数据的坐标表示。有时,矢量数据的基本坐标是直角坐标,原点为图的左下方;而栅格数据的坐标是行列坐标,原点在图的左上方。在进行两种坐标数据转换时,通常使直角坐标的x,y轴分别同栅格数据的行列平行。

    矢量数据和栅格数据的坐标转换关系如图5-11所示,其转换公式为:

    式中:△X,△Y分别表示每个栅格单元的边长。

 

 

    xmax,xmin分别表示矢量坐标中x的最大值和最小值。

    ymax,ymin分别表示矢量坐标中y的最大值和最小值。

    I,J 分别表示栅格的行数和列数。

    例如:已知某一地区x方向为15km, y方向为 30km,现要把该地区的地块图转成栅格数据,要求栅格分辨率为30m×30m,则由式(5-4),可知:

    5.4.1 基本要素的转换

    由于矢量数据的基本要素是点、线、面,因而矢量数据向栅格数据的转换实质上是解决点、线和面数据的转换。

    一、点的转换

    点的转换实质上是将点的矢量坐标转换成栅格数据中行列值i和j,从而得到点所在栅格元素的位置。其中:

    Integer 表示对运算值取整。

    x,y 为所求点在矢量坐标下坐标值。

    △x,△y 分别为每个栅格单元对应边长。

    ymax,xmin 表示矢量数据的y最大值及x最小值。

    i,j 为所求点所在栅格坐标中行与列值。二、线的转换

    由于曲线可用折线来表示的,也就是当折线上取点足够多时,所画的折线在视觉上成为曲线。因此,线的变换实质上是完成相邻两点之间直线的转换。若已知一直线AB其两端点坐标分别为A(x1,y1)和B(x2,y2),则其转换过程不仅包括坐标点A,B分别从点矢量数据转换成栅格数据,还包括求出直线AB所经过的中间栅格数据。其过程如下:

    1.利用上述点转换法,将点A(x1,y1),B(x2,y2)分别转换成栅格数据,求出相应的栅格的行列值。

    2.由上述行列值求出直线所在行列值的范围。

    3.确定直线经过的中间栅格点。若从直线两端点转换中,求出该直线经过的起始行号为i1,终止行号im,其中间点行号必定为i2,i3……im-1。现在的问题是求出相应行号相交于直线的列号,其步骤如下:

    1)求出相应i行中心处同直线相交的y值

    2)用直线方程求出对应y值的点的x值:

    3)从x,y值按公式(5-5)求出相应i行的列值j:

    如上不断求出直线所经过的各行的列值,最后完成直线的转换。

    曲线的转换或多边形轮廓的转换实质上是通过直线转换而成的。但对面数据而言,在转换同时还需要解决面域数据(多边形数据)的填充。

 

 

    三、区域填充

    在矢量数据结构中,通常以不规则多边形来表示区域,对于多边形内填充的晕线或符号,只是图形输出的表示方法,它并不作为空间数据参加运算。

    矢量数据转成栅格数据是通过矢量边界轮廓的转换实现的。在栅格数据结构中,栅格元素值直接表示属性值。因此,当矢量边界线段转换成栅格数据后,还须进行面域的填充。

    从计算机图形学的角度看,区域填充有很多算法,但基本上分两大类:一类是适合光栅扫描设备的算法,如种子填充法;另一类是还适合画线式设备的算法,如射线法。不论哪种算法,其关键是判断哪些点或栅格单元在多边形之内,哪些点在多边形之外。

    1.射线法 该法中常用水平线扫描(或垂直线)法来判断一点是否在区域内。假若有一疑问点P(x,y),要判断它是否在多边形内,可从该疑问点向左引水平扫描线(即射线),计算此线段与区域边界的相交的次数c,如果c为奇数,认为疑问点在多边形内;c为偶数,则疑问点在多边形外。如图5-13(a)所示。为了方便起见,利用上述原理,可直接作一系列水平扫描线,求出扫描线和区域边界的交点,并对每个扫描线交点按X值的大小进行排序,其两相邻坐标点之间的射线在区域内。如图5-13(b)中扫描I1中x1x2段,扫描线I2中x′1x′2,x′3x′4段均在区域内。但上述情况中常出现一些例外,称奇异性。如图5-14(b)中射线I1,I2分别遇到了极值点P、P′,从而可能出现判断错误。对这种情况应采用邻点分析法区分出极值点。当用直线段逼近曲线时,极值点必定是两条直线的交点。如图5-14(a)中P1 、P2点。但二直线的交点不一定是极值点,如点P3,P4。为此,需要判断与顶点相交的两个直线段是否在扫描线的同一侧。若在同一侧为极值点,否则是非极值点。这样,当扫描线遇到多边形顶点时分两种情况:一种是该顶点为极值点,另一种是非极值点。对极值点看作2个同值交点,对非极值点看作一个交点,从而解决奇异性。

 

 

 

 

    这样,增加了射线法的复杂性,为此出现了简化方法。高端点下移射线法就是一个例子。这种算法是采用坐标修正法来简化算法。它对组成多边形的每条直线的高端点y值坐标进行负修正,修正值根据设备和系统规定的精度和容差值确定,这样避开了上述奇异性。如图5-15所示多边形对每条直线y值高端点坐标进行负修正后形成如粗线所示的图。这时各扫描线同原边界点的交点如图中所示,从而避开了奇异点。这种求交法也称“上闭下开”法。即在二直线的交点处,扫描线上面的边与该扫描线相交的点有效,扫描线下面的边与该扫描线相交的交点无效,当扫描线与多边形边重合时不作求交运算。

    2.边界点跟踪法 这是另一种填充法,该法从边界上某一栅格单元开始按顺时针方向跟踪边界上各栅格,(对多边形中岛则按逆时针方向跟踪,使岛内不被填充)。这里将跟踪的每个栅格分别赋予字符R,L或N,

    其中R表示该栅格同相邻象素的行数不同,且行数增加的单元。

    L表示该栅格同相邻象素的行数不同,且行数减少的单元。

    N表示该栅格极值单元或相邻单元行数相同的单元。

    最后,逐行扫描根据填充字符值,填充L→R之间的栅格。如图5-16所示。

图5-16 边缘跟踪法填充

    5.4.2 边界代数法

    矢量向栅格转换的关键是对矢量表示的多边形边界内的所有栅格赋予多边形编码,形成栅格数据阵列。为此需要逐点判断与边界关系,边界代数法不必逐点判断同边界关系即可完成矢量向栅格的转换。这时,面的填充是根据边界的拓扑信息,通过简单的加减运算将边界位置信息动态地赋予各栅格的。实现边界代数法填充的前提是已知组成多边形边界(弧段)的拓扑关系,即沿边界前进方向的左右多边形号。

    图5-17为边界代数法的填充过程。这里假定沿边界前进方向y值下降时称下行,y值上升时称上行。填充值基于积分求多边形面积的思想,上行时填充值为左多边形号减右多边形号,下行时填充值为右多边形号减左多边形号,将每次填充值同该处的原始值作代数运算得到最终填充属性值。

    图5-17(a)中,N1,N2弧上行,左多边形号减右多边形号为0-1=-1。在弧段N1,N2左边栅格值为-1。

    图5-17(b)中N2,N3弧下行,右多边形号减左多边形号为2-0=2。在弧段N2,N3左边栅格值加2。

    图5-17(c)中N3,N1弧下行,右多边形号减左多边形号为3-0=3。在弧段N3,N1左边栅格值加3。

    图5-17(d)中N1,N4弧上行,左多边形号减右多边形号为1-3=-2。在弧段N1,N4左边栅格值加-2。

    图5-17(e)中N4,N2弧上行,左多边形号减右多边形号为1-2=-1。在弧段N4,N2左边栅格值加-1。

    图5-17(f)中N4,N3弧下行,右多边形号减左多边形号为3-2=-1。在弧段N4,N3左边栅格值加1。最后得到如图所示属性值。

 

 

    本例中的每条弧段均为单值上行弧或下行弧。实际上,有时一条弧段可能既包含上行段,亦包括下行段,这时将该弧段分成上行段,下行段分别处理即可。

    本算法可不考虑边界存放顺序及搜索轨迹,每条边界只计算一次,免去了边界的重复运算。因算法简单,可靠性高,运算速度快,广泛用于微机地理信息系统中。


  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值