一、先看看在ArcInfo里面的
拓扑的实现:
其中在ArcGIS
8以后,Geodatabase成为一种全新的空间数据模型。它采用一种开放的结构将空间数据(包括:矢量、栅格、影像、三维地形等)及其相关的属性数据统一存放在工业标准的
数据库管理系统DBMS中。空间要素类(Feature Class),如:河流、国界、宗地、电杆等,对应了DBMS中的表,而具体的一个要素(Feature)则是表中的一条记录。具有共同空间参考的一组空间要素类又可以组成更大的结构,称为要素
数据集合(Feature Data Set)。除了空间要素类以外,Geodatabase中还可以建立关系类、几何网络、定义要素子类型、
值域及规则等。所有的要素类均可以借助通用的
CASE工具(如:Visio、Rational
Rose等)进行模型定义和扩展。
Geodatabase引入了拓扑关系规则。拓扑关系规则可作用于同一要素数据集中的不同要素类或者同一要素类中的不同要素。用户可以指定空间数据必须满足的拓扑关系约束,譬如:要素之间的相邻关系、连接关系、覆盖关系、相交关系、重叠关系等。所有这些关系都对应相应的规则。比如在土地调查规划应用中,两个相邻的地块之间不能有"飞地",我们可以有一条对应的规则:"相邻
多边形间不能存在间隙"。再如,当以河流作为国界、省界、或者任何边界时,河流(线状)与界线必须一致,可用规则:"线必须被多边形边线覆盖"。用户通过选择若干规则的组合构成对空间数据必须满足的拓扑关系的灵活指定。为了检查和维护空间数据的拓扑关系正确性,在ArcGIS
Desktop中给出了一组(编辑)工具,用于对空间数据根据用户指定的拓扑关系规则进行编辑,并帮助用户及时发现可能存在的拓扑关系错误。
Geodatabase中并不实际保存拓扑关系。不同要素类之间的公共点、公共边等要素是在拓扑编辑过程中动态地检测到的。例如,我们选择一条线并对其进行编辑,此时Geodatabase将自动检测到与此线要素具有公共几何元素的所有其它要素,当我们修改该线要素时,系统自动对所有的公共边和公共点进行维护,以保持其应有的拓扑关系。这种实现方式的好处在于,可以局部、有选择的维护拓扑关系,效率很高。
在拓扑关系类中,除了拓扑关系规则外,还要指定:参与拓扑约束的各要素类,容限值(cluster tolerance),
精度等级(coordinate accuracy
rank)。其中:容限值指落在以此值为半径的圆形区域内的所有点被看成是一致的,会被捕捉(snap)到一起。精度级别表示每个参与拓扑约束的要素类都可以人为地赋予一个精度级别,精度级别越高,在容限值范围内需要移动时就越稳定,即:级别低的要向级别高的靠拢。当不同的要素类数据精度不一致时,通常应将精度较高者设定为较高级别。
二、再看看在ArcEngine中实现拓扑的过程和接口函数:
首先,拓扑作为比较高级的功能,需要在程序里首先注册相应的功能代码。实现这一必要步骤的接口是:IAoInitialize,它有Initialize 方法,必须在任何的其他组件前面使用,它可以初始化一个产品代码。这是C#的方法声明格式:public esriLicenseStatus Initialize (esriLicenseProductCode
ProductCode);
esriLicenseProductCode有六个
常量,我们在这里要用到的是esriLicenseProductCodeEngineGeoDB。
下面看其拓扑实现的结构流程:首先需要获取工作空间,定义IWorkspaceFactory接口,它的作用是打开相应的数据库文件,然后赋予 IFeatureWorkspace接口,然后获取相应的数据集接口IFeatureDataset,将IFeatureDataset赋予 ITopologyContainer以获取属于这个数据集的拓扑集合,然后利用ITopologyContainer的CreateTopology方法创建具体的拓扑类,这样就创建了属于相应数据集的拓扑了。然后就是通过一些接口和函数来设置这个拓扑的特性:图层、容限值、精度等级以及拓扑关系规则,最后通过ValidateTopology方法执行这个拓扑即可。可以看到它的实现过程跟上面的是一样的。
三、 有关geodatabase的topology规则
多边形topology
1.must
not overlay:单要素类,多边形要素相互不能重叠
2.must not have
gaps:单要素类,连续连接的多边形区域中间不能有空白区(非数据区)
3.contains
point:多边形+点,多边形要素类的每个要素的边界以内必须包含点层中至少一个点
4.boundary must
be covered by:多边形+线,多边形层的边界与线层重叠(线层可以有非重叠的更多要素)
5.must be
covered by feature class of:多边形+多边形,第一个多边形层必须被第二个完全覆盖(省与全国的关系)
6.must be covered
by:多边形+多边形,第一个多边形层必须把第二个完全覆盖(全国与省的关系)
7.must not
overlay with:多边形+多边形,两个多边形层的多边形不能存在一对相互覆盖的要素
8.must cover
each other:多边形+多边形,两个多边形的要素必须完全重叠
9.area boundary
must be covered by boundary of:多边形+多边形,第一个多边形的各要素必须为第二个的一个或几个多边形完全覆盖
10.must be properly inside
polygons:点+多边形,点层的要素必须全部在多边形内
11.must be
covered by boundary of:点+多边形,点必须在多边形的边界上
线topology
1.must
not have dangle:线,不能有悬挂节点
2.must not have
pseudo-node:线,不能有伪节点
3.must not overlay:线,不能有线重合(不同要素间)
4.must not self overlay:线,一个要素不能自覆盖
5.must not
intersect:线,不能有线交叉(不同要素间)
6.must not self
intersect:线,不能有线自交叉
7.must not intersect or touch
interrior:线,不能有相交和重叠
8.must be single part:线,一个线要素只能由一个path组成
9.must not
covered with:线+线,两层线不能重叠
10.must be
covered by feature class of:线+线,两层线完全重叠
11.endpoint must
be covered by:线+点,线层中的终点必须和点层的部分(或全部)点重合
12.must be
covered by boundary of:线+多边形,线被多边形边界重叠
13.must be
covered by endpoint of:点+线,点被线终点完全重合
14.point must be
covered by line:点+线,点都在线上
四、ArcGIS 常见拓扑错误的修改方法综述
一)、面不能相互重叠(must not overlap)
修改方法有以下几种:
1、可以直接修改要素节点去除重叠部分。
2、在错误上右键选择merge,将重叠部分合并到其中一个面里。
3、在错误上右键选择create
feature,将重叠部分生成一个新的要素,然后利用
editor 下的merge 把生成的面合并到相邻的一个面里。
4、用editor 下clip 直接裁剪掉重叠部分。
二)、面不能有缝隙(must not
have gaps)
1、可以直接修改要素节点去除重叠部分。
2、在错误上右键选择create
feature,将缝隙部分生成一个新的要素,然后利用
editor 下的merge 把生成的面合并到相邻的一个面里。
3、task 里选择auto-complete
polygon,用草图工具自动完成多边形,会在缝隙区
域自动生成两个多边形,然后用merge 合并到相邻面里。
注:查面的缝隙时最面最外围一圈会认为是缝隙,这种可以标注例外。
三)、线不能相交(检查线要素不能重叠规则包含在线不能相交里)
1、完全重叠的话可以选中其中一条删除,或者利用spatial etl tool 中相关函数进
行删除重复线处理。
2、部分重叠可以在错误上右键选择subtract 去除重复部分
3、直接用平面
交叉线对线重叠进行去除,相交线打断,具体用法为选中线,点
击拓扑工具条上平面交叉线工具。
四)、线不能有悬挂
1、根据实际情况对线进行修改消除悬挂线。
2、可以在拓扑错误列表中选中所有悬挂错误右键进行自动延伸和裁剪。延伸或
裁剪时需输错一个距离,小于这个距离的悬挂线会被自动延伸或裁剪。
五)、其他错误
1、多部分要素
A、可以用高级编辑工具条上打散要素进行打散
B、直接用toolbox 里的multipart to
singlepart。
2、面状要素、线状要素错误修复
Problems repaired with this tool:
•Null geometry—The feature will be deleted from the feature
class.
•Short segment—The geometry's short segment will be
deleted.
•Incorrect ring
ordering—The geometry will be updated
to have
correct ring ordering.
•Incorrect segment orientation—The geometry will be updated to
have correct segment
orientation.
•Self
intersections—The geometry's segments
that intersect will be
split at their intersection.
•Unclosed rings—The unclosed rings will be closed.
•Empty parts—The parts
that are null or empty will be deleted.
五、ARCGIS拓扑检查步骤与修正拓扑错误技巧
一副人工或自动矢量化后的数据,在正式应用数据之前,应根据要求检查和修正各种拓扑错误!
地理数据是庞大和海量的数据,无乱是人为的还是自动的矢量化,都可以出现错误,对于数据量很大的数据来说,检查和修正错误是一项枯燥复杂而且工作量很大的工作。
根据几年来摸索的出现经验,现总结几种方法和大家讨论,欢迎大家来参加讨论和指正!
1 。在workstation 工作站下 ,编辑检查数据,此法 要求源数据为 coverage,且是在黑乎乎的界面下进行操作,
虽然也可以设置编辑菜单,但总体还是要用到很多命令,比较麻烦。
第一步:把文件转为 coverage格式,进去catalog,设置其各项容限值(在文件属性中 tolerance项,根据精度要求设置)
第二步:进入arc下修改!
启动workstation的arc环境,输入ae (注释:arcedit),ec + (cov文件路径)
具体命令格式可以输入help,查看帮助
显示悬挂线的命令是:de arc node dangle ;回车
nodec dangle 2 回车
disp999,回车
draw,回车
这样所有的悬挂的着,为接上的线错误,都显示为红色,接下来只要用相应的命令进行处理修改就可以!
建议大家,修改前,对图层做一下build处理,这样好多细小的错误它都回自动处理掉,注意选择好参数!
2. 将数据装载如个人地理数据库,用拓扑功能自动检查数据错误
(此法可在arcmap下进行,界面友好,比较适合于拓扑错误不是很多的图形修改)
启动ArcCatlalog;
任意选择一个本地目录,"右键"->"新建"->"创建个人personal GeoDatabase";
选择刚才创建的GeoDatabase,"右键"->"新建"->"数据集dataset";设置数据集的坐标系统,如果不能确定就选择你要进行分析的数据的坐标系统;
选择刚才创建的数据集,"右键"->"导入要素类inport --feature class single",导入你要进行拓扑分析的数据;
选择刚才创建的数据集,"右键"->"新建"->"拓扑",创建拓扑,根据提示创建拓扑,添加拓扑处理规则;
进行拓扑分析。
最后在arcmap中打开由拓扑规则产生的文件,利用topolopy工具条中错误记录信息进行修改
将数据集导入ARCMAP中,点击edit按钮进行编辑。
打开eidt下拉菜单,选择more editing tools--topology出现拓扑编辑工具栏。
选择要拓扑的数据,点击打开error inspector按钮。
在error inspector对话框中点击search now,找出所有拓扑的错误。
对线状错误进行Mark as Exception。
对polygon错误逐个检查,首先选择错误的小班,点击右键选择zoom to,然后点击merge,选择合适的图班进行merge处理,这样不会丢失小班信息。
另一个说法:
用catalog 建一个个人地理数据库,new一个featuredataset
把要修改错误的shp文件导入到featuredataset下面
然后右键点featuredataset,new一个topoloy数据层,
点击下一步,勾选刚才导入的shp层,下一步,添加拓扑检查规则,这一步很重要,你要显示断线,没接上的线,出头线等,都要选相应的拓扑规则!选完之后,点下一步完成
catalog生成一个拓扑检查层文件,用arcmap打开该文件
就可以看见你需要显示的错误,这样再用编辑工具修改起来就方便好多