ESRI的Geodatabase数据结构设计指导:
一 对象建模与GeoDatabase
1 用GIS建模对象
地理信息系统(GIS)的目标是提供地理框架以支持地球资源智能利用的决策和管理人
造环境。
大部分时候,一个GIS以地图和符号的形式提供信息。观察提供的地图,它提供你这样一些识:事物在那里,他们是什么,怎样通过道路或者其他交通方式到达那儿,以及领接和领近的事物事什么。GIS也能够通过与个人电脑上的地图进行交互对话来传播信息。这一交互可以揭示纸质地图上不明显的信息。
比如,我们可以查询一个feature已知的所有属性,建一个连接网络中两点所有事物的列
表,以及对诸如水流、旅游时间或污染扩散等测量质量的模拟。显示和分析用的信息取决于你如何个世界上的地理物体。
建模一个系统的诸多途径
我们与在这个世界上的物体进行的交互是各种各样的,你可以通过很多途径为他们建模。
例如:河流。河流的设计就很有趣,因为它们是自然对象,它们为交通而用,它们划定政治和行政区域,它们是地表重要的特征。可以想到很多种方法来在GIS中建模河流。
地图用途指导数据模型
很明显,即使一个普通的地理物体比如河流也能够在GIS中通过多种方式表达。没有一种模型是一定优越的。你想要创建的地图类型和要解决的问题领域将指导那种模型最佳。
2 地理数据模型进展
地理数据模型是真实世界的抽象,它使用一系列数据对象来支持地图的显示、查询、编辑和分析。
ArcInfo 介绍了一种新的面向对象数据模型以及它对于表达自然行为和特征关系的优势。要理解这种新模型,我们首先回顾一下三代地理数据模型。
I CAD数据模型
最早计算机化的地图系统绘制矢量地图是使用阴极射线管射出的线,绘制栅格地图是使用线划打印机的套印符号。由此起源,60和70年代产生图形硬件和绘图软件的优化,能够以合理的制图逼真度渲染地图。
在这个时代,地图主要由普通的CAD(计算机辅助制图)软件绘制。CAD数据模型以二进制文件格式存储地理数据,并以点、线划和面域的形式表达。很少属性信息能保存在这些文件里;地图图层和注记是主要的属性表达方式。
II Coverage数据模型
1981年,ESRI推出它第一个商业化GIS软件ArcInfo,它应用了第二代地理数据模型—coverage数据模型(也称为地理关系数据模型)。这种模型两个关键方面:
* 空间数据与属性数据相结合。空间数据存储为索引化二进制文件,它为显示和存取做了优化。属性数据存储在表里,有一定数量的行,行数等同于二进制文件中的Feature数量,通过共同的唯一码组织在一起。
* 能够存储矢量feature的拓扑关系。这意味着一个线状的空间数据纪录包含了以下信息:哪些节点界定了这条线,通过推断可知哪些线相连,还有哪些多边形在其左边和右边。
coverage数据模型的主要进步在于给与用户自定义Feature表的能力;不仅仅可以添加字段,而且相关数据库可以建立为外部数据库表。
由于当时计算机硬件和数据库的限制,空间数据直接存储入关系数据库不可行。因此更好的选择是,coverage数据模型结合了索引化二进制文件的空间数据和表状属性数据。
尽管这种空间数据与属性数据的分割是一种折衷选择,coverage数据模型仍成为GIS主
流数据模型。这是有很好理由的——coverage数据模型使得高性能GIS成为可能,存储了拓
扑关系便于改进地理分析和更加精确的数据录入。
coverage数据模型的局限
coverage数据模型有一个重要的缺陷——feature由同样的点、线、多边形集合聚合而成,它们表达一般的行为。代表一条路的线的行为和代表一条小溪的线的行为是一样的。
coverage数据模型支持的一般行为导致一个数据集的拓扑完整性。一个例子,如果加一条线穿过一个多边形,它就会自动分为两个多边形。但是也需要支持溪流、道路和其他真实世界物体的特殊行为。例如,一条河流向一个方向流动,当两条河流段合流时,下游河段是两股上游水流的相加;当
两条道路相交,在两者接合处应该有一个交通交叉口,除非其中一条道路是立交或隧道。
在coverage中自定义feature
利用coverage数据模型,ArcInfo应用开发者通过AML所写的宏代码在为feature加入这类行为方面取得了一些显著的成功,建立了许多成功的大型产业应用。然而,随着应用变得越来越复杂,很明显需要更好的方法来结合feature和behavior。其问题是开发者要保持应用代码与feature类的同步性——这可不是容易的任务。一种新的能够紧密结合behavior和feature的地理数据模型的时代到来了。
III Geodatabase 数据模型
ArcInfo推出一种新的面向对象数据模型称为geodatabase数据模型。这种新的数据模型的定义目的在于使得GIS数据集里的feature更加智能,方法就是通过赋予它们自然行为以及允许feature间任何种类的关系。geodatabase数据模型使得物理数据模型与其逻辑数据模型更加接近。geodatabase中
的数据对象最接近于逻辑模型中定义的,比如说所有者、建筑物、地块和道路。
进一步,geodatabase数据模型让用户不用写一行代码就可以实现大部分自定义行为。大部分行为是通过ArcInfo提供的领域、确认规则和其他函数的框架实现的。仅仅在为更专业的feature行为建模时才需要撰写代码。
对象交互情境
为了让你对面向对象数据模型重要性有一个认识,这里有举了一个情境,它表明了通常你需要对feature所作的*作。从这个情境,我们仔细考察面向对象数据模型的长处以及总览一下geodatabase数据模型的特性。
(1)填加编辑feature
当你为你的GIS数据库填加地理feature时,你要保证feature根据规则进行正确的布置,就比如:
* 你赋予一个属性的值必须在一个可预测可允许的值的集合内。一个土地地块只能赋予一定的土地用途比如“居住”“农业”或者“工业”。
* 一定feature的集合遵从于他们自然的空间组合。一个河流系统应该总是往低处流。汇流点的下游水流是上游水流的总和。
* feature的几何形状遵从它的逻辑布局。构成道路的直线和曲线必须相切。建筑物的拐角绝大部分是直角。
(2)feature间的关系
地球上所有物体都与其他物体有关系。从GIS角度看,这些关系可以分为三类:拓扑关系、空间关系和一般关系。
有些例子可以说明这三种关系:
* 当你在一个电力事业系统中编辑feature时,你要确定主线和次线的端点正好接上,你就能够在电力网络上实施跟踪分析。当在一个相互连接的系统中装载和编辑feature时,就定义了一系列的拓扑关系。
* 当你*作一幅有建筑、街区和学校区的地图时,你可能想要判断哪一个地块有一个特殊的建筑,所有包含学校区的建筑集合,以及没有建筑的街区。一个GIS的基本功能就是判断一个feature是否与另一个feature是包含、相接、叠加。空间分析从feature的几何形体推断而来。
* 有一些对象之间的关系并不表现在地图上。一个地块与一个所有者有关系,但是这个所有者并不是地图上的feature。一般关系联接了地块和所有者。一些地图上的feature有关系,但是他们的空间关系并不明显。一个需给电表在一个变压器附近,但与其没有接触。在人口稠密地区电表和变压器空间上的接近可能不能保证其可靠性,因此一般关系将两个feature联接在一起。
(3)制图显示
大部分时候,你能够以预先定义好的符号在地图上绘制feature,但有时你想要更多地控feature如何被绘制。这里谈一些特殊的绘图行为。
* 当显示一条等高线时,你想要它的高程值随等高线平滑段注记,要以一个平均的间
隔比如4英寸注记,以及不要遮掩到其他feature。
* 当你在详细地图上绘制道路时,你想道路以平行线绘制,并有着流线型的道路交叉
口。
* 当多种电线布置在同一个公用事业管道时,你想以一列平行线将其延展表达,平行
线要以地图单位为标准间隔。
(4)交互分析
动态地图显示需要用户触及feature找到属性、关系以及进行分析。举一些范例,这些范例可能是你在选择feature时想要知道的。
* 触及地图上feature,唤起自定义窗体来查询和更新其属性。
* 当规划需要维护的线路时,选择电力网络的一部分,找到受影响的下游客户,邮寄通知他们。
Geodatabase数据模型的优势
贯穿这些情境的主线就是将面向对象建模方法应用到feature中去是非常有用的。面向对象建模方法让你能够更自然的描绘feature,其途径就是让你定义自己的对象类型,定义拓扑、空间和一般关系,以及紧抓住这些对象如何与其它对象相互作用。这是应用geodatabase数据模型的一些优势:
* 数据录入和编辑更加精确。由于对数据的录入和编辑大多数能被智能的检测行为所保护 ,所以几乎不会犯什么错误。对于很多用户来说,光是这一点就可以成为接受geodatabase数据模型的原因了。
* 用户*作更直观的对象。经过适当的设计,一个geodatabase包含的数据对象与用户数据的模型是一致的。用户*作的是他们感兴趣的对象诸如变压器、道路和湖泊,代替了通用的点、线和面。
* feature拥有更加丰富的上下文关系(context)。有了拓扑关联、空间表达和一般关系,你不仅定义了一个feature的特性,而且还有它与其他feature的context。这样就在其他相关feature动、改变或删除时,有助于说明整个feature集合到底发生了什么。这种context也让你可以定位或查找到与一个feature相关的另一个feature。
* 可以制作更优质的地图。能更多的控制feature的绘制 ,也能增加智能的绘图行为。能把复杂的绘图方法直接应用到ArcInfo的绘图应用程序中,而且通过编写软件代码还能执行高度专业化的绘图方法。
* 在地图上显示的特征是动态的。当在ArcInfo中对feature进行处理时 ,这些feature能对邻接feature的改变做出相应的反应。你也能使feature与定制的查询或分析工具发生联系。
* 定义了更好的feature外形。geodatabase数据模型用直线、圆弧、椭圆弧和贝齐而(Bezier)曲线来定义feature的外形。
* feature集合是连续的。通过设计,geodatabase数据模型能容纳非常巨大的feature集合而不需要其他的空间分区或块 (title)。
* 许多用户能同时编辑地理数据。geodatabase数据模型支持许多人能在本地编辑feature ,然后对出现的任何差异进行处理使之达成一致。当然,你也可以不用面向对象模型实现上述一些优点,但你可能要面对这样一个缺憾:
——你需要写外部代码,这些外部代码与feature松散地相联,而且可能复杂和错误geodatabase数据模型一个基本的优点在于你拥有一个框架,在这个框架里你可以尽可能容易地创建与真实世界对象交互和行为更加接近的智能feauter。
3 Geodatabase,地理数据的存储
一个geodatabase能够容纳四种地理数据表示:
* 矢量数据表示feature,
* 栅格数据表示图像、网格化(gridded)专题数据和表面(surface)
* 不规则三角网(TIN)表示表面
* 定位器(locator)和地址用来根据地址查找一个地理地点。一个geodatabase可以在任一个商用关系数据库里存储所有这几种地理数据表示。这就使得地理信息主要由信息技术专业人员管理,也就让ArcInfo跟上了数据库技术的发展。
(1) 用矢量数据表示feature
世界上很多feature都有很好的外形定义。矢量数据用一组带有关联属性的有序坐标精确简洁地表示了这些feature的外形。这种表示支持几何运算,例如,计算长度和面积