You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Spatial中SDO_GEOM.SDO_LENGTH报无效SRID的问题求助

Oracle空间几何验证通过但计算长度报ORA-13029错误解析

问题场景

执行拓扑验证SQL:

SELECT t.STREET_ID,
t.FC_GEOM.SDO_SRID SRID,
SUBSTR(t.FC_GEOM.SDO_GTYPE, 1, 1) DIM_COUNT,
SUBSTR(t.FC_GEOM.SDO_GTYPE, 4, 1) GTYPE,
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(t.FC_GEOM, 0.05) VALIDATION_RES
FROM ST_SEGMENT t WHERE t.STREET_ID = 'STEID5005';

返回的74行结果中,VALIDATION_RES字段全部为TRUE,但执行长度计算SQL时:

SELECT t.STREET_ID, SDO_GEOM.SDO_LENGTH(t.FC_GEOM, 0.005, 'KM')
FROM ST_SEGMENT t WHERE t.STREET_ID = 'STEID5005';

触发ORA-13029错误:

ORA-13029: Invalid SRID in the SDO_GEOMETRY object
ORA-06512: at "*****.MD", line 1723
ORA-06512: at "*****.MDERR", line 8
ORA-06512: at "*****.SDO_GEOM", line 2217
ORA-06512: at "*****.SDO_GEOM", line 2149
ORA-06512: at line 1
13029. 00000 -  "Invalid SRID in the SDO_GEOMETRY object"
*Cause:    There is an invalid SDO_SRID in the SDO_GEOMETRY object.
           The specified SRID may be outside the valid SRID range.
*Action:   Verify that the geometries have valid SRIDs. 

根因分析

  1. 拓扑验证函数的校验范围有限
    SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT仅校验几何对象的拓扑合法性(如是否存在自相交、环是否闭合等),不会验证SDO_SRID是否在Oracle Spatial的空间参考系统注册表中有效。哪怕SRID是未注册值或0,只要拓扑结构正确,函数就会返回TRUE。

  2. 长度计算对SRID的严格要求
    SDO_GEOM.SDO_LENGTH需要基于SRID对应的空间参考系统(投影/地理坐标系)进行距离换算,因此会严格检查SRID是否存在于SDO_COORD_REF_SYS表中,且状态为有效。如果几何对象的SDO_SRID未注册、已注销,或是0(未定义空间参考),就会触发无效SRID错误。

  3. 常见触发场景
    你的数据中FC_GEOM.SDO_SRID大概率是0,或是一个未在SDO_COORD_REF_SYS中注册的数值——这类SRID能通过拓扑验证,但无法支持空间计算。

解决方法

  1. 检查SRID有效性
    执行以下SQL确认目标SRID是否在系统中注册:

    SELECT COORD_REF_SYS_NAME, COORD_REF_SYS_KIND, IS_LEGACY
    FROM SDO_COORD_REF_SYS
    WHERE SRID = (SELECT DISTINCT FC_GEOM.SDO_SRID FROM ST_SEGMENT WHERE STREET_ID = 'STEID5005');
    

    若无返回结果,说明该SRID未注册。

  2. 修正SRID值

    • 如果几何对象实际对应已注册的SRID,直接更新数据:
      UPDATE ST_SEGMENT
      SET FC_GEOM.SDO_SRID = 你的有效SRID数值
      WHERE STREET_ID = 'STEID5005';
      COMMIT;
      
    • 若需使用自定义空间参考,需先以DBA权限在SDO_COORD_REF_SYS中注册该SRID,再执行长度计算。
  3. 处理SRID为0的情况
    若SRID是0,说明几何对象未关联空间参考,需明确其对应的坐标系并设置正确的SRID,否则无法进行真实距离的计算。

内容的提问来源于stack exchange,提问作者Behseini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:20:23