【发布时间】:2022-10-05 00:24:59
【问题描述】:
是否可以使用 Oracle Spatial 执行相当于 ST_Boundary 的操作?就像从 POLYGON 获取 LINESTRING/MULTILINESTRING,还是从 LINESTRING 获取 MULTIPOINT?
我知道其他供应商支持它:
【问题讨论】:
标签: oracle gis spatial oracle-spatial
是否可以使用 Oracle Spatial 执行相当于 ST_Boundary 的操作?就像从 POLYGON 获取 LINESTRING/MULTILINESTRING,还是从 LINESTRING 获取 MULTIPOINT?
我知道其他供应商支持它:
【问题讨论】:
标签: oracle gis spatial oracle-spatial
获取边界请看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;
/
【讨论】: