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

Oracle 18c如何获取SDO_GEOMETRY线各顶点的点几何行

Oracle 18c 逐行返回线要素顶点对应点几何的实现方案

你已经在用的sdo_util.getvertices()本身就能返回每个顶点的序号、坐标值,直接基于这些返回值构造SDO_GEOMETRY点对象即可,不需要依赖未公开函数,兼容性和稳定性都更好。

实现代码

with cte as (
select 100 as asset_id, sdo_geometry('linestring (10 20, 30 40)')                       shape from dual union all
select 200 as asset_id, sdo_geometry('linestring (50 60, 70 80, 90 100)')               shape from dual union all
select 300 as asset_id, sdo_geometry('linestring (110 120, 130 140, 150 160, 170 180)') shape from dual)
select 
    cte.asset_id,
    v.id as vertex_id,
    sdo_geometry(
        2001, -- 固定值:代表二维点类型
        cte.shape.sdo_srid, -- 直接继承原线要素的坐标系
        sdo_point_type(v.x, v.y, null),
        null,
        null
    ) as shape
from 
    cte, sdo_util.getvertices(shape) v

返回结果

执行后输出格式完全匹配预期:

ASSET_ID  VERTEX_ID            SHAPE 
---------- ---------- ---------------- 
       100          1   [SDO_GEOMETRY] 
       100          2   [SDO_GEOMETRY] 

       200          1   [SDO_GEOMETRY] 
       200          2   [SDO_GEOMETRY] 
       200          3   [SDO_GEOMETRY] 

       300          1   [SDO_GEOMETRY] 
       300          2   [SDO_GEOMETRY] 
       300          3   [SDO_GEOMETRY] 
       300          4   [SDO_GEOMETRY] 

补充说明

  • 如果你的线要素是带Z值的三维数据,只需要把点类型编号从2001改为3001,同时把sdo_point_type的第三个参数传入v.z即可;如果是带M测量值的线,对应调整点类型编号和参数即可和原数据维度对齐。
  • 你提到的未公开函数SDO_UTIL.GET_COORDINATE(geometry, point_number)虽然也能通过生成顶点序号序列关联的方式实现同样效果,但因为是非公开接口,Oracle不保证跨版本兼容性,不推荐在生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:18:08