地理信息系统是一个丰富的数据宝库,这些数据是自然features和facilities,比如交通和公用事业网络。当这些数据以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的外形。这种表示支持几何运算,例如,计算长度和面积,识别重叠和交叉,找到相邻的或附近的其他的feature。矢量数据可以用维数进行分类
* 点是零维的,它表示地理特征太小而不能用线或面来描述。点是用单个x,y坐标值来存储的。
* 线是一维的 ,它表示地理特征太狭窄而不能用面来描述。线是用一组有序的x,y坐标值来存储的。一条线段可以是直的、圆的、椭圆的或曲线的。
* 面是二维的,它表示宽阔的地理特征。面用一组围绕面的线段来存储,这些线段构成一个封闭的面。另外一种矢量数据类型是标注。这些标注是用于显示相关feature的名字和属性的描述性符号。
在geodatabase中,矢量数据有一个利用维数和关系直接存储feature的结构。一个feature数据集(dataset)是存储空间实体(feature)、非空间实体(对象)和它们之间关系的容器。拓朴关系用几何网络和平面图表示。geodatabase也存储一些有效的规则和域,当feature被创建或更新时用来确保它们的属性在与它们相关联的feature和对象的上下文关系(context)中继续有效。
(2) 用栅格表示网格化(gridded)数据。
收集在geodatabse中的许多数据都是栅格型的,这是因为摄影机和成像系统是以像素值的形式将数据记录在二维的网格(grid)或光栅中的。像素是组成栅格的基本单元,它的值能描述多种数据。像素能够为一部分光谱存储光的反射,为图像存储颜色值,以及存储专题属性,比如植物类型,或表面值,或海拔高度。
(3) 用TIN表示表面
一个不规则三角网(TIN)就是一个表面模型。一个geodatabase在存储TINs时,将其作为一个带有高程值的节点和带有边(edge)的三角形的整体来对待。通过三角形的边,TIN的地理扩展能够插入任何有高程值(或z值)的点。TIN支持表面分析,比如:流域研究;在一个观测点能看到表面的哪些区域;表面特征的描述(如山脉、河流和山峰)。TIN还能描述自然地形的起伏。
(4) 用定位器(locator)查找地址
或许最普通的地理工作就是通过地址定位一个地方了。geodatabase能存储定位器和地址。定位器是一种利用全国邮政协定将一个地址转换成地理位置的方法。你可以找到任意这些点在地图上相对应的点feature。
4 面向对象数据模型中的feature
ArcInfo与前面版本不同之处在于将面向对象方法学应用于地理数据建模。开发者通过称为“geodatabase数据获取对象”(geodatabase data access objects)的面向对象软件类框架来操作数据对象。
面向对象有三个关键特点:多态(polymorphism)、封装(encapsulation)和继承(inheritance)。
* 多态是指一个对象类的行为(或方法)能够适应类的变化。举一个例子,不管是geodatabase、coverage还是shapefile里,feature的核心行为比如绘制、添加和删除操作绝大部分是一样的。
* 封装是指类只能通过定义好的软件方法集才能获取,并组织成软件接口。geodatabase数据获取对象掩盖了数据对象内部细节并提供一个标准的编程接口。
* 继承是指对象类的定义能够包含其他对象类的行为和新增的行为。你可以在ArcInfo里创建一个自定义的feature类型,并继承标准feature的行为。比如,一个变压器对象可以从一个标准的ArcInfo feature类型比如简单的交叉点(junction)feature扩展(也称sub-type)而来。
统一数据模型
geodatabase数据获取对象是一种软件技术,它提供对各种数据源(比如geodatabase、coverage和shapfile)的地理数据的统一获取。ArcInfo开发者通过一系列数据对象,比如datasets、tables、feature classes、rows、objects和features,来操作地理数据。这些对象都包含了一个共用一致的地理数据视图。
由于有了这种统一数据模型,ArcInfo用户能够最大程度以同样的方式操作geodatabase、coverage和shapefile。统一数据模型通过强调数据的共有特性来简化了数据的操作。
可扩展feature
geodatabase一个重要的方面就是你可以有选择地创建自定义feature,比如变压器、道路,从而代替了点和线。对于ArcInfo的用户来说,这就意味着变压器或者道路不仅拥有标准点feature和线feature的标准绘制、查询和编辑行为,而且还有附加的行为。你可以规定变压器必须接触到一个电线杆以及必须通过这个电线杆垂直于电力线。或者,当编辑一条道路时,所有它的分段必须相切。数据建模者能够使用标准的feature类型来实现丰富的数据模型。对于高级应用来说,开发者能够扩展标准的feature类型,使用面向对象的类型继承技术来创建自定义feature。
任一个你创建的自定义feature拥有同样的性能和功能,就像ArcInfo提供的标准feature类型那样。这就为复杂应用的开发提供了无限的机会。
feature和面向对象
geodatabase中得feature实现为一组相关联的表。其中一些表表达了feature的集合。其他表表示了feature间关系、有效性规则和值域.ArcInfo管理这一结构和这些表的整合,并通过地理数据获取对象提供了面向对象的地理数据。所有的用户和绝大部分开发者可以不用了解也无需关心geodatabase的内部结构细节。ArcCatalog是一个用来创建、修改和精化geoudatabase结构的用户接口应用。数据的对象视图隐藏了geodatabase大部分数据库物理结构,使你只需关注如何建立一个地理数据模型。如想获取geodatabase物理实现的更多信息,可以阅读《SDE概念指南》
5 提供(serving)地理数据
ArcInfo通过ArcSDE(Arc空间数据库引擎)的服务来存取地理数据。ArcSDE是一种软件技术,它让你能够创建geodatabase,范围从小规模到很大规模的空间数据集合。它还提供与你选择的关系数据库的开放接口。
个人型和多用户型geodatabase
ArcSDE有两种:个人型和多用户型。
个人型ArcSDE构建在ArcInfo中,适合面向项目型的GIS。个人型ArcSDE提供的geodatabase以Microsoft Access来实现。当你安装了ArcInfo,也就安装上了Microsoft Jet,它为ArcSDE提供服务以创建和更新Access数据库。你不需要单独安装Microsoft Access软件产品。对于大型企业来说,ArcSDE是一种对于ArcInfo的多用户数据存取扩展。ArcSDE安装在一个数据服务器上,这个服务器用来管理你单位的关系数据库。通过TCO/IP网络,ArcSDE提供geodatabase给运行在个人电脑上的ArcInfo应用系统。ArcSDE可以配置在Windows NT或者UNIX上。
个人型ArcSDE使得地理数据能够在本地存取。它无需系统管理,并且对ArcInfo用户是不可见的。ArcSDE允许地理数据的远程存取,也允许多个用户浏览编辑同样的地理数据。ArcSDE由你的数据库管理者集中调控和管理。
开放和可升级的数据服务
ArcSDE允许你设定和配置从小规模到很大规模的geodatabase。如果你操作中等规模的数据集,你可以配置你自己的Access数据库,这一数据库是通过ArcCatalog里的个人型ArcSDE创建的。这种配置使得一些优良性能受到限制,数据集上限大约为100,000个对象,而且只支持一个编辑用户和几个同时的浏览用户。如果需要更多需求的数据集或者要支持更多即时编辑用户,你可以在关系数据库里配置对于ArcInfo的ArcSDE扩展,这对于你的机构来说是再适合不过了。
ArcSDE是一个开放的体系,有这样一些自由:
* 在选择数据库级别方面你有无限自由度
* 可以为不同部门配置不同数据库
* 可以从UNIX或Windows NT里得到数据
* 可以集中管理geodatabase
* 可以从其他应用系统中得到数据,诸如MapObject、ArcView和CAD应用系统
* 可以建构符合开放GIS协会(OGC)规定的应用系统
* 可以建立SQL应用来存取geodatabase中的表和列
6 获取地理数据
在geodatabase里开发者能够以三个基本级别获取数据:
* 通过geodatabase数据获取对象,它是一个ArcObject的子集,也是作为桌面ArcInfo应用建构基础的软件组件。
* 作为简单的非拓扑feature,可以通过ArcSDE API,它遵从开放GIS协会的简单feature规范。
* 作为单纯的行、列和表格,可以通过关系数据库原有的SQL接口。
通过ArcObject获取数据
获取地理数据最丰富的级别就是通过geodatabase数据获取对象。在这个级别,显示geadatabase全部的结构:拓扑、关系、完整性规则、行为,还有栅格表示、表面表示和位置表示。你可以在ArcInfo内使用VBA获取数据,也可以使用Visual C++或任何其他遵从COM规范的开发环境编程来获取数据。这是一个简化的UML图,它是ArcObject中geodatabase数据获取对象的一部分。这个模型将在第四章——地理数据结构——深入探讨。
获取简单feature数据
对于许多空间应用系统来说,获取以简单无拓扑feature形式存在的地理数据就足够了。这一方法特别适合建立整套应用系统—系统中地理数据是关键的组成部分,但不是系统关注的焦点。其例子包括设备管理和交通分析。
ArcSDE提供了一个简单的feature应用编程接口(API),它遵从开发GIS协会(OGC)的简单feature规范。
OGC是一个是一个包含了所有主流空间数据提供商的组织,它的目标在于为异构地理信息系统间空间信息的自由交换发展标准的软件结构。
网络中拥有不同格式地理数据的组织能够建立一个以简单feature形式整合了这些数据的应用系统。
ESRI是OGC技术规范的主要贡献者,而且做到了地理数据的开放交换。
通过SQL获取数据
地理信息系统是一个丰富的数据宝库,这些数据是自然features和facilities,比如交通和公用事业网络。当这些数据以geodatabase收集和管理时,如果不为了地理用途,外部的数据库应用系统也可以有效地获取和共享这些数据。
通过使用你的关系数据库原有的SQL接口,你可以建立应用系统从你的geodatabase中挖掘数据,并应用这些数据完成一些任务,比如管理仓库货物、处理工作订单和统计分析。
在这种视图下,geodatabase就是一系列的表格、行和列。通过SQL接口,你能够看到geodatabase内部的数据库结构,它包含了对象的元数据表比如网络。这一结构在ArcInfo里不是直接可见的,并且是通过ArcCatalog的用户界面管理的。你可以有选择地更新行的属性,一行代表一个feature。但是你一定要小心以免破坏geodatabase的结构。