ESRI拓扑模型在Geodatabase中和AE支持的不完善,导致了一个项目的问题,遇到了关于拓扑的一些很细节的错误。发现了很有意思的一些关于ESRI在拓扑上的一些问题,稍微记录一下,有些是ESRI的bug,估计这些有一些很深的历史因素吧(可以看下ESRI早期的arciinfo coverages数据模型)。问题描述: 1、拓扑检查的validate会改变拓扑的数据;2、拓扑会出现多次检查不一致;3、某些数据的拓扑检查会出错甚至崩溃。
看看ESRI的帮助文档时怎么解释的:(ArcGIS 9.3)
这张图是ESRI使用的拓扑检查和聚类(clustering)算法说明
过程1,当进行拓扑检查时,若参与拓扑的一个feature的定点在另外一个edge的容差(tolerance)内,则拓扑引擎会创建一个新的点,以便在聚类过程中有很好的空间集成性。
过程2,在进行validation以聚类feature的顶点时,理解空间实体如何被调整时非常重要的。若是参与拓扑运算的点落在另外一个实体的点的容差范围内,那么这些顶点就会根据向着更高级别的图层进行调整。若级别相同,则调整的结果是两个点的中数。
就像图中非常清楚的表达的一样,若没有点,ESRI都会帮你的实体插入进来一个顶点。那么validate完毕后,你会发现实体的顶点个数都发生变化了,顶点的坐标x,y也发生了变化。
那么,当多个图层进行拓扑运算的时候,若一个图层的实体因rank值设置的低而被迫进行调整,就有可能在进行拓扑运算后,因为改变而恰好和其他的图层元素运算时因这个调整又出现新的拓扑错误!
一般GIS软件的拓扑元素规格也是和这样方法类似,就是通过点根据容差进行判断,若认为他们应该是同一个点,则就把他们进行移动,作为一个点。在以下两种情况下会导致移动甚至会超过容差值:
1、当一个点既需要在水平方向和垂直方向都要进行计算的时候并产生移动,那么最大的移动距离就可能是直角三角形的长边那么长(X,Y分别是两条短边);
2、在进行拓扑计算的时候移动多次;
ESRI提供的一些解决方案:
1、把x,y的tolerance(以下缩写为tol)设置为10倍的x,y的resolution;
2、tol设置远远小于真实数据的精度要求;(比如数据精度为0.001米,则设置为0.000001)
3、若tol设置的太小,也会导致边界线的不一致性;
4、相反,若x,y的tol设置的太大,则会导致坐标互相垮向对方;
5、tol不要接近数据节点的捕捉精度;
6、设置坐标精度的级别;数据精度要求高的图层rank值设置较高;
7、通过设置rank控制聚类导致的坐标移动;
注意:在进行拓扑时,聚类的tol不能比x,y的tol设置的小,推荐比tol稍微大一点即可(推荐在1.2-1.5倍之间),但也不能太大。以上的方案,都是相对的,不是绝对的,参数到底需要设置多大,还是要根据具体的数据进行测试。