第四章空间表达变换分析地理空间坐标变换空间表达空间数据转换格式空间尺度变换图形变换4.1.1客观世界的抽象4.1.2地理空间表达的形式4.1.3空间表达的地理意义4.1空间表达Step1Step2Step3•复杂的地理信息•去粗取精,去伪存真•转换成点线面•为点线面编码通过数字化和地理编码过程将现实世界表达为地图•输出地图4.1.1客观世界的抽象GIS的建立过程信息知识图4.2GIS是客观世界的数字模型地理问题认知、概括数字表达数据挖掘模型分析决策支持GIS的空间分析过程客观世界GIS数据库数据结构类型图形表达空间参考系统时空尺度4.1.2地理空间表达的形式数据结构类型◆是GIS中最基本的空间数据表达形式◆包括矢量数据结构和栅格数据结构空间参考系统◆是地理空间数据表达格式与规范的重要组成部分◆是地图制图和GIS数据共享的基础◆包括坐标系统和地图投影系统时空尺度◆实体空间属性在特定的尺度内观察和测量才有效◆在不同空间尺度下遵循不同的规律及体现不同的特征。◆定义了人们观察地球的一种约束,是人类揭示地理现象规律性的关键因素图形表达◆空间位置、空间形状和空间关系等在多数情况下,都用图形来表达◆图形表达更直观、更简便4.1.3空间表达的地理意义现代地理学中很多分支学科理论的发展也印证了空间表达所占据的重要地位。1、认知的桥梁。不同的空间表达是人们对客观世界不同抽象描述的结果,所传递和表达的信息也不同。地理空间表达为地理科学研究与现实世界架设了桥梁,也促使人们从更加开阔的视野、更多的视角来研究和认识地球表层特征空间。2、科研的工具。地理空间的表达绝不仅仅是现在人们所了解和掌握的方式,从宏观到微观,从不同角度、不同方位分析和认知特定地域的空间地理信息,已经成为地球空间信息科学研究的重要内容。地理空间坐标变换空间表达空间数据格式转换空间尺度变换图形变换4.2.1空间数据格式转换的意义4.2.2空间数据格式类型4.2.3空间数据格式转换方法4.2空间数据转换格式意义(1)空间数据获取的手段(2)GIS空间数据处理的重要任务(3)实现数据共享的方法之一4.2.1空间数据格式转换的意义不断地生产和开发各种电子数据产品对现有数据进行改进和开发数据种类越来越多由于数据结构的优缺点,往往设计几种可接收的数据格式,根据要求进行取舍,从而需要转换。由于不同的硬件平台、GIS软件平台、数据格式、数据标准、参考系统、数据的组织方法及学术经济和立法的障碍,数据共享不易。数据转换技术是实现共享最简单的方法之一1.矢量数据结构XYx1y1x2y2xiyixnyn4.2.2空间数据格式类型矢量结构2.栅格结构i比较内容矢量结构栅格结构数据结构复杂简单数据量小大图形精度高低图形运算、搜索复杂、高效简单、低效软件与硬件技术不一致一致或接近遥感影像格式要求比较高不高图形输出显示质量好、精度高,但成本比较高输出方法快速,质量低,成本比较低廉数据共享不易实现容易实现拓扑和网络分析容易实现不易实现3.矢量结构与栅格结构的比较矢量结构与栅格结构的相互转换矢量数据结构向栅格数据结构的转换栅格数据结构向矢量数据结构的转换4.2.3空间数据格式转换方法1.矢量数据向栅格数据的转换(1)点对象的栅格化栅格点坐标与矢量点坐标关系xyO′(X0,Y0)JyxOIPDXXXJDYYYI0011(2)线对象的栅格化①八方向栅格化12①八方向栅格化在每行或每列上,只有一个像元被“涂黑”。●P(Xm,Ym)●P(X1,Y1推算中间点(i2,im-1)行号所对应的列号(a)求出相应i行中心处同直线相交的Y值Y=Ymax-△Y(i–1/2)(b)用直线方程求出对应Y值点的X值(c)对对应点的X值,按转换公式,求出相应的列值j(i1,j1)(im,jm)22Bresenham算法该算法原来是为绘图机设计的,但同样适合于栅格化。该算法构思巧妙,只需根据由直线斜率构成的误差项的符号,就可确定下一列坐标的递增值。根据直线的斜率,把直线分为8个卦限。下面举斜率在第一卦限的情况为例,其余卦限的情况类似。该算法的基本思路可描述为:若直线的斜率为1/2≤△y/△x≤1,则下一点取(1,1)点,若0≤△y/△x<1/2,则下一点取(1,0)点。23在算法实现时,令起始的误差项为e=-1/2,然后在推断出下一点后,令e=e+△y/△x,若e≥0时,e=e-1。这样只要根据e的符号就可确定下一点的增量,即:若e≥0,取(1,1)点若e<0,取(1,0)点例如,一直线的斜率为1/3,起始点:e0=-1/2,取点0第1点:e1=-1/2+1/3=-1/6取点①第2点:e2=-1/6+1/3=1/6且e2’=-5/6;取点②第3点:e3=-5/6+1/3=-1/2取点③第4点:e4=-1/2+1/3=-1/6取点④第5点:e5=-1/6+1/3=1/6且e2’=-5/6;取点⑤第6点:e6=-5/6+1/3=-1/2取点⑥依次进行,直到到达直线的另一端点。这种算法不仅速度快、效果好,而且可以理论上证明它是目前同类各种算法中最优的。为避免浮点运算,可令初值e’=e*2*△x当△x≥0时与e同号当e’0时,y方向获增量1,即令e’=e’-2*△x;一般情况下e’=e’+2△y起始点:e=-1/2,即e’=-3第2点:e=-1/2+1/3=-1/6,e’=-3+2△y=-1取点①第3点:e=-1/6+1/3=1/6,即e’=-1+2=1,取点②且e=-5/6,e’=-5;5623401②全路径栅格化当<时,计算行号Ia、Ie;当≥时,计算列号Ja、Je。按行计算起始列号和终止列号(或按列计算起始行号和终止行号)的方法12XX12XX12YY12YY(a)计算矢量倾角的正切)/()(tan1212XXYY(b)计算起始列号Ja(c)计算终止列号Je转换步骤:i行到o点的距离为(i-1)mi行到Y1的距离为miyy)1(011/)tan)1((0101mxxYmiYJa1/)tan(0101mxxYmiYJe设当前处理行为第i行,像元边长为m,(d)将第i行从Ja列开始到Je列为止的中间所有像元“涂黑”;(e)若当前处理行不是终止行,则把本行终止列号Je作为下行的起始列号Ja,行号i增加1,并转到第一步,计算矢量倾角的正切;否则本矢量段栅格化过程结束。O(x0,y0)i2(x2,y2)1(x1,y1)1]tan[0110mxximyyJa1]tan)1([0110mxxmiyyJeO(x0,y0)i2(x2,y2)1(x1,y1)八方向栅格化与全路径栅格化的比较给定下图的条件,像元边长为1,利用全路径栅格化算法,判断是按行计算起止列,还是按列计算起止行,然后任选某一行(或列)进行计算。O(3,11)B(10.7,7.8)A(4.6,4.3)(3)面对象的栅格化①内部点扩散算法②复数积分算法③射线算法④扫描算法⑤边界代数算法31(1)内部点扩散算法该算法由每个多边形一个内部点(种子点)开始,向其八个方向的邻点扩散,判断各个新加入点是否在多边形边界上,如果是边界上,则该新加入点不作为种子点,否则把非边界点的邻点作为新的种子点与原有种子点一起进行新的扩散运算,并将该种子点赋以该多边形的编号。重复上述过程直到所有种子点填满该多边形并遇到边界停止为止。扩散算法程序设计比较复杂,并且在一定的栅格精度上,如果复杂图形的同一多边形的两条边界落在同一个或相邻的两个栅格内,会造成多边形不连通,这样一个种子点不能完成整个多边形的填充。构造的复变函数为01)(zzzf其中z0表示待判断的点。z0点位于区域D之外(2点),那么函数(1)式在区域D内处处解析。根据柯西-古萨定理,如果函数(1)式在单连通域D内处处解析,那么函数(1)式沿预计区域边界C的积分为零,即0)(czfz0点位于区域D之内(1点),那么函数(1)式在区域D内z0点不解析。以z0(1点)为圆心,以r为半径(r可以足够小,不与C相交(,作闭路圆C1。根据复合闭路积分定理得1)()(cczfzf这样沿预计区域边界C的复变函数积分转化为沿圆C1的积分(图5)。C1的方程可写作ididreiredzzzzfiicc21)(202001120,0irezz所以:33(3)射线算法射线算法可逐点判断数据栅格点在某多边形之外或在多边形内,由待判点向图外某点引射线,判断该射线与某多边形所有边界相交的总次数,如相交偶数次,则待判点在该多边形外部,如为奇数次,则待判点在该多边形内部。采用射线算法,要注意的是:射线与多边形边界相交时,有一些特殊情况会影响交点的个数,必须予以排除。射线算法34射线算法的特殊情况35(4)平行线扫描法与铅垂线跌落法射线算法的改进,将射线改为沿栅格阵列列方向或行方向扫描线,判断与射线算法相似。省去了计算射线与多边形边界交点的大量运算,大大提高了效率。XYRfebagdcMN36(5)边界代数算法(BAF-BoundaryAlgebraFilling)边界代数多边形填充算法是一种基于积分思想的矢量格式向栅格格式转换算法,它适合于记录拓扑关系的多边形矢量数据转换为栅格结构。转换单个多边形:设多边形编号为a,初始化的栅格阵列各栅格值为零,以栅格行列为参考坐标轴,由多边形边界上某点开始顺时针搜索边界线,当边界上行时,位于该边界左侧的具有相同行坐标的所有栅格被减去a;当边界下行时,该边界左侧(前进方向看为右侧)所有栅格点加一个值a,边界搜索完毕则完成了多边形的转换。单个多边形的转换37事实上,每幅数字地图都是由多个多边形区域组成的,如果把不属于任何多边形的区域(包含无穷远点的区域)看成编号为零的特殊的多边形区域,则图上每一条边界弧段都与两个不同编号的多边形相邻,按弧段的前进方向分别称为左、右多边形,对于这种多个多边形的矢量向栅格转换问题,只需对所有多边形边界弧段作如下运算而不考虑排列次序:当边界弧段上行时,该弧段与左图框之间栅格增加一个值(左多边形编号减去右多边形编号);当边界弧段下行时,该弧段与左图框之间栅格增加一个值(右多边形编号减去左多边形编号)。38000000000000005550000002555500002255552000225552200222222220022220000002222000000000000000000000000000000000000000000000-3-3-3-3000000-3-3-3-3000000-3-3-3-30000000000000000000000000000000000000000000000000000000039000000000000005550000002555500002255552000225552200222222220022220000002222000000000000000000000000000000000000000000000-3-3-3-3000000000033330000003330000000000000000000000000000000000000000000000000000000000000000000000000-3-3-3-3000000-3-3-3-3000000-3-3-3-3000000000000000000000000000000000000000000000000000000004000000000000000000000-5-5-5-3000000-2-200333300-2-200333000-2000000000-2000000000-20000000000000000000000000000000000000000000000000-3-3-3-300000000003333000000333000000000000