拓扑基础知识
此主题仅适用于 ArcEditor 和 ArcInfo。
拓扑是结合了一组编辑工具和技术的规则集合,它使地理数据库能够更准确地构建几何关系模型。ArcGIS 通过一组用来定义要素共享地理空间方式的规则和一组用来处理在集成方式下共享几何的要素的编辑工具来实施拓扑。拓扑以一种或多种关系的形式保存在地理数据库中,这些关系定义一个或多个要素类中的要素共享几何的方式。参与构建拓扑的要素仍是简单要素类,拓扑不会修改要素类的定义,而是用于描述要素的空间关联方式。
为什么进行拓扑?
拓扑一直是 GIS 在数据管理和完整性方面的关键要求。通常,拓扑数据模型通过将空间对象(点、线和面要素)表示为拓扑原始数据(节点、面和边)的基础图表来管理空间关系。这些原始数据(连同它们彼此之间及其所表示的要素边界之间的关系)通过在拓扑元素的平面图表中表示要素几何进行定义。
拓扑基本用于确保空间关系的数据质量并帮助进行数据编译。在很多情况下拓扑也用于分析空间关系,如融合带有相同属性值的相邻多边形之间的边界或遍历拓扑图中元素的网络。
拓扑也可用于为几何(来自多个要素类)的集成方式构建模型。有些人将其称为要素类的垂直集成。
拓扑中要素共享几何的方式
要素可在拓扑范围内共享几何。以下是相邻要素中的一些示例:
- 面要素可以共享边界(多边形拓扑)。
- 线要素可以共享端点(边节点拓扑)。
此外,可通过地理数据库拓扑在要素类之间管理共享几何。例如:
- 线要素可以与其他线要素共享线段。例如,宗地可以嵌套在块中:
- 面要素可以与其他面要素重叠。
- 线要素可以与其他点要素共享端点顶点(节点拓扑)。
- 点要素可以与线要素重叠(点事件)。
宗地通常使用简单要素类和地理数据库拓扑进行管理,以便构建宗地、边界、拐角点和控制点的模型所需的要素类集合遵守必要的重叠规则。管理宗地的另一个方法是使用能够自动提供图层的宗地结构。结构管理其内部拓扑,不需要保留地理数据库拓扑或为宗地所使用的图层集执行任何拓扑编辑。
建模为简单要素的宗地和结构中的宗地之间的主要区别是结构宗地边界(结构中的“线”)不是公用的,即每个宗地的边界上都有一组完整的线;相邻宗地的结构线叠置且重叠。
宗地结构仍可参与构建地理数据库拓扑;叠置边界线具有不同的几何时,线被裂化并按照常规方式构建拓扑图。
两种视图:要素和拓扑元素
下图显示了描述和使用多边形图层的方式:
- 作为地理要素(点、线和多边形)的集合
- 作为拓扑元素(节点、边、面和它们的关系)的图表
这意味着有两种处理要素的方法,一种方法是其中的要素由它们的坐标定义,另一种方法是其中的要素表示为其拓扑元素的有序图表。
ArcInfo coverage 中地理数据库拓扑的发展
即使不阅读本主题,您也可以正常实现地理数据库拓扑。但如果您有兴趣了解地理数据库中拓扑管理方式的历史发展和动因,您最好花些时间阅读本主题。
弧节点和地理关系的起源
ArcInfo Coverage 用户早已熟悉和了解拓扑在保持数据空间完整性方面的作用。
以下是 ArcInfo Coverage 数据模型的元素。
在 Coverage 中,要素边界和点存储在由 ArcInfo Workstation 管理并拥有的几个主要文件中。ARC 文件以拓扑边(称为弧)的形式保存线或多边形边界几何。LAB 文件用于保存点位置,这些点用作多边形的标注点或用作单个点要素(例如井要素图层的点要素)。其他文件用于定义和保持每个边和多边形之间的拓扑关系。
例如,一个名为 PAL 的文件(代表多边形-弧列表)列出了每个多边形中弧的顺序和方向。在 ArcInfo 中,使用软件逻辑来组装每个多边形的坐标,从而进行显示、分析和查询操作。PAL 文件中经过排序的边列表用于查找和组装 ARC 文件中保存的边坐标。运行期间多边形会在需要时进行组装。
Coverage 模型具有多个优点:
- 它使用简单的结构来维护拓扑。
- 这使得边只需经过一次数字化和存储,即可由许多要素所共享。
- 可以表示巨大的多边形(具有上千个坐标),因为多边形实际上被定义为一组有序的边(弧)
- Coverage 的拓扑存储结构直观。其物理拓扑文件也易于 ArcInfo 用户的理解。
一个有趣的历史事实:“Arc”与表管理器“Info”相结合造就了 ArcInfo 这一产品名,并随后衍生出 ESRI 产品系列中的其他后续 Arc 产品,如 ArcView、ArcIMS、ArcGIS 等等。
Coverage 也有一些缺点:
- 由于许多要素在需要使用时即时组装,因此某些操作的速度较慢。这包括所有的多边形和多部分 (multipart) 要素,如区域(多部分多边形的 Coverage 术语)和路径(多部分线要素的术语)。
- 拓扑要素(如多边形、区域和路径)只有在构建了 Coverage 拓扑之后才能使用。如果对边进行编辑,则需要重新构建拓扑。(注:最终使用了部分处理,该处理过程要求只重新构建 Coverage 拓扑中已更改的部分。)通常,在对拓扑数据集中的要素进行编辑时,无论存储模型是什么,都必须执行几何分析算法来重新构建拓扑关系。
- Coverage 限于单用户编辑。出于确保拓扑图表与要素几何相同步的需要,同一时间只有一名用户能够更新拓扑。用户将 Coverage 进行切片并维护切片的数据以进行编辑。这使单个用户每次可以锁定并编辑一个切片。对于常规的数据使用和部署,用户要将切片的副本附加到镶嵌的数据图层。也就是说,他们所编辑的切片数据集并不在组织中直接使用。需要对这些副本进行转换,这也意味着需要额外的工作和额外的时间。
Shapefile 和简单几何存储
在 20 世纪 80 年代早期,Coverage 被看作是对较早的多边形和基于线的系统(其中,多边形保存为完整的闭合线)的主要改进。在这些较早的系统中,要素的所有坐标都存储在每个要素的几何中。在 Coverage 和 ArcInfo 出现之前,使用的是这些简单多边形和线结构。这些数据结构简单,但缺点是边界需要经过两次数字化。也就是说,具有共享边的相邻多边形部分的两个坐标副本应包含在各个多边形的几何中。主要缺点是当时的 GIS 软件不能保持共享边的完整性。而且,存储成本巨大,每个字节的存储空间都意味着高昂的成本。20 世纪 80 年代早期,300 MB 的磁盘驱动器的体积与一台洗衣机相当,价格高达 30,000 美元。保存两个或多个坐标的制图表达代价不菲,并且计算过程会耗费相当长的时间。因此,Coverage 拓扑的使用具有较高的优势。
在 20 世纪 90 年代中期,人们对于简单几何结构的兴趣日益浓厚,因为这时磁盘存储和硬件的总体成本不断降低,计算速度也在不断提高。与此同时,可以更容易地获取现成的 GIS 数据集,而 GIS 用户的工作也从最初的数据编译演进到数据的使用、分析和共享。
用户需要更快的数据使用性能(例如,需要多边形几何时不花费计算机时间来生成它们。而是以最快速度提供 1,200 个多边形的要素坐标)。使现成的完整要素几何更具效率。当时正在使用的地理信息系统有数千个,并且可以方便地获得大量数据集。
正是在那个时候,ESRI 开发并发布了其 ESRI Shapefile 格式。Shapefile 使用非常简单的存储模型来存储要素坐标。每个 shapefile 都表示一个简单要素类(点、线或多边形)并使用要素坐标的简单存储模型。可通过 ArcInfo Coverage 以及许多其他的地理信息系统轻松地创建 Shapefile。它们作为一个实际标准被广泛采用,并且至今仍被大量使用和部署。
几年后,ArcSDE 率先在关系数据库表中开发出了一种类似的简单存储模型。要素表可以每行保存一个要素并在表的任意一列及其他要素属性列中保存几何。
下面是州多边形的示例要素表。每一行表示一个州。shape 列保存每个州的多边形几何。
这种简单要素模型非常适合 SQL 处理引擎。通过使用关系数据库,GIS 数据的规模以及用户的数量都扩展到了一个前所未有的程度,同时并未降低任何性能。至此,我们进入了使用 RDBMS 来管理 GIS 数据的时代。
Shapefile 变得无处不在,并且通过 ArcSDE,这一简单要素机制成为了 RDBMS 中基本的要素存储模型。(为了支持互操作性,ESRI 率先编写了 OGC 和 ISO 简单要素规范)。
简单要素存储具有明显的优势:
- 每个要素的完整几何保存在一个记录中。不需要组合。
- 数据结构(物理架构)非常简单、稳固且可伸缩。
- 便于程序员编写接口。
- 具有互操作性。许多人都能编写简单的转换程序将各种其他格式的数据从这些简单几何中移进和移出。作为一种数据使用和交换格式,Shapefile 得到广泛应用。
其缺点是:保持由拓扑所提供的数据完整性对于简单要素来说不是那么容易实现。因此,用户需要使用一个数据模型(如 Coverage)进行编辑和维护,而使用另一个数据模型(如 shapefile 或 ArcSDE 图层)进行部署。
用户开始使用这种混合的方法进行编辑和数据部署。例如,用户需要编辑 coverage、CAD 文件或其他格式的数据。然后将数据转换为 shapefile,从而进行部署和使用。因此,虽然简单要素结构是一种极佳的直接使用格式,但它不支持共享几何的拓扑编辑和数据管理。直接使用数据库将使用简单结构,但使用另一种拓扑形式来进行编辑。这样做在部署方面具有优势。但缺点是数据可能会过期,因而需要刷新。刷新虽然是一种有效方式,但信息的更新有一段滞后时间。总之,这样做会丢失拓扑。
GIS 所要求的以及地理数据库拓扑模型实现的是一种使用简单要素几何存储要素的机制,但允许对这种简单的、开放式数据结构使用拓扑。这就意味着用户可结合两者的优点,即事务数据模型允许拓扑查询、编辑共享几何、丰富数据建模并保持数据完整性,但也允许使用基于开放式、简单的要素几何的简单、高伸缩性的数据存储机制。
这种直接使用数据模型快速、简单且有效。也可由任意数量的并发用户直接编辑和维护。
ArcGIS 中的拓扑框架
实际上,拓扑已不仅仅被视为数据存储问题。完整的解决方案包括以下几个方面:
- 完整的数据模型(对象、完整性规则、编辑和验证工具、可处理任意大小和任意复杂程度的数据集的拓扑与几何引擎,以及一组丰富的拓扑运算符、地图显示和查询工具)
- 开放式存储格式,使用一组简单要素的记录类型和拓扑接口来查询简单要素、检索拓扑元素和导航其空间关系(即,查找相邻的区域及其共享的边、沿连接线的路径)
- 提供要素(点、线和多边形)以及拓扑元素(节点、边和拓扑面)及其相互关系的能力
- 可支持以下特性的机制
- 包含上百万个要素的大型数据集
- 能够由多名同步用户执行编辑和维护
- 始终可用的现成要素几何
- 支持拓扑完整性和行为
- 系统运行速度快,且可针对多名用户和编辑者进行扩展
- 灵活且简单的系统
- 利用 RDBMS SQL 引擎和事务框架的系统
- 可支持多编辑者、长期事务、历史存档和复制等功能的系统
在地理数据库拓扑中,验证过程会标识要素(相同要素类中的和不同要素类之间)之间共享的坐标。使用聚类算法来确保共享的坐标具有相同的位置。这些共享的坐标存储为每个要素的简单几何的一部分。
这使得用户可以快速灵活地查找拓扑元素(节点、边和面)。这样做的额外优势是系统运行流畅并且可以使用 RDBMS 的 SQL 引擎和事务管理框架来进行扩展。
编辑和更新期间,添加要素后就可直接使用它们。将对地图上已更新的区域(脏区)做出标记并在每个要素类更新时对其进行追踪。无论何时,用户都可以选择以拓扑方式分析并验证脏区以生成规整的拓扑。只有脏区的拓扑需要重新构建,因此节省了处理时间。
最终的结果是,用户可有效地发现并组装拓扑原始数据(节点、边、拓扑面)及其相互关系以及它们的要素。这具有多种优点:
- 使用简单要素几何存储来存储要素。此存储模型开放、高效率,可以达到很大的规模且支持多个用户。
- 该简单要素数据模型具有事务性,且支持多用户。相比之下,较早的拓扑存储模型不能扩展,且很难支持多个编辑者事务和很多其他的 GIS 数据管理工作流。
- 地理数据库拓扑完全支持地理数据库的所有长期事务功能和版本化功能。地理数据库拓扑无需切片,并且很多用户可同时编辑拓扑数据库,如有必要,甚至可以编辑相同要素的单独版本。
- 要素类可以增长到任意大小(数亿的要素),同时保持很高的性能。
- 此拓扑实现是附加的。通常,可将其添加到空间相关要素类的现有架构。另一种方法就是重新定义现有要素类并将它们转换为包含拓扑原始数据的新数据架构。
- 只需一个数据模型来进行几何编辑和数据使用,而不是两个或多个。
- 它是可互操作的,因为所有要素几何存储都符合“开放式地理空间协会”和 ISO 制定的简单要素规范。
- 数据建模更自然,因为它基于用户要素(如宗地、街道、土壤类型和流域),而不是基于拓扑原始数据(如节点、边和面)。用户将开始考虑真实要素的完整性规则和行为,而不是拓扑原始数据的完整性规则。例如,宗地有什么行为?这增强了对各种地理要素的建模能力。它将改进我们对街道、土壤类型、人口普查单元、流域、铁路系统、地质、林分、地貌、物理特征等的思考。
- 地理数据库拓扑提供与保留的拓扑实现相同的信息内容,即存储拓扑线图表和发现要素几何(类似 ArcInfo coverage)或存储要素几何和发现拓扑元素和关系(类似地理数据库)。
如果用户希望存储拓扑原始数据,则可以容易地创建拓扑及其关系并将它们提交到表,以便进行各种分析和互操作(例如,用户希望将要素提交到存储拓扑原始数据的表的 Oracle Spatial 数据仓库)。
在实用层面上,ArcGIS 拓扑实现是有效的。它可扩展到特别大的地理数据库和多用户系统,且不会损失性能。它包含用于构建和维护地理数据库中拓扑的验证和编辑工具。它包含丰富、灵活的数据建模工具,因此用户可以在任意关系数据库中组合文件系统的实际工作系统,且架构数量没有限制。