7.3.1. 矢量数据结构 #
定义 #
地理信息系统中另一种最常见的图形数据结构为矢量结构, 即通过记录坐标的方式尽可能精确地表示点、线、多边形等地理实体,坐标空间设为连续, 允许任意位置、长度和面积的精确定义,事实上,其精度仅受数字化设备的精度和数值记录字长的限制, 在一般情况下,比栅格结构精度高得多。
对于点实体,矢量结构中只记录其在特定坐标系下的坐标和属性代码; 对于线实体,在数字化时即进行量化,就是用一系列足够短的直线首尾相接表示一条曲线, 当曲线被分割成多而短的线段后,这些小线段可以近似地看成直线段, 而这条曲线也可以足够精确地由这些小直线段序列表示,矢量结构中只记录这些小线段的端点坐标, 将曲线表示为一个坐标序列,坐标之间认为是以直线段相连, 在一定精度范围内可以逼真地表示各种形状的线状地物; “多边形”在地理信息系统中是指一个任意形状、边界完全闭合的空间区域。 其边界将整个空间划分为两个部分:包含无穷远点的部分称为外部,另一部分称为多边形内部。 把这样的闭合区域称为多边形是由于区域的边界线同前面介绍的线实体一样, 可以被看作是由一系列多而短的直线段组成,每个小线段作为这个区域的一条边, 因此这种区域就可以看作是由这些边组成的多边形了。
跟踪式数字化仪对地图数字化产生矢量结构的数字地图,适合于矢量绘图仪绘出。 矢量结构允许最复杂的数据以最小的数据冗余进行存储,相对栅格结构来说,数据精度高,所占空间小, 是高效的空间数据结构。
特点 #
矢量结构的特点是: 定位明显、属性隐含,其定位是根据坐标直接存储的,而属性则一般存于文件头或数据结构中某些特定的位置上, 这种特点使得其图形运算的算法总体上比栅格数据结构复杂的多,有些甚至难以实现, 当然有些地方也有所便利和独到之处,在计算长度、面积、形状和图形编辑、几何变换操作中, 矢量结构有很高的效率和精度,而在叠加运算、邻域搜索等操作时则比较困难。
7.3.2. 编码方法 #
点实体 #
对于点实体和线实体的矢量编码比较直接,只要能将空间信息和属性信息记录完全就可以了。 点是空间上不能再分的地理实体,可以是具体的或抽象的,如地物点、文本位置点或线段网络的结点等, 由一对x、y坐标表示。 图7-8-a表示了点的矢量编码的基本内容。
线实体 #
线实体主要用来表示线状地物(如公路、水系、山脊线等)符号线和多边形边界, 有时也称为“弧”、“链”、“串”等,其矢量编码一般包括以下内容, 图7-8-b为线实体矢量编码的基本内容。
其中唯一标识码是系统排列序号; 线标识码可以标识线的类型; 起始点和终止点号可直接用坐标表示; 显示信息是显示时的文本或符号等; 与线相联系的非几何属性可以直接存储于线文件中,也可单独存储,而由标识码联接查找。 图 7.9 点实体的编码,线实体的编码 # 
多边形 #
多边形数据是描述地理信息的最重要的一类数据。 在区域实体中,具有名称属性和分类属性的,多用多边形表示,如行政区、土地类型、植被分布等; 具有标量属性的,有时也用等值线描述(如地形、降雨量等)。
多边形矢量编码不但要表示位置和属性,更为重要的是要能表达区域的拓扑性质,如形状、邻域和层次等, 以便使这些基本的空间单元可以作为专题图资料进行显示和操作,由于要表达的信息十分丰富, 基于多边形的运算多而复杂,因此多边形矢量编码比点和线实体的矢量编码要复杂得多,也更为重要。
多边形矢量编码除有存储效率的要求外,一般还要求所表示的各多边形有各自独立的形状, 可以计算各自的周长和面积等几何指标; 各多边形拓扑关系的记录方式要一致,以便进行空间分析; 要明确表示区域的层次,如岛-湖-岛的关系等。 因此,它与机助制图系统仅为显示和制图目的而设计的编码有很大不同。
1)坐标序列法(Spaghetti方式) 图 7.10 坐标序列法表示的多边形 # 
由多边形边界的x、y坐标对集合及说明信息组成,是最简单的一种多边形矢量编码, 如图7-9记为以下坐标文件:
1 0 :x 1 ,y 1 ;x 2 ,y 2 ;x 3 ,y 3 ;x 4 ,y 4 ;x 5 ,y 5 ;x 6 ,y 6 ;x 7 ,y 7 ;x 8 ,y 8 ;x 9 ,y 9 ;x 10 ,y 10 ;x 11 ,y 11 ;
2 0 :x 1 ,y 1 ;x 12 ,y 12 ;x 13 ,y 13 ;x 14 ,y 14 ;x 15 ,y 15 ;x 16 ,y 16 ;x 17 ,y 17 ;x 18 ,y 18 ;x 19 ,y 19 ;x 20 ,y 20 ;x 21 ,y 21 ;x 22 ,y 22 ;x 23 ,y 23 ;x 8 ,y 8 ;x 9 ,y 9 ;x 10 ,y 10 ;x 11 ,y 11 ;
3 0 :x 33 ,y 33 ;x 34 ,y 34 ;x 35 ,y 35 ;x 36 ,y 36 ;x 37 ,y 37 ;x 38 ,y 38 ;x 39 ,y 39 ;x 40 ,y 40 ;
4 0 :x 19 ,y 19 ;x 20 ,y 20 ;x 21 ,y 21 ;x 28 ,y 28 ;x 29 ,y 29 ;x 30 ,y 30 ;x 31 ,y 31 ;x 32 ,y 32 ;
5 0 :x 21 ,y 21 ;x 22 ,y 22 ;x 23 ,y 23 ;x 8 ,y 8 ;x 7 ,y 7 ;x 6 ,y 6 ;x 24 ,y 24 ;x 25 ,y 25 ;x 26 ,y 26 ;x 27 ,y 27 ;x 28 ,y 28 ;
坐标序列法文件结构简单,易于实现以多边形为单位的运算和显示。 这种方法的缺点是:
多边形之间的公共边界被数字化和存储两次,由此产生冗余和碎屑多边形;
每个多边形自成体系而缺少邻域信息,难以进行邻域处理,如消除某两个多边形之间的共同边界;
岛只作为一个单个的图形建造,没有与外包多边形的联系;
不易检查拓扑错误。这种方法可用于简单的粗精度制图系统中。
2)树状索引编码法
该法采用树状索引以减少数据冗余并间接增加邻域信息,方法是对所有边界点进行数字化,将坐标对以顺序方式存储, 由点索引与边界线号相联系,以线索引与各多边形相联系,形成树状索引结构。
图7-10和图7-11分别为图7-9的多边形文件和线文件树状索引示意图。 其文件结构如下: 图 7.11 线与多边形之间的树状索引 # 图 7.12 点与边界线之间的树状索引 # 

