拓扑检查
使用说明
空间数据在采集和编辑过程中,会不可避免地出现一些错误。例如,同一个节点或同一条线被数字化了两次、相邻面对象在采集过程中出现裂缝或者相交、不封闭等,这些错误往往会产生假结点、冗余结点、悬线、重复线等拓扑错误,导致采集的空间数据之间的拓扑关系和实际地物的拓扑关系不符,会影响到后续的数据处理、分析工作,并影响到数据的质量和可用性。该工具可用于检查数据集的拓扑错误,输出点、线、面数据集本身及不同类型数据集相互之间不符合拓扑规则的对象。
参数说明
参数名 | 参数释义 | 参数类型 |
---|---|---|
源数据集 | 待进行拓扑检查的数据集。 | DatasetVector |
拓扑规则 | 进行拓扑检查时用到的检查规则,详见下方拓扑规则表格。 | TopologyRule |
容限 | 指定计算时需要的容限值。单位与源数据集单位相同。取值范围为需大于等于0,小于0将抛出异常。需要注意的是:在线、面无锐角规则中该值表示角度,单位为度。 | Double |
修复拓扑错误 | 勾选,即可对部分拓扑规则所检查出的错误进行自动修复。支持情况参考下方可自动修复拓扑错误的规则表。 | Boolean |
被检查区域 (可选) |
若不指定被检查区域,则系统会默认对整个数据集进行拓扑检查。否则仅对源数据集中与该区域相交的几何对象进行拓扑检查 | GeoRegion |
参考数据集 (可选) |
指定用于检查的参考数据集。根据拓扑规则的不同,有些规则会使用两个数据集进行拓扑检查,如“点必须在线上”等,则需要一个线数据集作为参考数据集;而另一些规则只是在一个数据集内进行拓扑检查,如“线内无重叠”等,则无需选择参考数据集。 | DatasetVector |
结果数据集所在数据源 | 指定结果数据集所在的数据源。 | Datasource |
结果数据集名称 | 指定结果数据集名称。 | String |
拓扑规则
检查规则 | 规则释义 | 规则编码 |
---|---|---|
面内无重叠 | 检查一个面数据集中是否存在两个(或两个以上)相互重叠的面对象,包括部分重叠和完全重叠。此规则多用于一个区域不能同时属于两个(或两个以上)面对象的情况,如行政区划面,一个地区不能同时属于两个行政区管辖。重叠部分将作为拓扑错误生成到结果数据集中。 | 0 |
面内无缝隙 | 检查一个面数据集中相邻面对象之间是否存在空隙,即相邻面对象之间的边界必须重合,且面对象内部不能出现被挖空(岛洞多边形)的情况。此规则多用于检查一个面数据集中相邻区域之间有无空隙,如土地利用图斑数据,要求不能有未定义土地利用类型的斑块。空隙部分将作为拓扑错误生成到结果数据集中。 | 1 |
面与面无重叠 | 检查面数据集中是否存在与参考面数据集的面重叠的面对象,包括部分重叠和完全重叠,即面数据集内的各个面对象之间不能存在交集。对于如水域与旱地这种不能共用同一区域的数据,可以用此规则检查。 | 2 |
面被多个面覆盖 | 检查面数据集中是否存在没有被参考面数据集的面覆盖的面对象,即待检查面数据集的一个或多个面必须完全覆盖于参考面数据集中的面对象。此规则多用于按某一规则相互嵌套的面数据,如区域图中的省域必需被该省内的所有县界完全覆盖。 | 3 |
面被面包含 | 检查面数据集中是否存在没有被参考面数据集的面包含的面对象,即待检查面数据集的面必须是参考面数据集中面对象的子集。对于如动物活动区域必须在整个研究区内这种属于包含关系的面数据,可以用此规则检查。 | 4 |
面边界被多条线覆盖 | 检查面数据集中是否存在没有被参考线数据集的线覆盖的面边界。面数据中不能存储一些边界线的属性,此时需要专门的边界线数据,用来存储区域边界的不同属性信息,要求边界线与区域完全重合。 | 5 |
面边界被边界覆盖 | 检查面数据集中是否存在没有被参考面数据集中一个或多个面对象边界覆盖的面边界。此规则多用于某一面数据集的面对象由另一个面数据集中的一个或多个面对象组成的数据,如区域图中的省域是由该省内的所有县域组成,二者共用相同的边界。 | 6 |
面包含点 | 检查面数据集中是否存在没有包含参考点数据集中点的面对象,即参考数据集中的点必须位于面内,而不能位于面外或面边界上,且一个面对象内可包含一个或多个点。 | 7 |
线内无相交 | 检查一个线数据集中是否存在两个(或两个以上)相交且共享交点,但并未从交点处打断的线对象。若有端点和线内部接触及端点和端点接触的情况,则被视为正确的拓扑关系。此外,对于相交但不共享交点的线对象,也被视为正确的拓扑关系。如道路数据,当多条行车道在普通路口(十字路口、丁字路口等)相交时,则视为相交且共享交点的情况,应被打断;而多条行车道通过立交桥或隧道相交时,则被视为相交但不共享交点的情况,此时不需要打断。 | 8 |
线内无重叠 | 检查一个线数据集中是否存在两个(或两个以上)线对象之间有相互重叠的部分,且重叠部分共享节点。如城市街道,单条街道或多条街道之间可以相交但不能出现相同的路线。 | 9 |
线内无悬线 | 检查一个线数据集中是否存在被定义为悬线的线对象,即线对象的端点没有连接到其它线的内部或线的端点,包括长悬线和短悬线两种情况。如区域边界线等必须闭合的线可用此规则检查。 | 10 |
线内无假结点 | 检查一个线数据集中是否存在含有假结点(只连接两条弧段的结点)的线对象,即一个线对象必须与两个(或两个以上)线对象相连接。 | 11 |
线与线无重叠 | 检查线数据集中是否存在与参考线数据集的线重叠的线对象,且重叠部分共享节点,即两个线数据集之间的线对象不能有重合的部分。如交通路线数据中,公路和铁路不能重叠。 | 12 |
线内无相交或内部接触 | 检查一个线数据集中是否存在两个(或两个以上)线对象在线的节点处或线的内部相交,即线对象只能在端点处与其他线相交,且所有交点必须是线的端点,所有相交的弧段必须被打断。该规则不检查线对象自相交的情况。 | 13 |
线内无自交叠 | 检查一个线数据集中是否存在与自身重叠的线对象,即一个线对象本身不能有重叠部分。如在交通数据中,一条道路不能出现重复的路段。 | 14 |
线内无自相交 | 检查一个线数据集中是否存在与自身相交或重叠线对象,即线对象中不能有重叠(坐标相同)的节点。该规则多用于检查等值线这样的不能与自身相交的线。 | 15 |
线被多条线完全覆盖 | 检查线数据集中是否存在没有被参考线数据集的一条或多条线覆盖的线对象。如公交线路必须与道路重合,即被道路数据完全覆盖。 | 16 |
线被面边界覆盖 | 检查线数据集中是否存在没有被参考面数据集的面边界(可以是一个或多个面边界)覆盖的线对象。如表示某一区域边界的线数据(某城区的边界线)必须被这一区域(城区)的边界覆盖。 | 17 |
线端点被点覆盖 | 检查线数据集中是否存在线端点未被参考点数据集的点覆盖的线对象。未被覆盖的端点将作为拓扑错误生成到结果数据集中。 | 18 |
点必须在线上 | 检查点数据集中是否存在未被参考线数据集的线覆盖的点对象,即点必须在参考线数据集的线对象上,包括在线内、线节点和线端点上,但是不能在线外。如高速公路上的收费站,必须设置在高速公路上。 | 19 |
点必须在面的边界上 | 检查点数据集中是否存在没有在参考面数据集的面边界上的点对象,即点对象不能位于参考面数据的面内和面外。如界碑必须设置在国界线和行政界线上。 | 20 |
点被面包含 | 检查点数据集中是否存在不在参考面数据集中面内部的点对象,即点对象不能位于参考面数据集的面外或面的边界上。如表示省会的点必须设置在省域范围内。 | 21 |
点被线端点覆盖 | 检查点数据集中是否存在未被参考线数据集的线端点覆盖的点对象,即点只能在参考线数据集中线对象的端点上,而不能在线的节点上、线内其它位置和线外。 | 22 |
无复杂对象 | 检查线或面数据集自身是否存在复杂对象(对象内包含一个或多个子对象,如平行线)。 | 23 |
无重复点 | 检查一个点数据集中是否存在重复的点对象。如消防站、学校等公共设施,在地图上通常以点数据集的形式存在,在同一位置只能存在一个。 | 24 |
点不被面包含 | 检查点数据集中是否存在被参考面数据集的面包含的点对象。若点对象在面边界上或在面外,则被视为正确的拓扑关系。 | 25 |
线与面无相交 | 检查线数据集中是否存在与参考面数据集的面相交或被面包含的线对象,即线数据集与参考面数据集不能存在交集。 | 26 |
面边界无交叠 | 检查面数据集中是否存在与参考面数据集的面边界有重叠部分的面边界。该规则不检查面内边界交叠的情况。 | 27 |
面内无自相交 | 面对象内部不能存在自相交 。 | 28 |
线与线无相交 | 检查线数据集中是否存在与参考线数据集的线相交的线对象,即两个线数据集中的所有线对象必须相互分离。 | 29 |
节点距离必须大于容限 | 检查点、线、面数据集自身或两个数据集之间各对象的节点距离是否小于或等于设定的容限值。 | 30 |
线段相交处必须存在交点 | 检查线、面数据集自身或两个数据集之间,线与线的十字相交处是否存在节点,且此节点至少存在于两个相交线段中的一个。两条线对象的端点相连接则被视为正确的拓扑关系。注意:两条线段端点相接的情况不违反规则。 | 31 |
节点之间必须互相匹配 | 检查线、面数据集自身或两个数据集之间,点数据集和线数据集、点数据集和面数据集之间,在当前节点的容限范围内,是否存在线对象(或面边界)且线上有相应的节点与之匹配。 对于未匹配的点,系统通过在线上做垂线的方式计算出匹配点的位置,该匹配点将作为拓扑错误存储到结果数据集中。 |
32 |
线或面边界无冗余节点 | 检查线或面数据集自身的线对象或面边界是否存在有冗余节点,即两节点之间不能存在其他共线节点,这些共线节点为冗余节点。 | 33 |
线内无打折 | 检查线数据集中是否存在连续四个节点构成的两个夹角的角度都小于所给的角度值(单位为度),若两个夹角都小于角度值,则认为线对象在中间两个节点处打折。 | 34 |
线内无短悬线 | 如果一条弧段的端点没有与其他任意一条弧段的端点相连,则这个端点称之为悬点,含有悬点的弧段成为悬线。检查线数据集中是否存在悬挂部分较短的线对象。 | 35 |
线内无长悬线 | 检查线数据集中是否存在悬挂部分较长的线对象。 | 36 |
面内无锐角 | 检查面数据集中是否存在小于某个给定角度的锐角。若连续三个点组成的夹角小于给定的角度,则判断为锐角。 | 37 |
点不被面覆盖 | 检查点数据集(或者点记录集)中被面数据集(或者面记录集)中某一个对象覆盖(位于面对象边界及内部)的点对象。例如需要检查房屋与水面高程点,高程点不能位于房屋面内部及边界。 | 38 |
线内无锐角 | 检查线数据集中是否存在小于某个给定角度的角。若连续三个点组成的夹角小于给定的角度,则判断为锐角。 | 39 |
可自动修复拓扑错误的规则
拓扑规则 | 修复方式 |
---|---|
线内无假结点 | 将假结点变为节点,即假结点所连接的两条线合并为一条线 |
线或面边界无冗余节点 | 将线或面边界上的冗余节点删除 |
线与线无重叠 | 若待检查数据集中的线对象与参考数据集中的线对象有重叠,将删除待检查数据集中该条线对象的重合部分 |
线内无自交叠 | 将线对象的自交叠部分删除 |
线内无重叠 | 将其中一条线对象的重叠部分删除 |
节点距离必须大于容限 | 将容限范围内的所有节点捕捉到一起,即合并成一个节点 |
节点之间必须相互匹配 | 在线对象上添加匹配的节点 |
线段相交处必须存在交点 | 在两条线段相交处分别添加交点 |
面内无重叠 | 删除其中一个面的重叠部分 |
无重复点 | 空间位置相同的点将随机保留一个 |
输出结果
参数名 | 参数释义 | 参数类型 |
---|---|---|
源(修复)数据集 | 若进行了修复拓扑错误,则输出被修复的源数据集,若没有被修复则输出源数据集。 | DatasetVector |
检查结果数据集 | 检查出拓扑错误的数据集。 | DatasetVector |
注意事项
- 功能变更:自SuperMap 2025版本起,结果数据集新增字段 TopoRuleCode 用于记录拓扑检查规则编码。