5.2 空间数据的组织方法
5.2.1地理实体及其描述
无论是城市GIS还是数字城市,都是用数字世界来表示现实世界。由于存在于现实世界的各种地理现象复杂且不能直接移入计算机中,需要通过对它们进行观察、抽象、综合取舍,得到实体目标;然后对实体目标进行定义、编码结构化和模型化,最后以数据形式存入计算机内。因此认识地理实体和对实体进行描述是建立现实世界和数字世界之间联系的必要步骤。
抽象是观察和分析复杂事物和现象的常用手段之一。将地理系统中复杂的地理现象进行抽象得到的地理对象称为地理实体或空间实体、空间目标,简称实体。实体是现实世界中客观存在的并可相互区别的事物。实体可以指个体,也可以指总体,即个体的集合。抽象的程度与研究区域的大小、规模有关,如在一张小比例尺的全国地图中,某个城市被抽象为一个点状实体,抽象程度很大;而在较大比例尺的城市地图上,需要将该城市的街道、房屋等组成要素详尽地表示出来,这时城市则被抽象为一个由简单点、线、面实体组成的庞大复杂的组合实体,其抽象程度较前者而言较小。所以说,实体是一个具有概括性、复杂性、相对意义的概念。
1.实体的描述和存储
(1)空间实体的描述
通常需要从7个方面对地理实体进行描述:
①编码:编码被用来区别不同的实体。不同实体有不同的编码,有时同一个实体也可能具有不同的编码,如上行和下行的火车通常有不同的车次号,它反映了同一实体在时间、方向等特征方面的差异,严格地说,它们是两个“不同”的实体。
②位置:通常用坐标的形式(或其他方式)表示实体的空间位置。
③类型:指明该地理实体属于哪一种实体类型,或由哪些实体类型组成。
④行为:指明该地理实体可以具有哪些行为和功能。
⑤属性:指明该地理实体所对应的非空间信息,如道路的宽度、路面质量、车流量等。
⑥说明:用于说明实体数据的来源、获取的方法、时间和质量等相关的信息。
⑦关系:与其他实体的关系信息。
(2)空间数据的类型
根据空间数据的特点,可以把空间数据归纳为三类。同一实体的不同特征用不同类型的空间数据反映与表达。
①几何数据:描述空间数据的空间特征的数据,也称位置数据、定位数据。即说明“在哪里”,如用(X,Y)坐标来表示。
②属性数据:描述空间数据的属性(专题)特征的数据,也称非几何数据。即说明“是什么”,如类型、等级、名称、状态等。
③关系数据:描述空间数据之间的空间关系的数据,如空间数据的相邻、包含等,主要是指拓扑关系。拓扑关系是一种对空间关系进行明确定义的数学方法。
此外,还有一类数据因其地位、作用的特殊性而单独划分出来,即元数据。元数据是描述数据的数据。在地理空间数据中,它负责说明空间数据的内容、质量、状况和其他有关特征的背景信息,以便数据生产者和用户之间的交流。
根据划分角度的不同,还可将空间数据划分为其他不同的类型,如根据数据来源的不同分为几何图形数据、影像数据、属性数据和地形数据(据郭达志等);根据表示对象的不同分为类型数据、面域数据、网络数据、样本数据、曲面数据、文本数据、符号数据(据邬伦等)。但是,前一种分类方法最便于理解不同类型的空间数据是如何在计算机中以不同的空间数据结构存储的。
(3)空间数据结构
数据结构即数据组织的形式,是适合于计算机存储、管理、处理的数据逻辑结构。换句话说,它反映了地理数据是以什么形式在计算机中存储和处理的,它是计算机正确处理和用户正确理解的保证。不同类型的数据只有按照一定的数据结构进行组织,并将它们映射到计算机存储器中,才能进行存取、检索、处理和分析。在城市规划信息系统中,数据结构不仅决定了数据操作的效率,而且是实现系统灵活性和通用性的关键。
空间数据结构是空间数据在计算机中的具体组织方式。目前还没有一种统一的数据结构能够同时存储上述各种类型的数据,而是将不同类型的空间数据以不同的数据结构存储(见图5-2-1)。一般来说,属性数据常用二维关系表格的形式存储;元数据以特定的空间元数据格式存储,而描述地理位置及其空间关系的空间特征数据是GIS所特有的数据类型,主要以矢量数据结构和栅格数据结构两种形式存储。
在了解实体的描述、空间数据类型、空间数据结构等概念后,可以理解图5-2-1揭示的从实体需要描述的内容到计算机具体如何存储实体的过程。
图5-2-1 从实体描述到存储
2.实体的空间特征
可用空间维数、空间特征类型和空间类型组合方式说明实体的空间特征。
(1)空间维数
实体有零维、一维、二维、三维之分,对应着不同的空间特征类型:点、线、面、体。在地图中,实体维数的表示可以改变。如一条河流在小比例尺地图上是一条线(单线河),在大比例尺图上是一个面(双线河)。
(2)空间特征类型
①点状实体:点或节点、点状实体。点是有特定位置,维数为0的物体。通常有下列类型的点:实体点、注记点、内点和节点等(图5-2-2)。
图5-2-2 地理信息系统中不同类型的点
②线状实体:具有相同属性的点的轨迹,线或折线。它由一系列的有序坐标表示,并具有长度、弯曲度、方向性等特性。线状实体的类型包括线段、边界、链、弧段、网络等。
③面状实体(多边形):面状实体是对湖泊、岛屿、地块等一类现象的描述,在数据库中由一封闭曲线加内点来表示。它具有面积、范围、周长、独立性或与其他地物相邻、内岛屿或锯齿状外形、重叠性与非重叠性等特性。
④体状实体:用于描述三维空间中的现象与物体。它具有长度、宽度及高度等属性,还一般具有体积、每个二维平面的面积、内岛、断面图与剖面图等空间特征。
(3)实体类型组合
现实世界中的各种现象比较复杂,往往由上述不同的空间类型组合而成,例如根据某些空间类型或几种空间类型的组合将空间问题表达出来(图5-2-3)。复杂实体由简单实体组合表达。
3.空间关系
空间关系是指地理空间实体对象之间的空间相互作用关系,包括拓扑空间关系、顺序空间关系和度量空间关系。由于拓扑空间关系对GIS查询和分析具有重要意义,在GIS中,空间关系一般指拓扑空间关系。
(1)拓扑空间关系
①定义拓扑关系是一种对空间结构关系进行明确定义的数学方法,是指图形在保持连续状态下变形,但图形关系不变的性质。假设图形绘在一张高质量的橡皮平面上,将橡皮任意拉伸和压缩,但不能扭转或折叠,这时原来图形的有些属性保留,有些属性发生改变,前者称为拓扑属性,后者称为非拓扑属性或几何属性(表5-2-1)。
图5-2-3 不同空间类型组合表达复杂空间问题
表5-2-1 拓扑属性和非拓扑属性
②拓扑关系的种类拓扑空间关系的形式化描述是建立在点集拓扑理论基础之上的,点(节点)、线(链、弧段、边)、面(多边形)三种要素是拓扑元素。它们之间最基本的拓扑关系是关联和邻接,包括点-点、线-线、面-面、点-线、点-面、线-面等形式。
·邻接:存在于空间图形的同类拓扑元素之间的关系,如点-点,线-线,面-面三种。邻接关系是借助于不同类型的拓扑元素描述的,如多边形通过弧段而邻接。
·关联:存在于空间图形的不同类拓扑元素之间的关系。如点-线、点-面、线-点、线-面、面-点、面-线6种关系。
在GIS的空间分析和应用功能中,还可能用到其他拓扑关系,如:
·包含关系:主要是指面与其他拓扑元素之间的关系。如果点、线、面在某个面的内部,则称为它们被该面包含。如某省行政范围内包含的湖泊、河流等。
·几何关系:拓扑元素之间的距离关系。如拓扑元素之间距离不超过某一半径的关系。
·层次关系:相同拓扑元素之间的等级关系。如国家由省(自治区、直辖市)组成,省(自治区、直辖市)由县(市)组成等。
③拓扑关系的表示在目前的GIS中主要表示基本的拓扑关系,而且表示方法不尽相同。在矢量数据结构中拓扑关系可以由图5-2-4中的4种形式表示。
图5-2-4 矢量数据结构中拓扑关系的表示
(2)顺序空间关系
顺序空间关系描述空间实体之间在空间上的排列次序,如实体之间的前后、左右和东、南、西、北等方位关系。常用方向性名词来描述空间实体间的顺序关系。同拓扑空间关系的形式化描述方式类似,可以按点-点、线-线、面-面、点-线、点-面、线-面等多种组合方式来考虑不同类型的空间实体间的顺序空间关系。
顺序空间关系描述方法包括:
·点-点:计算两点连线与某一基准方向的夹角即可。
·点-线、点-面:将线状和面状空间实体视为由它们的中心所形成的点状实体,然后转化为求点状实体间的顺序空间关系,所不同的是要计算点状实体是否落入面状或线状实体之中,如果是这种情况,则不考虑顺序空间关系。
·线-线、线-面、面-面:描述较复杂。当空间实体之间距离很大时,实体的大小和形状对它们之间的顺序空间关系没有影响,可将其转化为点,其顺序空间关系也就转化为其中心点之间的顺序空间关系。但是,当它们之间的距离较小并且其外接多边形尚未相交时,算法将变得非常复杂,还没有很好的解决办法。
(3)度量空间关系
度量空间关系描述空间实体之间的距离等关系。这种距离关系可定量地描述空间中的某种距离,如A实体距离B实体200m;也可以应用与距离概念相关的术语,如“远”、“近”等进行定性描述。
5.2.2矢量数据结构
矢量数据是GIS中空间数据的一种常用的表示方法,这种数据结构最适应于空间实体的计算机表达。矢量数据结构则是基于矢量描述方法来表示和处理空间地物特征的一种数据组织方法。它是最常见的图形数据结构,也是一种面向目标的数据组织方式。矢量数据结构由于具有结构紧凑,冗余度低,有利于网络分析、检索等优点,成为GIS主要的数据存储结构之一。
1.矢量数据概述
矢量方法将地理现象或事物抽象为点、线、面实体,将它们放在特定空间坐标系下进行采样记录。由于矢量方法强调离散现象的存在,其主要思想是将线离散为一串采样点的坐标串,而面状区域由边界线确定。矢量数据结构通过记录坐标的方式尽可能精确地表示点、线、多边形等地理实体,其坐标空间假定为连续,能更精确地定义位置、长度和大小。
矢量数据具有如下特点:
①用离散的线或点描述地理现象及特征
在矢量数据中,把空间地物分成三类空间目标,即:
点——空间的一个坐标点(x,y);
线——多个点组成的矢量弧段(x1,y1)(x2,y2)…(xn,yn);
面——曲线段组成的多边形。
以城市地图为例,看看地图要素是怎样用矢量数据表示的。当地图比例尺缩小到一定程度时,地图上的某些地物可以看做是一个点,用一对(x,y)坐标表示,如城市中的学校、医院、电影院等;各种独立的地物和标志点也用相同的方式表示。地图上各种线段或线划要素的地物就是线,如城市内的各级别的道路、公路、铁路及地下管线,表达它们需要用一串有序的(x,y)坐标对。此外还包括一些特殊曲线,如等高线等。若曲线的精度很高,则还要用许多很短的直线来逼近。地图中各种面状分布的要素则用一串有序的(x,y)坐标对且首尾坐标相同来表示其轮廓线,例如建筑群、湖泊、土地利用地类等。图5-2-5(b)是用矢量数据形式表示图5-2-5(a)所示的地图。
图5-2-5 用矢量数据表示基本图形
②用拓扑关系描述矢量数据之间的关系
矢量数据结构能以最小存储空间精确地表达地物的几何位置。在实际应用中,往往采用拓扑结构编码。
在矢量数据系统中,常用几何信息描述空间几何位置,用拓扑信息来描述空间的相邻、关联、包含关系,从而清楚地表达空间地物之间的结构。
③面向目标的操作
对矢量数据的操作更多地面向目标,从而在计算长度、面积、形状和图形编辑、几何变换操作中,矢量结构有很高的效率和精度,数据冗余度小,运算量也小。例如,对道路长度的计算和区域面积的量算,分别通过计算道路长度和区域多边形的面积而获得。这样直接根据目标物几何形状用坐标值计算方法,使计算精度大大提高。另外,由于矢量数据是以点坐标为基础记录数据,不仅便于对图形放大、缩小,而且还便于将数据从一个投影系统转换到另一个投影系统。
④数据结构复杂且难以同遥感数据结合
矢量数据系统,不仅难以同数字高程模型(DEM)数据结合,而且也难以同遥感数据结合。这就限制了矢量数据系统的功能和效率。在基于矢量数据结构的GIS中,为了解决同遥感数据的结合问题,往往是将矢量数据转绘成栅格数据,完成分析后,根据需要再转换回去。这是矢量数据结构在GIS应用中的最大不足。
⑤定位明显、属性隐含,难以处理位置关系
矢量数据的定位是根据地物的取样点坐标直接存储的,而属性则一般存于文件头或数据结构中某些特定的位置上。这种特点使得其图形运算的算法总体上比栅格数据结构要复杂得多,有些甚至难以实现。尤其是判断地物的空间位置关系时,往往需要大量的求交运算。例如将两个时期的土地利用图叠加进行分析时,需要进行多边形的求交运算,产生新多边形,建立新的拓扑关系。
矢量数据可以通过以下几种途径获取:a)利用各种定位仪器设备;b)通过纸质地图或扫描影像进行数字化;c)通过栅格数据或利用已有的数据通过模型运算间接获取。
2.矢量数据的一般组织方法
在GIS中,用矢量数据表示时应考虑三个问题:矢量数据自身的存储和处理;与属性数据的联系;矢量数据之间的空间关系(拓扑关系)。矢量数据的表示方法多种多样,但基本上类似。下面先介绍矢量数据的简单数据结构,关于拓扑数据结构将在后面讨论。
矢量数据的简单数据结构分别按点、线、面三种基本形式来描述(见图5-2-6)。
图5-2-6 简单数据结构
对图中文字的有关说明如下:
①标识码:按一定的编码原则确定,简单情况下可以按顺序编号。标识码具有唯一性,是联系矢量数据和单独存放在数据库中与其对应的属性数据的关键字。
②点结构中的(x,y)坐标:是点实体的定位点的坐标,如果是有向点,则要用两个坐标对来表示。
③线结构中的坐标对数n:是构成该弧段的坐标对的个数。(x,y)坐标串是构成弧段的矢量坐标,共有n对。也可把所有弧段的(x,y)坐标串单独存放,这时只要给出指向该弧段坐标串的首地址指针即可。
④面结构是弧段索引编码的面(多边形)的矢量数据结构,弧段数n指构成该面(多边形)的弧段的数目。弧段标识码集是指所有构成该面(多边形)的弧段的标识码的集合,共有n个。
(1)空间实体的矢量编码
对每类点、线、面而言,有相应的矢量数据结构和编码内容。
①点实体的矢量编码。点实体包括由单独的一对(x,y)坐标定位的地理或制图实体。它是空间上不能再分的地理实体,可以是具体的,如用来描述地图上的各种标志点,像居民点、监控点等;也可以是抽象的,如文本位置点、线段网络的节点等。在矢量数据结构中,除点实体的(x,y)坐标外,还应存储其他一些与点实体有关的数据来描述点实体的类型、制图符号和显示要求等。点的矢量编码的基本内容如图5-2-7所示。
图5-2-7 点实体矢量编码的内容
②线实体的矢量编码。线实体可以定义为直线元素组成的各种线性要素,主要用来表示线状地物符号和多边形边界,包括直线和曲线。曲线又包括一般曲线和封闭曲线,如河流、道路等。最简单的线实体只存储它的起止点坐标、属性、显示符等有关数据。例如,线实体输出时可能用实线或虚线描绘,这类信息属符号信息,它说明了线实体的输出方式。虽然线实体并不是以虚线存储,仍可用虚线输出。图5-2-8说明了线实体的矢量编码的内容。
图5-2-8 线实体矢量编码的内容
其中唯一标识码是线的特征代码;线标识码表示线的类型;起始点和终止点可用点号或直接用坐标表示;显示信息是显示时的文本或符号等;与线相连的非几何属性可直接存储于线文件中,也可以单独存储且由标识码联结查找。
弧段(链)是n个坐标对的集合,这些坐标可以描述任何连续而又复杂的曲线。组成曲线的线元素相距越短,(x,y)坐标数量越多,就越逼近于一条复杂曲线。这里既要考虑节省存储空间,又要求较为精确地描绘曲线,唯一的办法是增加数据处理工作量。即在线实体的记录中加入一个指示字,当启动显示程序时,这个指示字告诉程序:需用数学内插函数(例如样条函数)加密数据点且与原有的点匹配,这样才能在输出设备上得到较精确的曲线,不过,数据内插工作却增加了。弧段的存储记录中也要加入线的符号类型等信息。
简单的弧段没有携带彼此间互相连接的空间信息,而这种连接信息又是给排水网络和道路网络分析中必不可少的信息,因此要在数据结构中建立指针系统才能让计算机在复杂的线网络结构中逐线跟踪每一条线。
指针的建立要以节点为基础。图5-2-9说明了节点携带连接信息的线网络矢量数据结构。在建立水网中每条支流之间的连接关系时必须使用这种指针系统。指针系统包括节点指向线的指针、每条从节点发出的线汇于节点处的角度等,从而完整地定义线网络的拓扑关系。
图5-2-9 节点携带连接信息的线网络矢量数据结构
此类简单的连接结构加入了一些多余数据,增加了存储量。
③面实体的矢量编码。多边形用来描述一块连续的区域,它是描述地理空间信息的最重要的一类数据。在区域实体中,具有名称属性和分类属性的,都用多边形表示,如行政区、城市用地、居民区等;具有标量属性的有时也用等值线描述(如地形、降雨量等)。
多边形矢量编码不但要表示位置和属性,更为重要的是要能表达区域的拓扑性质,如形状、邻域和层次等,以便使这些基本的空间单元可以作为专题图资料进行显示和操作。由于要表达的信息十分丰富,基于多边形的运算多而复杂,因此多边形矢量编码较点实体和线实体的矢量编码要复杂得多。
多边形的矢量编码除要求存储效率外,一般还有如下要求:所表示的各多边形有各自独立的形状,可以计算各自的周长和面积等几何指标;各多边形拓扑关系的记录方式要一致,以便进行空间分析;要明确表示区域的层次,如岛—湖—岛的关系等。因此,它与制图系统仅以显示和制图的目的而设计的编码有很大的不同。
(2)多边形矢量编码的常见方法
多边形常见的矢量编码方法有以下几种。
①坐标序列法。任何点、线、面实体都可以用坐标点(x,y)来表示。这里(x,y)可以对应于地面坐标经度和纬度,也可以对应于数字化时所建立的平面坐标系的(x,y)。早期的GIS软件或计算机制图系统常常把多边形(面)的边界看做是线的简单闭合。这种方法的数据结构由多边形标识码及其构成多边形的首尾相接的多对(x,y)坐标串组成。对相邻接的多边形,分别用两组首尾相接坐标对序列来表示,两者的公共边界并不作特殊处理。例如,图5-2-10所示的地图图形采用这种数据结构,其编码方式如表5-2-2所示。
图5-2-10 某地图图形
这种编码方法的优点是结构简单,易于以目标/事物为单位进行运算和显示等操作;缺点是不能表达实体的拓扑关系(边界与多边形、相邻多边形之间的关系),不便于分析处理和不易检查拓扑错误;公共边界被数字化和存储两次,数据冗余度大,也给匹配处理带来困难;岛与外包多边形的联系建立困难。因此这种方法主要用于功能简单的系统中。
②改进型坐标序列法。该方法的主要思路是在多边形编码中只记录点号,而不记录各点的坐标对,如针对图5-2-10采用这种数据结构后的编码表5-2-3。与前面的方法相比,可以减少一半的数据冗余。但这种改进并没有从根本上解决问题,也不便于作复杂的查询和分析。
表5-2-2(a) 坐标序列法编码(多边形)
表5-2-2(b) 坐标序列法编码(点与线)
表5-2-3 改进型坐标序列法编码(点、线、多边形)
③树状索引编码法。该方法采用树状索引以减少数据冗余并间接增加邻域信息,对所有边界点进行数字化,将坐标对以顺序方式存储,由点索引与边界号相联系,以线索引与各多边形相联系,形成树状结构。由于建立了线索引,一个面(多边形)就可由多条弧段构成,每条弧段的坐标可由弧段的矢量数据结构获取。图5-2-11(b)和(c)表示了图5-2-11(a)所示地图图形的多边形文件和线文件树状索引,表5-2-4、表5-2-5、表5-2-6则是对图5-2-11建立的索引编码文件的结构。
图5-2-11 树状索引编码法
表5-2-4 多边形-弧段索引文件表
表5-2-5 弧段—点索引文件表
表5-2-6 点坐标文件表
树状索引编码法消除了相邻多边形边界的数据冗余和不一致的问题,在简化过于复杂的边界线或合并相邻多边形时可不必改造索引表,但多边形的分解和合并不易进行;邻域信息和岛状信息可以通过对多边形文件的线索引处理得到,但邻域处理比较复杂,需追踪出公共边;在处理“洞”或“岛”之类的多边形嵌套问题时较麻烦,需计算多边形的包含等。而且两个编码表都需要以人工方式建立,工作量大且容易出错。
采用这种编码方法的面实体矢量数据结构具有结构简单、直观、易实现以实体为单位的运算和显示的优点。由于拓扑关系简单,这种数据结构主要用于矢量数据的显示、输出以及一般的查询和检索。
④拓扑结构编码法。要彻底解决邻域和岛状信息处理的问题,必须建立一个完整的拓扑数据结构。这种数据结构借助于数学中拓扑学的原理来描述空间事物,下面将具体讨论它的编码方式和内容。
3.拓扑数据结构
具有拓扑关系的矢量数据结构就是拓扑数据结构。拓扑数据结构是GIS的分析和应用功能所必需的,而且在目前的城市规划信息系统领域中,拓扑结构也是得到最广泛应用的空间数据结构。拓扑数据结构的表示方式没有固定的格式,也没有针对它建立起专门的标准,但基本原理是相同的。
(1)拓扑元素
矢量数据可抽象为点(节点)、线(弧段、链、边)、面(多边形)三种要素,即称为拓扑元素。
点(节点):孤立点、线的端点、面的首尾点、弧段的连接点等。
线(弧段、链、边):两节点间的有序弧段。
面(多边形):若干条弧段构成的闭合多边形。
(2)编码方式
拓扑数据结构的关键是拓扑关系的表示,而几何数据的表示可参照矢量数据的简单数据结构。在GIS中,主要表示基本的拓扑关系,而且表示方法不尽相同。以下表示的是图5-2-12中地图图形的矢量数据拓扑关系。由于矢量数据结构具有能够完全显式地表达节点、弧段、面之间所有关联关系的优点,因此对图5-2-12所示的地图图形,除了可明显地表达从上到下(即面-弧段-节点)的拓扑关系外,还能用关系表列出从下到上(即节点-弧段-面)的关系。表5-2-7至表5-2-10就显式地表达了全部的拓扑关系,其中前两个表格表达了从上到下的拓扑关系,后两个表格表达了从下到上的拓扑关系。
图5-2-12 某地图图形
表5-2-7 面-弧段的拓扑关系b=b(a)
表5-2-8 弧段-节点的拓扑关系a=a(n)
表5-2-9 节点-弧段的拓扑关系n=n(a)
表5-2-10 弧段-面的拓扑关系a=a(b)
弧段-面关系中0为制图区域外部的面,常称为包络多边形。如果弧段是有方向的线,则构成弧段的节点在表格中应按照从起点到终点的顺序排列,相应地,面-弧段关系中用“-”号表示边的方向与构成面的方向相反。
5.2.3栅格数据结构
栅格数据是表示GIS中空间数据的另一种方法,它是二维表面上地理数据的离散量化值,很适合于计算机处理。栅格数据结构是以规则的像元阵列来表示空间地物或现象分布的数据结构,其阵列中的每个数据表示地物或现象的属性特征。换句话说,栅格数据结构就是像元阵列,用每个像元的行列号确定位置,用每个像元的值表示实体的类型、等级等的属性编码。
1.栅格数据概述
与矢量数据相比,栅格数据呈现出不同的特点:
(1)用离散的量化栅格值表示空间实体
栅格数据把真实的地理面假设成平面笛卡儿面来描述地理空间。在每个笛卡儿平面中,用行列值来确定各个栅格元素(Grid Cell)的位置,以栅格元素值来表示空间属性。栅格元素是栅格数据的最小单位。在栅格数据中:
点:用一个栅格元素来表示。
线:用一组相邻的栅格元素来表示。
面(区域):用相邻栅格单元的集合来表示。
以扫描成图像的城市地图为例,看看地图要素是怎样用栅格数据表示的。某些地物如果其所占的主要区域不超过一个栅格单元,则可视为一个点,点状要素用其中心点所处的单个像元表示;对地图上的各种线段或线划要素,如城市道路,用其中轴线上的像元集合来表达,这种方式对特殊曲线也同样适用;地图中各种面状要素如湖泊,则以它所覆盖的像元集合表示。以图5-2-13(a)所示的地图图形为例,其栅格数据形式表示为图5-2-13(b)。
图5-2-13 用栅格数据表示基本图形
栅格数据在表示某一地区的实体时,实际上是用栅格元素逼近表示。这种描述方法往往是不精确的。例如在描述一居住区域时,居住区边界可能通过某栅格单元的中间,这时栅格单元值仅反映了部分值。显然,描述实体的栅格单元的尺寸越小,系统精度就越高,但相应的数据量就越大。数据量的增加不仅增加了存储器的占用,而且也影响系统分析和处理数据的速度。因此,需合理确定栅格单元尺寸,使建立的栅格数据能有效地反映实体的不规则轮廓。例如可以根据多边形精度要求来确定栅格尺寸,这时每个栅格元素所表示的比例尺为:栅格大小/地表单元大小。
(2)描述区域位置明确,属性明显
栅格数据的位置一般用坐标对(行列数)确定,栅格值可以用单位栅格交点归属法、单元栅格面积占优法、单位栅格长度占优法来描述。图5-2-14所示为用栅格阵列及栅格单元属性值表示点、线、面的方法。栅格值的行列表示通常从左上角开始,从上至下、从左至右逐行确定。
图5-2-14 点、线、面的栅格表示
上图(a)中数据2表示属性或编码为2的点,其位置由其所在的第3行与第5列交叉得到。图(b)表示一条代码为6的线实体。图(c)表示了3个面实体(也称区域实体),代码分别为4、7和8。
上述表示方法,每一位置只能表示单一特征,当某一位置需要表示多种特征值时,需要引入图层的概念。如某一地区地形图需要同时描述高程、县界、河流和公路时,在栅格数据表示中需要建立4个栅格数据层,它们分别描述该区域的高程、县界、河流和公路的特性。描述每个图层属性的值,可以是整型数、实型数或字符型数。
(3)数据结构简单,易与遥感结合
栅格数据以阵列(数组)方式来描述空间实体,而栅格行列阵列容易为计算机存储、操作和显示,因此这种结构容易实现,算法简单,并且易于扩充、修改,直观性强。它特别易于同遥感图像交换信息、结合处理,给地理空间数据的分析和处理带来极大的方便。
(4)难以建立地物间拓扑关系
栅格数据是一种面向位置的数据结构。在平面空间上的任意一点都可以直接同某个或某类地物相联系,很难完整建立地物间的拓扑关系。实际上,一类地物或一个目标可能在区域的多处出现,这时只能通过遍历整个栅格矩阵才能得到,这导致栅格数据结构不便于对单目标操作。
(5)图形质量局部存在问题,且数据量大
在栅格数据中,栅格元素是表示地物目标的最基本单位,因此所反映的实体在形态上会出现畸变,在属性上会出现偏差,从而影响图形质量。为了提高图形质量,要尽可能减少单位栅格的尺寸,这样就必然增加栅格数目,从而增加了栅格数据量和数据的冗余度。
建立一个栅格数据结构之前需要明确三个内容:数据来源(即获取数据的途径)、栅格系统的确定和栅格数据代码(属性)的确定。
栅格数据常见的获取方式有4种,分别是:①遥感图像解译;②规则点采样、不规则点采样及插值;③从扫描仪、摄像机等设备获取栅格数据;④由矢量数据转换得到。
栅格系统的确定包括栅格坐标系的确定和栅格单元尺寸的确定(图5-2-15)。由于栅格编码一般用于地方性或区域性GIS,原点的选择常具有局部性质,但为了便于区域的拼接,栅格系统的起始坐标应与国家基本比例尺地形图公里网的交点相一致,并分别采用公里网的纵横坐标轴作为栅格系统的坐标轴。栅格单元的尺寸确定的原则应是既能有效地逼近空间对象的分布特征,又能减少数据的冗余度。具体可采用保证最小多边形的精度标准来确定单元尺寸的方法。
图5-2-15 栅格系统的确定
栅格数据取值的过程就是确定栅格代码(属性值)的过程。栅格数据的获取必须尽可能保持原图或原始数据的精度;在决定其代码时则尽可能保持地表的真实性,保证最大的信息容量和数据质量。但实际上,一个栅格单元可能对应于实体中几种不同的属性值,这时就有了如何对栅格取值的问题,即必须根据不同的需要,采取几种不同的取值方法来决定栅格单元的代码。这些方法主要有4种:中心归属法、长度占优法、面积占优法和重要性法。值得指出的是,这里所说的属性值实际上仅仅是地物的属性编码,还不是目标的具体说明属性,如楼层的高度等。
2.栅格数据的一般组织方法
由于地理信息具有多维结构,而栅格数据结构中赋予每一个栅格的属性值是唯一的,这就要用多个栅格层数据来存储同一个地理区域的不同层次信息。那么,如何在计算机中合理地组织多层栅格数据以达到最优数据存储、最少存储空间、最短处理过程?假设每一层中每一个像元在数据库中都是独立单元(即数据值),像元和位置之间存在一一对应的关系,则有三种可能的组织方式(图5-2-16)。
方法a:以像元为记录的序列。同一像元位置上把不同栅格层的各个属性值表示为一个列数组。由于N层中只记录一层的像元位置(X,Y坐标或行、列号),可节约大量的存储空间,尤其在栅格数量较多的情况。
方法b:以层为基础,每一层又以像元为序记录它的位置和属性,一层记录完后再记录第二层。这种记录方法实际上对每层每个单元一一记录,形式最简单,但需要的存储空间最大。如果以像元数组的行列号隐含坐标,则该方法所需的存储空间也不太大。
方法c:以层为基础,每一层内以多边形(也称制图单元)为序,记录多边形的属性值和多边形内各像元的坐标。该方法有利于节约存储属性值的空间,因为对同一属性的制图单元的n个像元的属性只记录一次,可较方便地进行地图分析和制图处理。
图5-2-16 栅格数据组织方法
以上三种方法分别对应三种具体的数据结构和编码组织。
(1)全栅格矩阵式结构
全栅格矩阵式结构遵循方法a的组织思路,按顺序存放像元的属性值。
当用文件保存一幅栅格地图时,一般需在文件中同时记录地图各像元在矩阵中的位置以及像元的属性值。文件中的数据只能以一维方式记录,而矩阵是二维的。为了能用一维形式记录二维图形,在存储时,将m×n像元逐行逐列排序为:
a11,…,a1n,a21,…,a2n,…,am1,…,amn
并记录于数据文件中。这样,就必须在文件某处注明栅格矩阵的尺寸,即长度与宽度,以便在读取数据时能根据该尺寸重新把一维数据流排列成原来的二维矩阵。图形的尺寸通常记录在文件头(Header)中,文件头是有关图像整体的信息数据块。
例如,对于图5-2-17所示的原始地图采用这种结构,其在计算机中表示形式如表5-2-11所示。
图5-2-17 全栅格矩阵式结构
表5-2-11 全栅格矩阵式结构在
计算机中的组织形式
这种全栅格矩阵将每个栅格都作为基本的存储单元,因而它是一种非压缩格式。这些行在磁盘上全是等长的,因此容易从栅格数据库中对整幅图或任意一个窗口进行检索。但是这种结构需要大量存储空间,例如,如果以0.05mm的分辨率扫描幅面为50×50cm2的一幅地图,并为每一个像元设定一个字节,则共需要100兆字节的存储空间。因此这种结构比较适用于类型变化比较复杂的图形要素。
(2)全栅格联合矩阵式结构
全栅格联合矩阵式结构在同一种网格系统上存储多种要素的空间数据,这样,每个栅格都包含有两种或两种以上的地理属性。显然它与方法b的思路是一致的。当进行区域的综合制图或进行图形要素的相关分析时,常常要建立这种全栅格联合矩阵式的数据结构。
例如,对于图5-2-18的两个栅格地图1和2,采用这种结构,其表示形式如图5-2-18的表所示。
图5-2-18 全栅格联合矩阵式编码
(3)分层制图单元坐标序列式结构
基于方法c的设想,该结构需要对每一层的制图单元和每一制图单元包含的栅格的坐标进行编码。采用这种结构对上图中的两个栅格地图1和2进行表示,结果如表5-2-12和表5-2-13所示。
表5-2-12 制图单元分层编码
表5-2-13 制图单元栅格坐标编码
3.栅格数据的压缩编码方法
栅格数据的数据量比较大,因此需要考虑数据的压缩和编码。编码方案的选择既要考虑使数据量尽可能小,又要使解码方便,更主要的是还要便于分析处理时进行操作运算。
根据是否对数据进行压缩,把栅格的编码方法分为两大类:直接编码法和压缩编码法。直接编码法是最简单和直观的栅格数据编码法。这种编码法也称矩阵法,前述的全栅格矩阵式结构就是采用直接编码法。直接编码法对栅格图从左上角开始逐行逐列地存储数字化代码,其顺序可以是逐行从左到右记录,也可以按奇数行从左到右、偶数行从右到左记录;对于某些情况还可以采用特殊的存储顺序。栅格数据这样的编码方法能够反映栅格数据的逻辑模型,通常称这种编码的图像文件为栅格文件或格网文件。对图5-2-19所示的区域采用直接栅格编码法得到的文件结构如表5-2-14所示。
图5-2-19 栅格数据编码的例子
表5-2-14 直接栅格编码文件
用直接编码法存储栅格数据时,在阵列中存在大量相同属性的数据,这意味着栅格数据的存储量可以大大压缩。基于这一点出现了不同类型的栅格数据压缩编码方法,如游程(行程)编码、链码、块码和四叉树编码等。既然压缩编码的目的是用尽可能少的数据量记录尽可能多的信息,压缩编码可能会损失信息。因此,压缩编码又有信息无损编码和信息有损编码之分。信息无损编码是指编码过程中没有任何信息损失,通过解码操作可以完全恢复原来的信息。信息有损编码是指为了提高编码效率,最大限度地压缩数据,在压缩过程中损失一部分相对不太重要的信息,解码时这部分信息难以恢复。在GIS中,大多数情况下采用信息无损编码,而对原始遥感影像进行压缩编码时,有时也采取有损压缩编码。
(1)游程(行程)编码
游程编码,也称行程编码,是栅格数据压缩的重要编码方法。它的基本思路是:对于一幅栅格图像,常常有行(或列)方向上相邻的若干点具有相同的属性代码,因而可采取某种方法压缩那些重复的记录内容。为了考虑数据压缩并顾及数据访问的效率,游程编码以行为单位,将栅格矩阵中的属性相同的连续栅格视为一个游程。根据每个游程的数据结构(编码方式)的不同又分为游程终止编码和游程长度编码。
不管是游程终止编码还是游程长度编码,其实质是把栅格矩阵中行序列x1,x2,…,xn映射成整数对元素序列。因此,一维游程编码方式为(gk,lk)。在游程终止编码中gk表示栅格元素属性值,lk表示游程终止点列号;在游程长度编码中,gk表示栅格元素的属性值,lk表示游程的连续长度,其中k=1,2,3,…,m(m<n)。
例如,图5-2-20所示的栅格数据编码采用两种游程编码方法的结果如表5-2-15和表5-2-16所示。
表5-2-15 游程终止编码表
表5-2-16 游程长度编码表
图5-2-20 行程编码
表5-2-15所示的第四行,(A,1)表示属性值为A的栅格终止点为第一列,(B,3)表示属性值为B的栅格终止点为第三列,(C,6)表示属性值为C的栅格终止点为第六列。因此,从游程终止值可容易计算出每个属性值所占的栅格数。此处属性值为C的栅格数为6-3=3,依此类推。
表5-2-16所示的第四行,(A,1)表示属性值为A的栅格点有一个,(B,2)表示属性值为B的栅格点数为2,(C,3)表示属性值为C的栅格点数为3。从游程长度值可计算出对应每个属性值的连续栅格的起始列和终止列,上表第四行属性值为C的起始栅格在第1+2+1=4列,终止栅格在第1+2+3=6列,而该行总栅格点数为1+2+3=6。
以上的编码都是逐行记录编码结果,但如果要完整地表达栅格数据的内容,则要记录栅格值、长度(或终止点列号)和行号。对应于表5-2-16,得到如表5-2-17所示的数据记录。
表5-2-17 游程长度编码数据记录
游程编码被称为一维游程编码,主要是由于该编码方法实质上只考虑了每一行的数据结构,而并没有考虑行与行之间的结构。换言之,它考虑了水平分解元素之间的相关性,而未考虑垂直分解元素之间的相关性。显然,如果各行中相同属性的顺序栅格数越多,即游程越长,则编码效率就越高。
游程编码对块状地物较多或地类区面积较大的专题图及影像图,数据压缩率较高,节省的空间也越多,且易于实现叠置、合并、检索运算,这种编码方法在地理信息系统中应用很广。
(2)链式编码
链码又称为弗里曼链码或边界链码,适用于对曲线和边界进行编码。它基于8邻域的思想,利用8个方向码来编码线划图,使任一条曲线或边界都可以用某一原点开始的矢量链来表示。从理论上讲,假设一曲线或边界中间有一点(i,j),则其相邻的栅格点必然在它的8个邻域上(如图5-2-21(a))。这8个方向可以定义为东(E=0),东南(SE=1),南(S=2),西南(SW=3),西(W=4),西北(NW=5),北(N=6)以及东北(NE=7)。8个方向上的坐标增量如图5-2-21(b)所示。
图5-2-21 链码的取值
即假设一点的坐标为(i,j),则其邻域坐标,东为(i,j+1),东南为(i+1,j+1),南为(i+1,j),西南为(i+1,j-1),西为(i,j-1),西北为(i-1,j-1),北为(i-1,j),东北为(i-1,j)。因此,对连续线上的一个已知点,只要搜索8个方向,总可找到它的后续栅格点,并可用图5-2-21(a)所定方向代码来表示。反之,已知所定点的方向代码亦可知道其前趋点的坐标位置。
具体编码过程为:首先自上而下、从左至右寻找起始点(即值不为零且没有被记录过的点),记下该地物的属性代码及起点的行列数。然后按顺时针方向寻找相邻的等值点,并按八个方向进行编码。对于已经被记录过的栅格单元,可将其属性代码置为零。如果遇到不能闭合的线段,结束后可返回到起始点,重新开始寻找下一个线段。
例如,图5-2-22中的线状地物是高程为100m的等值线,标号为#1,从点A到点B沿曲线延伸方向用链式编码表示为:(2,2,2,2,0,1,1,0,0,7)。其中前两个数字2和3表示起点为第2行第3列,从第3个数字表示单位矢量的方向,8个方向用0-7的整数代表。把这8个代码的边同A点的(x、y)坐标(即I,J号)一起记录下来,就可完整准确地再现这条曲线。
链式编码的优点是具有很强的数据压缩率,而且便于计算长度、面积,便于表示图形的凹凸部分,易于存储图形数据。缺点是难于实现叠置运算,不便于对边界进行合并和插入等编辑修改操作,对区域按边界存储,相邻区域的相邻线段会重复存储,使数据冗余。
(3)块式编码
块码是游程编码扩展到二维的情况,它以正方形区域为单元对块状地物的栅格数据进行编码,其实质是把栅格阵列中同一属性方形区域各单元映射成一个单元序列。
块码的编码方式为:行号、列号、半径、代码。行号和列号表示正方形区域左上角栅格元素所在行号及列号;半径表示正方形区域行(或列)方向的栅格元素数;代码表示该正方形区域的属性值。
以图5-2-20所示的矩阵为例,对其进行块式编码,所得编码结果如表5-2-18所示。
图5-2-22 链式编码示例
表5-2-18 块码表
从表5-2-18可知,图5-2-20的栅格数据可用11个1单位方块,4个2单位方块及1个3单位方块来描述。
若一个面状地物所能包含的正方形越大,多边形边界越简单,块码的效率就越高。块码在进行计算面积、检索图形延伸性及合并插入等操作时具有明显的优越性,但有时不便于运算。另外,它同游程编码一样,对图形比较小且多边形边界复杂的图形,数据压缩效率低。
(4)四叉树编码
20世纪80年代以来,人们对四叉树编码在图像分割、数据压缩、地理信息系统等方面进行了大量研究,对四叉树数据结构提出了许多编码方案,包括基于常规四叉树和线性四叉树编码两种。常规四叉树常用指针来实现,所占的内外存空间比较大,难以达到数据压缩的目的。在地理信息系统中或图像分割中多采用线性四叉树,它不需要记录中间节点和使用指针,仅记录叶节点,并用地址码表示叶节点的位置,因而广泛用于数据压缩和城市规划信息系统中的数据结构。线性四叉树的编码又有三种常用方式:基于深度和层次码的线性四叉树编码,基于四进制的线性四叉树编码(M)和基于十进制的线性四叉树编码(MD码),它们分别有不同的特点。由于四叉树编码涉及内容较为复杂,也有较多的对其进行全面介绍的专业书籍,在此只对常规四叉树加以简要介绍,而不赘述关于线性四叉树的编码方法。
四叉树又称四元树或四分树,是最有效的栅格数据压缩编码方法之一。四叉树编码的基本思想是首先把一幅图像或一幅栅格地图(2n×2n,n>1)等分成4部分。逐块检查其栅格值,若每个子区中所有栅格都含有相同值,则该子区不再往下分割;否则,将该区域再分割成4个子区域,如此递归地分割,直到每个子块都含有相同的灰度或属性值为止。这样的数据组织称为自上往下的常规四叉树。四叉树也可自下而上地建立。这时,从底层开始对每个栅格数据的值进行检测,对具有相同灰度或属性的四等份的子区进行合并,如此递归向上合并。
图5-2-23表示了四叉树的分解过程。图中对23×23的栅格图,利用自上而下的方法表示了寻找栅格A的过程。
图5-2-23 常规四叉树及其分解过程
从四叉树的特点可知,一幅2N×2N栅格阵列图,具有的最大深度数为N,可能具有的层次为0,1,2,3,…,N。
每层的栅格宽度,即为每层边长上包含的最大栅格数,反映了所在叶节点表示的正方形集合的大小。其值为:2(最大深度-当前层次)。
例如:一幅23×23的栅格阵列,它具有的最大深度为3。可能层次分别为0,1,2,3。其:
第0层边长上的最大栅格数为23-0=8;
第1层边长上的最大栅格数为23-1=4;
第2层边长上的最大栅格数为23-2=2;
第3层边长上的最大栅格数为23-3=1。当栅格阵列为非2N×2N时,为了便于进行四叉树编码,可适当增加一部分零,使其满足2N×2N。
除此之外,目前还有采用无边界游程编码、八叉树编码等方式。
4.几种编码方法的比较
一般来说,对数据的压缩是以增加运算时间为代价的。在这里时间与存储空间是相互矛盾的,为了更有效地利用空间资源,减少数据冗余,不得不花费运算时间进行编码以及为复杂的图形运算。一般好的压缩编码方法是要在尽可能减少运算时间的基础上达到最大的数据压缩效率,并且使算法适应性强,易于实现。
行程编码既可以在很大程度上压缩数据,又可以最大限度地保留原始栅格结构,编码解码十分容易,十分适合于城市规划信息系统采用;霍夫曼编码的压缩效率较高,已接近矢量结构,对边界的运算也比较方便,但不具有区域的性质,区域运算困难;四叉树具有区域性质,又具有可变的分辨率,具有较高的压缩效率,四叉树编码可以直接进行大量图形图像运算,效率较高。它的缺点是建立树状数据结构比较复杂,如果地图所反映的事物经常变化,多边形的边界经常更改,那么每次都要刷新四叉树结构,会耗费较多的计算时间。另一方面,如果地图上的多边形很零碎而分辨率又要求不很高,则简单栅格结构可能比四叉树编码、行程编码更节省存储空间,且叠合分析也较方便。
5.2.4空间数据的一体化组织方法
1.矢量数据结构与栅格数据结构的比较
由于两种数据结构各有长处与不足,目前使用的地理信息系统都采用了栅格数据结构和矢量数据结构。栅格结构“属性明显、位置隐含”,而矢量结构“位置明显、属性隐含”;栅格数据操作总的来说比较容易实现,但要提高表达精度,就需要更多的栅格单元数据,易于造成冗余问题;而矢量数据操作则比较复杂,许多分析操作用矢量结构实现比较困难,但它的数据表达精度较高,工作效率也较高。两种数据结构的优缺点比较见表5-2-19。
表5-2-19 矢量数据结构与栅格数据结构的比较
实践证明,栅格数据结构和矢量数据结构在表示空间数据上可以是同样有效的。对于建立一个GIS系统,目前较为理想的方案是采用两种数据结构,这对于提高GIS的空间分辨率、数据压缩率和增强系统分析、输入输出的灵活性十分重要。当今大多数GIS软件以矢量数据结构为主,也提供对栅格数据结构的支持,用户可以根据具体的应用目的和应用对象的特点选择合适的数据结构。
一般来说,进行大范围小比例尺的自然资源、环境、农业、林业、地质等区域问题的研究,城市总体规划阶段的战略性布局研究,以及涉及遥感图像处理与集成、数字地形模型、空间模拟运算(如污染扩散)等应用时,栅格数据结构比较合适。而在城市的分区或详细城市规划、交通、土地管理、公用事业管理(如各种公共服务设施)方面的应用,则选择以矢量数据结构为主比较合适。当然,在另外一些领域中也可以把这两种数据结构结合起来使用,通过矢量和栅格数据之间的相互转换,同时显示两种形式的数据等。
随着GIS与RS技术的广泛结合,地图数据和图像数据的混合处理已成为当前GIS的发展趋向。这就要求统一管理和处理矢量数据与栅格数据,它既包括对矢量数据和栅格数据的一体化表示方法和数据结构的研究,也包括对这两种数据类型之间转换方法的研究。
空间数据类型的转换是GIS的主要功能之一,近年来已发展了许多高效的转换算法,适用于不同的环境。通常可以分为矢量数据向栅格数据的转换(栅格化)及栅格数据向矢量数据的转换(矢量化)。就技术方法而言,前者较为简单,因而方法也比较成熟。
矢量数据向栅格数据转换时,必须确定栅格元素的大小,并了解矢量数据和栅格数据的坐标表示。栅格数据向矢量数据的转换实质上是将具有相同属性代码的栅格集合转变成由少量数据组成的边界弧段以及区域边界的拓扑关系,其转换在原理上或实现方法上都复杂得多。
2.混合数据结构
矢量栅格混合数据结构有多种形式。最简单、直接的形式是对矢量与栅格数据不作任何特殊处理,分别以它们各自的数据结构存储,需要时将它们调入到内存,进行统一的显示、查询和分析。这种处理方式在许多系统中均已实现,特别是遥感影像或航空影像或扫描的栅格地图,作为矢量GIS的一个背景层,成了GIS的一个必备的功能。比较高级的功能是栅格层不仅可以是以byte存储的影像,而且可以是任意数值或字符的地物编码,这样可以进行矢量栅格的联合查询与分析。如图5-2-24所示,上面一层是矢量形式的行政边界,中间一层是土地利用覆盖层,最下一层是两层的叠加显示。若要查询某个县的土地利用状况,则通过县区的边界搜索该区域内各种土地利用的类型,即可得到统计结果。这种方法省去了两层矢量数据复杂的叠置分析。一般地,两种数据与属性的结合关系如图5-2-25所示。
图5-2-24 矢量与栅格的混合叠置
图5-2-25 混合数据结构的简单形式
下面举两种例子加以阐释:
(1)栅格图像与线划矢量图融合
这是两种结构数据简单的叠加,是GIS里数据融合的最低层次。如,遥感栅格影像与线划矢量图叠加,遥感栅格影像或航空数字正射影像作为复合图的底层。线划矢量图可全部叠加,也可根据需要部分叠加,如:水系边线、交通主干线、行政界线、注记要素等。这种融合涉及两个问题,一是如何在内存中同时显示栅格影像和矢量数据,并且要能够同比例尺缩放和漫游;二是几何定位纠正,使栅格影像上和线划矢量图中的同名点线相互套合。
如果线划矢量图的数据是从该栅格影像上采集得到的,相互之间的套合不成问题;如果线划矢量图数据由其他来源数字化得到,栅格影像和矢量线划就难以完全重合。这种地图具有一定的数学基础,有丰富的光谱信息和几何信息,又有行政界线和其他属性信息,可视化效果很好。如目前的核心要素DLG与DOM套合的复合图已逐渐成为一种主流的数字地图。
(2)遥感图像与DEM的融合
这是目前生产数字正射影像地图DOM常用的一种方法。在JX-4A、VIRTUOZO等数字摄影测量系统中,利用已有的或经影像定向建模获取的DEM,对遥感图像进行几何纠正和配准。因为DEM代表精确的地形信息,用它来对遥感、航空影像进行各种精度纠正,可以消除遥感图像因地形起伏造成图像的像元位移,提高遥感图像的定位精度;DEM还可以参与遥感图像的分类,在分类过程中,要收集与分析地面参考信息和有关数据,为了提高分类精度,同样需要用DEM对数字图像进行辐射校正和几何纠正。
3.矢量栅格一体化结构
(1)矢量栅格一体化概念
目前GIS的一个发展方向是建立一体化结构的数据库,要求将空间数据、属性数据、影像数据和数字高程模型(DEM)数据统一管理,称为“四库合一”。一体化存储结构是把空间坐标、拓扑关系及属性数据都构造在相同或分离的关系表中(如图5-2-26)。在这种存储结构中,空间与属性之间的关系被清晰地定义。关键字被用来把属性和空间位置信息连接起来,拓扑被用来使所有的空间要素彼此连接。但是,空间数据记录是可变长度记录,这些记录需要存储不同数量的坐标点,而现存的RDBMS被设计处理为固定的长度记录;空间数据所需要的处理操作,现存的RDBMS查询语言是难以完成的;空间数据需要完善绘图功能,现存的RDBMS是不支持的。总之,一体化的存储结构要求必须对现有的商品化的RDBMS进行一定的扩展(如图5-2-27)。在关系数据库管理系统中进行扩展,使之能够直接存储和管理非结构化的空间数据。这种扩展的空间对象管理模块主要解决了空间数据变长记录的管理,且由数据库软件商进行扩展。但是它仍然没有解决对象的嵌套问题,空间数据结构也不能由用户任意定义,用户必须在RDBMS环境中实施自己的数据类型,使用上仍然受到一定限制,对有些应用将相当复杂。
图5-2-26 空间数据与属性数据连接
对于面状地物,矢量数据用边界表达的方法将其定义为多边形的边界和一内部点,多边形的中间区域是空洞。而在基于栅格的GIS中,一般用元子空间充填表达的方法将多边形内任一点都直接与某一个或某一类地物联系。显然,后者是一种数据直接表达目标的理想方式。对线状目标,以往仅用矢量方法表示。
如果将矢量方法表示的线状地物也用元子空间充填表达,就能将矢量和栅格的概念统一起来,进而发展矢量栅格一体化的数据结构。假设在对一个线状目标数字化采集时,恰好在路径所经过的栅格内部获得了取样点,这样的取样数据就具有矢量和栅格双重性质。一方面,它保留了矢量的全部性质,以目标为单元直接聚集所有的位置信息,并能建立拓扑关系;另一方面,它建立了栅格与地物的关系,即路径上的任一点都直接与目标建立了联系。
图5-2-27 一体化空间数据库的框架结构
因此,可采用填满线状目标路径和充填面状目标空间的表达方法作为一体化数据结构的基础。每个线状目标除记录原始取样点外,还记录路径所通过的栅格;每个面状地物除记录它的多边形周边以外,还包括中间的面域栅格。
无论是点状地物、线状地物还是面状地物,均采用面向目标的描述方法,因而它可以完全保持矢量的特性,而元子空间充填表达建立了位置与地物的联系,使之具有栅格的性质。这就是一体化数据结构的基本概念。从原理上说,这是一种以矢量的方式来组织栅格数据的数据结构。
(2)三个约定
为了设计具有栅格性质的点、线、面状地物具体的一体化数据结构,需要作如下约定:
①地面上的点状地物是地球表面上的点,它仅有空间位置,没有形状和面积,在计算机内部仅有一个位置数据。
②地面上的线状地物是地球表面的空间曲线,它有形状但没有面积,它在平面上的投影是一连续不间断的直线或曲线,在计算机内部需要用一组栅格像元填满的整个路径表达。
③地面上的面状地物是地球表面的空间曲面,并具有形状和面积,它在平面上的投影由一组填满路径的栅格像元表达的边界线和它包围的内部区域组成。
(3)细分格网法
由于一体化数据结构是基于栅格的,表达目标的精度必然受栅格尺寸的限制。可利用细分格网法提高点、线(包括面状地物边界)数据的表达精度,使一体化数据结构的精度达到或接近矢量表达精度。
如图5-2-28所示,为了提高一体化数据结构的精度,只对有点、线通过的基本格网(其大小与通常基本栅格大小一致)内部再细分成256×256细格网(精度要求低时,可细分为16×16个细格网)。为了与整体空间数据库的数据格式一致,基本格网和细格网均采用十进制线性四叉树编码,将采样点和线性目标与基本格网的交点用两个Morton码表示(简称M码)。用M1表示该点(采样点或附加的交叉点)所在基本格网的地址码,用M2表示该点对应的细分格网的Morton码,亦即将一对(X,Y)坐标用两个Morton码代替。例如X=210.00,Y=172.32,可转换为M1=275,M2=2690。
图5-2-28 细分格网
这种方法可将栅格数据的表达精度提高256倍,而存储量仅在有点、线通过的格网上增加两个字节(当细分为16×16格网时,存储量仅增加一个字节,精度提高16倍)。
在数据覆盖范围大的情况下,还应划分粗格网用来建立空间索引,对每个粗格网再分级细化为基本格网、细格网。
对线目标而言,除了用Morton码记录它的原始采样“拐”点的位置以外,还记录线目标穿过每个基本格网的交线的位置。同理,多边形的边界也用Morton码同时记录它的采样“拐”点和边界线与基本格网的交点位置,并且以链指针记录多边形的内部的栅格。这样,作为实体,每个实体有唯一的标识号、地物类型的编码以及表示其空间位置的“坐标”(基本格网和细分格网的Morton码M1,M2),它可以连接属性甚至空间拓扑关系,所以它具有完全的矢量特性。与此同时,由于用栅格像元充填了线性目标和多边形边界的路径以及多边形的内部空间,实际上是进行了栅格化,因而具有栅格的性质,可以进行各种栅格操作。关于矢量栅格一体化数据结构的详细内容可参阅《整体SIS的数据组织与处理方法》(龚健雅,1993)一书。
(4)矢栅一体化数据结构的设计
线性四叉树编码、三个约定和多级格网法为建立矢栅一体化的数据结构奠定了基础。线性四叉树是基本数据格式,三个约定设计了点、线、面数据结构的基本依据,细分格网法保证了足够的精度。
①点状地物和节点的数据结构
根据对点状地物的基本约定,点仅有位置,没有形状和面积,不必将点状地物作为一个覆盖层分解为四叉树,只要将点的坐标转化为地址码M1和M2,而不管整个构架是否为四叉树。这种结构简单灵活,便于点的插入和删除,还能处理一个栅格内包含多个点状目标的情况。
所有的点状地物以及弧段之间的节点数据用一个文件表示,其结构见表5-2-20。可见,这种结构几乎与矢量结构完全一致。
表5-2-20 点状地物和节点的数据结构
②线状地物的数据结构
一般认为,用四叉树表达线状地物是困难的。但采用栅格像元填满整条路径的方法,它的数据结构将变得十分简单。根据对线状地物的约定,线状地物有形状但没有面积,没有面积意味着线状地物和点状地物一样,不必用一个完全的覆盖层分解四叉树,而只要用一串数据表达每个线状地物的路径即可,表达一条路径就是要将该线状地物经过的所有栅格的地址全部记录下来。一个线状地物可能由几条弧段组成,所以应先建立一个弧段数据文件,如表5-2-21所示。
表5-2-21 弧段的数据结构
表5-2-21中的起节点号和终节点号是该弧段的两个端点,它们与表5-2-20连接可建立弧段与节点间的拓扑关系。表5-2-22中的中间点串不仅包含了原始采样点(已转换成用M1、M2表示),而且包含了该弧段路径通过的所有格网边的交点,它所包含的码填满了整条路径。为了充分表达线性地物在地表的空间特性,增加高程Z分量。一条线性地物是在崎岖的地面上通过的,只有记录该曲线通过的DEM格网边上的交点的坐标和高程值才能较好地表达它的空间形状和长度。
表5-2-22 线状地物的数据结构
虽然这种数据结构比单纯的矢量结构增加了一定的存储量,但它解决了线状地物的四叉树表达问题,使它与点状、面状地物一起建立了统一的基于线性四叉树编码的数据结构体系。这对于点状地物与线状地物相交,线状地物之间的相交,以及线状地物与面状地物相交的查询问题变得相当简便和快捷。
有了弧段数据文件,线状地物的数据结构仅是它的集合表示,如表5-2-22。
③面状地物的数据结构
根据对面状地物的约定,一个面状地物应记录边界和边界所包围的整个面域。其中边界由弧段组成,它同样引用表5-2-21中的弧段信息。面域信息则由线性四叉树或二维行程编码表示。
同一区域的各类不同地物可形成多个覆盖层,例如建筑物、耕地、湖泊等可形成一个覆盖层,土地利用类型、土壤类型又可形成另外两个覆盖层。规定每个覆盖层都是单值的,即每个栅格内仅有一个面状地物的属性值。每个覆盖层可用一棵四叉树或一个二维游程编码来表示。为了建立面向地物的数据结构,做这样的修改,二维游程编码中的属性值可以是叶节点的属性值,也可以是指向该地物的下一个子块的循环指针。即用循环指针将同属于一个目标的叶节点链接起来,形成面向地物的结构。
图5-2-29是链接情况,表5-2-23、表5-2-24是对应的二维游程编码、带指针的二维游程码。表5-2-24中的循环指针指向该地物下一个子块的地址码,并在最后指向该地物本身。这样,只要进入第一块就可以顺着指针直接提取该地物的所有子块,从而避免像栅格数据那样为查询某一个目标需遍历整个矩阵的情况,大大提高了查询速度。
图5-2-29 链接情况
表5-2-23 二维游程编码
表5-2-24 带指针的二维游程编码
对于面状地物的边界栅格,采用面积占优法确定公共格网值,如果要求更精确地进行面积计算或叠置运算,可进一步引用弧段的边界信息。
面状地物的数据结构包括表5-2-21的弧段文件、表5-2-24的带指针二维游程表和表5-2-25的面文件。
表5-2-25 面文件
这种数据结构是面向地物的,具有矢量的特点。通过面状地物的标识号可以找到它的边界弧段并顺着指针提取所有的中间面块。同时它又具有栅格的全部特性,二维游程本身就是面向位置的结构,表5-2-24中的Morton码表达了位置的相互关系,前后M码之差隐含了该子块的大小。给出任意一点的位置,都可在表5-2-24中顺着指针找到面状地物的标识号,从而确定是哪一个地物。
④复杂地物的数据结构
由几个或几种点、线、面状简单地物组成的地物称为复杂地物。例如将一条公路上的中心线、交通灯、立交桥等组合为一个复杂地物,用一个标识号表示。复杂地物的数据结构如表5-2-26所示。
表5-2-26 复杂地物的数据结构
矢量结构与栅格结构各有优点和缺点,所以许多新推出的系统支持两种数据结构,以吸收矢量和栅格结构各自的优点,补偿其缺点。两者结合所采取的方式主要有三种形式:矢量与栅格矩阵结合,矢量与游程编码结合,矢量与四叉树结合。特别是四叉树数据结构最近几年引起了许多学者的重视,提出了几种矢量与四叉树结合的方案,其主要目的是解决矢量数据与四叉树直接交互的问题,从而使得应用系统不仅能与格网DEM和遥感数据具有整体结合的能力,而且能解决各类地物空间位置的相关分析问题。