【问题标题】:Get XY coordinates from GEOM_SEGMENT_START_PT() output从 GEOM_SEGMENT_START_PT() 输出中获取 XY 坐标
【发布时间】:2022-06-11 01:57:45
【问题描述】:

甲骨文 18c:

如何从SDO_UTIL.GEOM_SEGMENT_START_PT() 得到的 LRS 点获取 X 和 Y 坐标?

select
  sdo_lrs.geom_segment_start_pt(sdo_geometry('linestring(1 2, 3 4, 5 6)'))
from
  dual

SDO_LRS.GEOM_SEGMENT_START_PT(SDO_GEOMETRY('LINESTRING(12,34,56)')) 
---------------------------------------------------
SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(1,2))

注意:坐标存储在 SDO_ORDINATE_ARRAY( ) 中,而不是 SDO_POINT 中。

期望的输出:

 X  Y
-- --
 1  2

通常,我会使用a.shape.sdo_point.x 之类的东西。但我认为这不适用于这里,因为坐标没有存储在 SDO_POINT 中。

【问题讨论】:

    标签: sql oracle geometry coordinates oracle-spatial


    【解决方案1】:

    使用以下 SQL 获取 X 和 Y 坐标

        select 
          t.X, 
          t.Y 
        from 
          TABLE(
            SDO_UTIL.GETVERTICES(
              sdo_lrs.geom_segment_start_pt(
                sdo_geometry('linestring(1 2, 3 4, 5 6)')
              )
            )
          ) t;
    

    【讨论】:

      【解决方案2】:

      以@Psaraj12 的回答为基础——以多行为例:

      with cte as (
      select sdo_geometry ('linestring (1 2, 3 4)', 26917) shape from dual union all
      select sdo_geometry ('linestring (5 6, 7 8)', 26917) shape from dual union all
      select sdo_geometry ('linestring (9 10, 11 12)', 26917) shape from dual)
      
      select 
          * 
      from 
          cte
      cross join
          table(sdo_util.getvertices(cte.shape))
      where
          id = 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-22
        • 2016-08-30
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        • 2017-11-18
        • 2013-03-09
        • 1970-01-01
        相关资源
        最近更新 更多