首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sdo_relate ORA-13343:多边形几何图形的坐标小于四个

sdo_relate ORA-13343:多边形几何图形的坐标小于四个
EN

Stack Overflow用户
提问于 2022-02-08 01:35:31
回答 1查看 131关注 0票数 2

我正在尝试做一个SDO_relate,但是它正在返回一个错误。

我的代码:

代码语言:javascript
复制
ON sdo_relate (f.tls_da_location, ntp.boundary, 'MASK=ANYINTERACT') = 'TRUE'
WHERE ntp.boundary IS NOT NULL

我试过这个和sdo_util.getnumvertices (ntp.boundary) > 4

但是,它仍然返回以下错误:

代码语言:javascript
复制
ORA-29902: error in executing ODCIIndexStart() routine
ORA-13249: Internal error: Memory Resident R-tree
ORA-13343: a polygon geometry has fewer than four coordinates
ORA-06512: at "MDSYS.SDO_INDEX_METHOD_10I", line 333
12801. 00000 -  "error signaled in parallel query server %s"
*Cause:    A parallel query server reached an exception condition.
*Action:   Check the following error message for the cause, and consult
           your error manual for the appropriate action.
*Comment:  This error can be turned off with event 10397, in which
           case the server's actual error is signaled instead.

有没有其他人建议忽略这些没有4分的多边形?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-16 08:51:50

这里有几个方面..。

First:优化器可以自由地以任何顺序应用谓词。在您的示例中,它似乎首先应用了空间过滤器,然后将选择器应用于顶点数。这意味着在对顶点数进行测试之前,您将得到异常。

优化器这样做是很自然的:改变顺序将意味着一个完整的表扫描,只返回带有4个点或更多点的几何图形,然后通过空间过滤器传递结果。这将是非常缓慢的,优化器正确地倾向于首先使用索引。

没有控制此行为的机制(提示或其他机制)。使用子查询或视图没有任何区别:优化器会将查询简化为简单的查询。可能有一个带有NO_MERGE提示的子查询可以工作:但它会产生上述效果,强制进行完整的表扫描,并通过空间过滤器完全传递所有几何图形。这不是件好事。

第二:少于4个顶点的多边形是不正确的。最简单的多边形是三角形。它有三个点(A.),但所有多边形都必须闭合,即编码为四个顶点:A.。这是OGC简单特性为SQL规范定义的规则之一。还有一些多边形必须遵守:

不存在多余的vertices

  • Orientation (外环逆时针方向,内环顺时针方向,即环的自触rings

  • Ordering (外环后面必须跟着它的内环)

不遵守规则的形状是无效。当您使用无效形状时会发生什么实际上是未定义的。根据错误的性质和在此形状上所做的操作(查询、度量、缓冲区、剪辑、合并.),您可能会得到以下任何行为:

  1. 错误被忽略,得到正确的结果--
  2. --得到一个异常(即您的情况)--
  3. --没有错误,但是结果是不正确的

最糟糕的结果是#3:您不能信任应用程序的结果。它可能返回一个包裹的m2中的错误区域。或者说两个相邻的包裹不重叠,而在现实中是这样的.这太糟了。

在空间数据的处理和处理中,数据质量是的头等重要的。请注意,错误通常是不可见的:大多数地图映射工具具有足够的弹性,仍然可以显示形状,而缺陷是最不可能视觉检测到的。

解决方案很简单:确保数据是有效的。为此,您可以使用SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT()。把它翻遍每一个形状。它会告诉你哪些形状是不正确的,以及错误是什么。

还有SDO_UTIL.RECTIFY_GEOMETRY()。这一次将试图纠正最常见的错误:

vertices

  • Reorients

  • 删除冗余的self-orientations

,并重新订购self-orientations。

它不能纠正你所看到的错误(少于四点),因为它不确定什么是真正的错误。你需要看看这些形状是什么,更重要的是它们来自哪里。然后要么改正,要么把它们移除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71027581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档