我在Oracle中有一个表,用于保存多边形图层的数据。我验证了它
--validate layer
CREATE TABLE Geom_Valid_Neighbour (SDO_ROWID ROWID, STATUS VARCHAR2(2000) );
EXECUTE MDSYS.SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT ('OTTAWANEIGHBOUR', 'GEOMETRY', 'Geom_Valid_Neighbour');
SELECT * FROM Geom_Valid_Neighbour;
并出现以下错误:
+----------------------+----------------------------------------------------------+
| SDO_ROWID | STATUS |
+----------------------+----------------------------------------------------------+
| (null) | Rows Processed <50> |
| AAA2EHAANAAB76nAAA | 13349 [Element <1>] [Ring <1>][Edge <112>][Edge <109>] |
| AAA2EHAANAAB76rAAC | 13349 [Element <1>] [Ring <1>][Edge <51>][Edge <55>] |
+----------------------+----------------------------------------------------------+
我可以用什么函数来修复此多边形图层的几何图形以及如何使用它?
答案 0 :(得分:1)
通常,进行自我联合或自相交可以纠正这些错误:调用SDO_GEOM.SDO_UNION(GEOMETRY,GEOMETRY,0.05)
来更新形状(假设你的容差实际上是0.05)。
但是:实际上这可能只是隐藏错误。当多边形边界自身交叉时返回错误代码,即它被错误地数字化。上面的操作只是隐藏了错误(=多边形不再被诊断为不正确),但它不会改变视觉形状。
所以我建议用肉眼观察这两个形状,看看实际的错误是什么。
如果多边形刚刚触及自身=它的边界向后翻倍并且在其他地方触及自身,也可能抛出错误 - 例如,两个末端彼此接触的新月形状。使用上述方法可以安全地校正这种形状:它将变成带孔的多边形,孔洞接触外圈。
您可能还想查看SDO_UTIL.RECTIFY_GEOMETRY()函数。它试图纠正三种最常见的几何误差: