【问题标题】:ST_Boundary for Oracle SpatialOracle Spatial 的 ST_Boundary
【发布时间】:2022-10-05 00:24:59
【问题描述】:

是否可以使用 Oracle Spatial 执行相当于 ST_Boundary 的操作?就像从 POLYGON 获取 LINESTRING/MULTILINESTRING,还是从 LINESTRING 获取 MULTIPOINT?

我知道其他供应商支持它:

https://postgis.net/docs/ST_Boundary.html

https://docs.microsoft.com/en-us/sql/t-sql/spatial-geometry/stboundary-geometry-data-type?view=sql-server-ver16

【问题讨论】:

    标签: oracle gis spatial oracle-spatial


    【解决方案1】:

    获取边界请看SDO_UTIL.POLYGONTOLINE

    没有用于线串到多点的内置 fn。但这是一个简单的 fn (假设是 2D):

    CREATE OR REPLACE FUNCTION multipoint_from_line (line_geom SDO_GEOMETRY)
       RETURN SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE IS
    
       multipoint SDO_GEOMETRY := NULL;
    BEGIN
       IF line_geom IS NOT NULL
       THEN
         multipoint := line_geom;
    
         IF multipoint.sdo_ordinates.count = 0
         THEN
           multipoint := NULL;
         ELSE
           multipoint.sdo_gtype := 2005;
           multipoint.sdo_elem_info := 
    sdo_elem_info_array(1,1,multipoint.sdo_ordinates.count/2);
         END IF;
       END IF;
    
       return multipoint;
    END;
    /
    
    -- Calling from SQL
    SELECT multipoint_from_line 
    (sdo_geometry(2002,4326,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(0,0,1,1,3,3)))
    FROM dual;
    
    -- Calling from PL/SQL
    DECLARE
       multipoint SDO_GEOMETRY;
    BEGIN
       multipoint := multipoint_from_line 
    (sdo_geometry(2002,4326,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(0,0,1,1,3,3)));
    END;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      相关资源
      最近更新 更多