13349 Oracle错误几何 - 多边形与自身相交

时间:2015-06-08 20:23:05

标签: oracle oracle-spatial

我在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>]    |    
+----------------------+----------------------------------------------------------+

我可以用什么函数来修复此多边形图层的几何图形以及如何使用它?

1 个答案:

答案 0 :(得分:1)

通常,进行自我联合或自相交可以纠正这些错误:调用SDO_GEOM.SDO_UNION(GEOMETRY,GEOMETRY,0.05)来更新形状(假设你的容差实际上是0.05)。

但是:实际上这可能只是隐藏错误。当多边形边界自身交叉时返回错误代码,即它被错误地数字化。上面的操作只是隐藏了错误(=多边形不再被诊断为不正确),但它不会改变视觉形状。

所以我建议用肉眼观察这两个形状,看看实际的错误是什么。

如果多边形刚刚触及自身=它的边界向后翻倍并且在其他地方触及自身,也可能抛出错误 - 例如,两个末端彼此接触的新月形状。使用上述方法可以安全地校正这种形状:它将变成带孔的多边形,孔洞接触外圈。

您可能还想查看SDO_UTIL.RECTIFY_GEOMETRY()函数。它试图纠正三种最常见的几何误差:

  • 重复点
  • 方向不正确(多边形)
  • 自我触摸/自交叉多边形