采用上述的树状结构,图7-9的多边形数据记录如下:
点文件
点号 | 坐标 |
1 | x:sub:`1`,y:sub:`1` |
2 | x:sub:`2`,y:sub:`2` |
… | … |
40 | x:sub:`40`,y:sub:`40` |
线文件
线号 | 起点 | 终点 | 点号 |
I | 1 | 6 | 1,2,3,4,5,6 |
II | 6 | 8 | 6,7,8 |
… | … | … | … |
X | 33 | 33 | 33,34,35,36,37,38,39,40,33 |
多边形文件
多边形编号 | 多边形边界 |
1 0 | I,II,IX |
2 0 | III,VII,VIII,IX,X |
3 0 | X |
4 0 | IV,VI,VII |
5 0 | II,III,IV,V |
树状索引编码消除了相邻多边形边界的数据冗余和不一致的问题, 在简化过于复杂的边界线或合并相邻多边形时可不必改造索引表, 邻域信息和岛状信息可以通过对多边形文件的线索引处理得到,但是比较繁琐,因而给相邻函数运算,消除无用边, 处理岛状信息以及检查拓扑关系带来一定的困难,而且两个编码表都需要以人工方式建立,工作量大且容易出错。
3)拓扑结构编码法
要彻底解决邻域和岛状信息处理问题必须建立一个完整的拓扑关系结构,这种结构应包括以下内容: 唯一标识,多边形标识,外包多边形指针,邻接多边形指针,边界链接,范围(最大和最小x、y坐标值)。 采用拓扑结构编码可以较好地解决空间关系查询等问题,但增加了算法的复杂性和数据库的大小。
矢量编码最重要的是信息的完整性和运算的灵活性,这是由矢量结构自身的特点所决定的, 目前并无统一的最佳的矢量结构编码方法,在具体工作中应根据数据的特点和任务的要求而灵活设计。
DIME(双重独立坐标地图编码,Dual Independent Map Encoding)编码系统
DIME是美国人口调查局在人口调查的基础上发展起来的,它通过有向编码建立了多边形、边界、节点之间的拓扑关系,DIME编码成为其它拓扑编码结构的基础。