ArcGIS 中的拓扑
本主题仅适用于 ArcGIS for Desktop Standard 和 ArcGIS for Desktop Advanced。
在地理数据库中,拓扑是定义点要素、线要素以及面要素共享重叠几何的方式的排列布置。例如,街道中心线与人口普查区块共享公共几何,相邻的土壤面共享公共边界。
处理拓扑不仅仅是提供一个数据存储机制。在 ArcGIS 中,拓扑包括以下所有方面:
- 地理数据库包括一个拓扑数据模型,该模型对简单要素(点、线及面要素类)、拓扑规则以及具有共享几何的要素之间的拓扑集成坐标使用开放式存储格式。该数据模型能够为参与拓扑的要素类定义完整性规则和拓扑行为。
- ArcGIS 在 ArcMap 中包括了用于显示拓扑关系、错误和异常的拓扑图层。ArcMap 还包括一组用于拓扑查询、编辑、验证以及纠错的工具。
- ArcGIS 包括用于构建、分析、管理以及验证拓扑的地理处理工具。
- ArcGIS 包括用于分析和发现点、线以及面要素类中拓扑元素的高级软件逻辑。
- ArcMap 包括一个编辑和数据自动化框架,用于创建、维护和验证拓扑完整性以及执行共享要素编辑。
- 在能够导航拓扑关系、处理邻接和连通性以及通过这些元素组装要素的 ArcGIS for Desktop 和 ArcGIS for Server 产品中均包含 ArcGIS 软件逻辑。例如,标识共享特定公用边的面;列出在某个结点连接的边;从当前位置起沿连接边导航;添加一条新线并将其嵌入拓扑图;在交叉点分割线;以及创建生成的边、面和结点等。
地理数据库拓扑的元素
在地理数据库中,为各个拓扑定义以下属性:
- 要创建的拓扑的名称。
- 在拓扑处理操作中使用的拓扑容差。拓扑容差是一条术语,通常用于表示两种容差:X,Y 容差和 Z 容差。拓扑容差的默认值是坐标分辨率的 10 倍。
- 要素类列表。首先,需要一份将参与拓扑的要素类的列表。所有要素类必须使用同一个坐标系并组织成同一个要素数据集。
- 每个要素类中坐标的相对精度等级。如果某些要素类比其他要素类精确,您会希望指定更高的坐标等级。这将用于拓扑验证与集成。当精度较低的坐标落入其他拓扑容差范围内时,这些坐标将被移动到更高精度坐标的位置。精度最高的要素应收到值 1,精度其次的要素类收到值 2,精度再次的要素类收到值 3,依此类推。
- 有关要素共享几何的方式的拓扑规则列表。
聚类处理
创建拓扑关系包括分析同一个要素类中(以及参与拓扑的多个要素类之间)的各要素间的要素折点的坐标位置。彼此间距离在指定范围内的折点被认为表示同一个位置,并被指定一个共有坐标值(换句话说,将它们定位于同一点)。
拓扑容差用于整合折点。处于拓扑容差范围内的所有折点在验证过程中均可以轻微移动。默认拓扑容差基于为数据集定义的精度。用实际单位表示的默认拓扑容差为 0.001 米。它是 X,Y 分辨率距离(定义用于存储坐标的数值精度)的 10 倍。
两种拓扑容差:x,y 容差和 z 容差
在 ArcGIS 中,使用一对拓扑容差整合折点:
- X,Y 容差用于查找处于彼此水平距离范围内的折点
- Z 容差用于区分折点的 Z 高度或高程是否处于彼此容差范围内,以及是否应进行聚类
聚类坐标(定位于同一点)的方式
X,Y 容差应该很小,因此只有彼此非常接近(处于彼此 X,Y 容差范围内)的折点会被指定相同的坐标位置。如果多个坐标处于容差范围内,可认为这些坐标彼此重叠并将它们调整为共享相同位置。
这样,X,Y 容差也定义了坐标在聚类过程中可在 x 或 y(或两者)方向上移动的距离。因此,如果坐标在 x 维度或 y 维度上处于 X,Y 容差范围内,则可以对其进行聚类。请参见下面的逻辑示意图。坐标可移动图中对角线所示的距离,这形成了一个三角形。根据几何与勾股定理,对坐标进行聚类的最大距离等于 2 的平方根乘以 X,Y 容差。
勾股定理认为,在直角三角形中,斜边(最长边)的平方等于其他两条边(直角边)的平方和。
默认 X,Y 容差
默认 X,Y 容差设置为 0.001 米,或以数据集的坐标系单位表示的等效值。例如,如果坐标系以英尺为单位,则此默认值是 0.003281 英尺(0.03937 英寸)。默认值是默认 X,Y 分辨率的 10 倍,且在大多数情况下均推荐此设置。如果坐标以经纬度表示,则默认 X,Y 容差为 0.0000000556 度。
用于验证和聚类的算法
如果拓扑中某个要素的折点位于该拓扑中任何其他要素的边的 X,Y 容差范围内,则拓扑引擎会在这条边上创建一个新折点以允许在聚类过程中对要素进行几何整合。
在拓扑验证过程中聚类要素折点时,理解要素几何的调整方式十分重要。参与拓扑的任何要素类的所有折点均有可能移动,只要这些折点位于其他折点的 X,Y 容差范围内。坐标等级较高的要素的折点移动较少,并对等级较低的坐标产生更大引力。同等级要素的折点将从几何上进行平均。
需要注意的是,x,y 容差并非用于概化几何形状。相反,它用于在拓扑操作过程中整合线作业和边界,也就是帮助发现重叠且折点处于同一位置的要素。这将整合(定位于同一点)处于彼此 X,Y 容差范围内的坐标。由于坐标在 x 和 y 方向上可以移动与拓扑容差相同的距离,因此凭借使用拓扑容差的命令来处理数据集,可以解决许多潜在问题。这包括极小的过伸或未及的处理、重复线段的自动分离删除以及沿边界线的坐标细化。
折点的最大移动距离
聚类过程的工作原理为在地图上移动并标识处于彼此 X,Y 容差范围内的坐标聚类。ArcGIS 使用此算法来发现、清除和管理要素间的重叠几何。这意味着重叠几何元素的坐标被定位于同一点(捕捉到同一位置)。这对许多 GIS 操作和概念都非常重要。
作为聚类过程的结果,要素折点可以两种方式移动大于拓扑容差的距离。
- 使用容差计算水平距离和垂直距离,以通过容差找到坐标。在此操作期间,坐标移动到新位置可以经过的最大距离是 2 的平方根乘以 X,Y 容差。
- 聚类算法是迭代算法。因此在某些情况下,折点在移动后处于其他折点的容差范围内,但平移的距离可能大于 2 的平方根乘以 X,Y 容差。这种情况非常少,并且仅在折点之间十分接近彼此容差范围,但没有完全处于该范围内(例如,距彼此容差范围在 0.001 米内)时发生。由于每次迭代坐标折点都会轻微地移动,因此它们可与其他坐标进行聚类并随后在地图中平移大于容差的距离。
实用提示
以下是一些有关拓扑容差的实用提示:
- 通常,使用 10 倍于 X,Y 分辨率的 X,Y 容差,即可获得非常好的结果。
- 典型 X,Y 容差的数量级小于数据采集的真实精度。例如,尽管要素坐标可能会精确到 2 米,但默认 X,Y 容差为 0.001 米。
- 为了使移动距离较小,也应使 X,Y 容差较小。但是,过小的 X,Y 容差(例如 X,Y 分辨率的 2 倍或更小)可能无法正确整合重叠边界的线作业。
- 相反,如果 x,y 容差过大,要素坐标可能彼此重叠。这会影响要素边界制图表达的精度。
- X,Y 容差不应接近于数据采集精度(有时称为地图精度标准)。例如,在比例为 1:12,000 的地图上,1 英寸等于地面上的 1,000 英尺,即使 1/50 英寸仍等于 20 英尺 - 在数字化与扫描转换过程中很难达到这种数据采集精度。在使用这些数字的情况下,您会希望通过 x,y 容差进行的坐标移动保持正常。请记住,在这种情况下默认 X,Y 容差为 0.003281 英尺,它在几乎任何情况下都会正常工作。
- 在拓扑中,可以设置每个要素类的坐标精度等级。您会希望将最精确要素(如测量所得的要素)的坐标等级设置为 1,将精度较低要素的坐标等级设置为 2、3 等等(按精度等级降序)。这将使等级数较高(因此精度较低)的其他要素坐标被调整为等级数较低而精度较高的要素。
- 通常,您会希望在聚类过程中能够控制更有可能移动哪些要素类。例如,如果已知某个要素类中的要素具有比另外一组要素更可靠的位置,则可能想要将可靠性较低的要素捕捉到可靠性较高的要素。在拓扑中为要素类指定了等级以适应这种常见情况。拓扑容差范围内低等级要素的折点将被捕捉到邻近的高等级要素的折点。对处于拓扑容差范围内的同级要素折点的位置将进行几何平均。
拓扑与要素数据集
拓扑建立在公用要素数据集中保存的一组要素类的基础上。每个新拓扑都会添加到保存这些要素类和其他数据元素的要素数据集中。
创建拓扑时,可以按照以下约定指定要从要素数据集中参与拓扑的任意要素类子集:
- 一个拓扑可以引用同一个要素数据集中的一个或多个要素类。
- 一个要素数据集可具有多个拓扑。
- 但是,一个要素类只能属于一个拓扑。
- 一个要素类不能同时属于一个拓扑和一个几何网络。
- 但是,一个要素类可以同时属于一个拓扑和一个网络数据集或地形数据集。
坐标等级
在地理数据库拓扑中为要素类指定的坐标精度等级控制着要素折点在验证过程中的移动。等级有助于控制折点在处于彼此拓扑容差范围内时的移动方式。处于彼此拓扑容差范围内的折点被认为位置相同且定位于同一点(为处于拓扑容差范围内的坐标指定相同坐标值)。
如果不同的要素类具有不同的坐标精度,例如,通过测量或差分全球定位系统 (GPS) 得到一个精度,而从精度较低的源通过数字化得到另一个精度时,坐标等级可确保可靠放置的折点就是可靠性较低的折点要向其移动的定位点位置。
通常,将精度较低的坐标移动到精度较高的坐标位置,或按照聚类中各坐标间的加权平均距离计算一个新位置。在此种情况下,加权平均距离基于聚类坐标的精度等级。
当同级折点处于彼此拓扑容差范围内时,对这些折点的位置从几何上进行平均。
确保以正确的顺序指定等级。精度最高的要素获得等级 1,精度次高的要素获得等级 2,依此类推。
Z 拓扑容差与等级
构建三维地形或建筑物模型的要素类具有表示各个点高程的 Z 值。与使用 X,Y 拓扑容差和等级来控制水平捕捉要素的方式相同,如果拓扑具有构建高程模型的要素类,则可以使用 Z 拓扑容差和等级控制垂直捕捉重合折点的方式。
Z 拓扑容差定义了重合点间的高程或 Z 值的最小差异。“拓扑检查”期间,Z 值处于 Z 拓扑容差内的折点被捕捉到一起。
构建城市建筑物的模型时,两个建筑物可能彼此相邻,并在 X,Y 属性域方向共享同一条公用边。如果建筑物拐角的高程值是以摄影测量方式采集的,则用户应关注该如何在拓扑验证期间保持每栋建筑物结构的相对高度。通过将 Z 拓扑容差值设置为零,可在拓扑检查时防止聚类 Z 值。
构建地形模型时,可能会以不同的 X,Y 和 Z 精度来采集数据集。在这种情况下,可能要设置一个大于零的 Z 拓扑容差以进行捕捉。为避免采集到的高精度 Z 值被捕捉到低精度 Z 值中,可以为每个要素类指定一个等级。如果低等级要素的 Z 值处于拓扑容差范围内,将被捕捉到高等级折点的高程中。属于同等级要素类的折点的 Z 值如果处于拓扑容差范围内,将求均值。
拓扑检查过程用以下方式求平均值和捕捉 Z 值:每个 Z 值均通过不大于 Z 拓扑容差的总量进行调整。这会使具有相同 X,Y 的折点的 Z 值被平均或捕捉到组中。
例如,如果 Z 拓扑容差为 5,则以下六个重合折点的 Z 值将被平均为 11.25 和 3.5 两组:
折点 |
验证前 |
验证后 |
z0(等级 = 1) |
12.5 |
11.25 |
z1(等级 = 1) |
10 |
11.25 |
z2(等级 = 1) |
7.5 |
3.5 |
z3(等级 = 1) |
5 |
3.5 |
z4(等级 = 1) |
2.5 |
3.5 |
z5(等级 = 1) |
0 |
3.5 |
在以下示例中,重合折点具有不同的等级,拓扑容差为 5。Z 值被平均并捕捉为三组,22.5、7.5 和 1.25:
折点 |
验证前 |
验证后 |
z0(等级 = 1) |
25 |
22.5 |
z1(等级 = 1) |
20 |
22.5 |
z2(等级 = 1) |
7.5 |
7.5 |
z3(等级 = 2) |
5 |
7.5 |
z4(等级 = 2) |
2.5 |
1.25 |
z5(等级 = 2) |
0 |
1.25 |
Z 拓扑容差值的范围在零至 Z 属性域范围之间(最大 Z 值 – 最小 Z 值)。
等级是精度的相对量度。两个要素类在等级上的差异并不相关,因此将其等级设置为 1 和 2 与设置为 1 和 3 或 1 和 10 是一样的。
拓扑规则
拓扑规则定义了要素之间允许的空间关系。为拓扑定义的规则可控制一个要素类中各要素之间、不同要素类中各要素之间以及要素的子类型之间的关系。有关可用的拓扑规则列表,请参阅地理数据库拓扑规则与拓扑错误修复。
例如,规则“不能叠置”用于管理同一个要素类中要素的完整性。如果两个要素叠置,则叠置几何将以红色显示(例如下图中相邻面之间的叠置红色区域以及两条线的红色线性段部分)。
在要素类的子类型之间也可以定义拓扑规则。例如,假设有两个街道线要素的子类型 - 正常街道(在两个结点处与其他街道相连)与死胡同街道(在一个结点处为死角)。拓扑规则便可以要求街道要素在两端与其他街道要素相连,除非遇到街道属于死胡同子类型的情况。
使用要素的空间关系和行为定义拓扑规则
空间关系明确表达了要素按照其空间制图表达行为的规则共享重叠几何的方式。例如,某些公共空间关系与规则包含以下内容:
- 宗地不能叠置。相邻宗地具有共享边界。
- 河流线不能叠置且必须在其端点处与其他河流线连接。
- 相邻县具有共享边。县必须完全覆盖和嵌套在州中。
- 相邻人口普查区块具有共享边。人口普查区块不能叠置,且人口普查区块必须完全覆盖和嵌套在街区组中。
- 道路中心线必须在其端点处连接。
- 道路中心线和人口普查区块共享重叠几何(边和结点)。
上述情形中的每一条都为使用拓扑规则维护数据完整性定义了一种可能情况。
拓扑验证、错误与异常
创建新拓扑或对参与拓扑的要素进行编辑后,下一步是验证拓扑。验证拓扑包含以下四个过程:
- 对要素折点进行裂化和聚类以查找共享相同位置(具有通用坐标)的重叠要素
- 将共有坐标的折点插入到共享几何的重叠要素中
- 运行一系列完整性检查以确定是否违反了为拓扑定义的规则
- 针对要素数据集中潜在的拓扑错误创建错误日志
编辑或更改数据时,ArcGIS 将追踪更改的区域并将其标记为脏区。将只对拓扑中的脏区运行验证。如果上次验证后并未进行编辑或更新,则不会进行任何检查。
错误与异常
在拓扑中最初以错误的形式存储对拓扑规则的违反。错误要素会在验证期间记录发现拓扑错误的位置。某些错误是可以接受的,这种情况下可将该错误要素标记为异常。错误与异常会以要素形式存储在拓扑图层中,可用于呈现和管理要素不需要符合拓扑规则的情况。
可以为拓扑中的要素类创建一份错误与异常报告。并将错误要素数目报告用作评判拓扑数据集数据质量的量度。ArcMap 中的“错误检查器”允许选择不同的错误类型并缩放至单独错误。可通过编辑违反了拓扑规则的要素来纠正拓扑错误。验证编辑之后,将从拓扑中删除错误。
使用编辑工具可选择拓扑错误,并从针对该错误类型预定义的大量修复中进行选择。还可以使用该工具获取有关已被违反的规则的详细信息,或将错误标记为异常。
地理数据库拓扑有足够的灵活性来处理拓扑规则异常。还可以将错误标记为异常。此后将忽略异常,尽管在判定它们实际上是错误并应修改要素以符合拓扑规则的情况下可以将它们返回为错误状态。
异常是数据创建与更新过程中的正常部分。例如,某个城市的街道数据库可能有一条规定中心线必须在两个端点处与其他中心线连接的规则。此规则通常可确保在编辑街道线段时将其正确地捕捉到其他街道线段。但是,在城市的边界处,可能没有街道数据。此时街道的外部端点可能无法捕捉到其他中心线。这些实例会被标记为异常,您仍然能够使用该规则查找未正确进行数字化或编辑的实例。
脏区与验证
地理数据库拓扑的一个主要目标是:对处理和验证参与拓扑的要素数据(在可以使用该数据前)所花费的时间进行优化。一般来说:
- 不论拓扑的状态如何,参与拓扑的要素类始终可供使用。
- 拓扑验证由用户驱动。用户决定想要验证拓扑的时间和频率(例如,在每次编辑操作之后或更低频率,如在每次编辑会话结束时)。
- 对每个要素类进行的所有编辑均会被追踪,以便只有进行过更改的区域需要重新验证。
脏区是已通过添加或删除要素而被编辑、更新或影响的区域。脏区允许拓扑限制在拓扑验证期间必须检查拓扑错误的区域。脏区将追踪已添加新要素或修改现有要素的位置。这允许只验证拓扑的选定部分,而不是全部。
ArcGIS 为您管理脏区
在创建或删除参与拓扑的要素、修改要素的几何、更改要素的子类型、协调版本、修改拓扑属性或更改地理数据库拓扑规则时,ArcGIS 均会创建脏区。
版本协调的作用类似于对要素类进行的其他编辑和更新 - 将更改的区域标记为脏区。
模式更改(如添加新的拓扑规则)意味着必须重新验证整个拓扑(换句话说,将整个数据集标记为脏区)。
存储在地理数据库拓扑中的信息
以下信息作为地理数据库的一部分进行存储:
- 拓扑定义。这包括在创建拓扑时指定的所有属性的模式记录。
- 共享重叠几何的所有要素的共有坐标折点。验证操作使用聚类来整合坐标以标识要素和要素类中的共有折点。在所有情况下,标识为具有相同位置的折点在所有要素类中均以它们所属的所有要素的坐标形式写出。这些要素是共享几何的要素,它们通过其共有坐标来完成此操作。注:
地理数据库拓扑使用这些共享坐标为 ArcGIS 中的各种操作发现和查询边、结点、拓扑面及其要素关系的拓扑图。
- 一个脏区表,该表包含覆盖了已添加或编辑的要素的区域以及通过版本控制协调更新的区域。
- 由验证操作存储在拓扑中的三个拓扑错误要素表:
- 点错误
- 线错误
- 面错误
标记为异常的错误同时记录在错误要素表中。“异常”列会标记确认为异常的错误。换句话说,异常就是选中了“异常”列的错误。随着不断更新与维护要素数据集和拓扑,系统会相应追踪错误和异常。