sdo_geometry 转 st_geometry
CREATE OR REPLACE FUNCTION sdo2sde(geo SDO_GEOMETRY) RETURN st_geometry IS lx number; --类型 (点、线、面) coord varchar2(1000); --坐标序列 num number; i number; st st_geometry; BEGIN lx := geo.SDO_GTYPE; coord := ''; i := 1; if lx = 2001 then --点 coord := geo.SDO_POINT.X || ' ' || geo.SDO_POINT.Y; st := sde.ST_PointFromText('point( '|| coord ||' )',0); elsif lx = 2002 then --线 num := geo.SDO_ORDINATES.COUNT(); while i<= num loop if mod(i, 2)=1 then --奇数 coord := coord || geo.SDO_ORDINATES(i) || ' '; elsif mod(i, 2)=0 then --偶数 coord := coord || geo.SDO_ORDINATES(i) || ','; end if; i := i+1; end loop; coord := substr(coord, 1, length(coord)-1); --去除最后一个逗号 st := sde.ST_LineFromText('linestring( '|| coord ||' )', 0); elsif lx = 2003 then --面 num := geo.SDO_ORDINATES.COUNT(); while i<= num loop if mod(i, 2)=1 then --奇数 coord := coord || geo.SDO_ORDINATES(i) || ' '; elsif mod(i, 2)=0 then --偶数 coord := coord || geo.SDO_ORDINATES(i) || ','; end if; i := i+1; end loop; coord := substr(coord, 1, length(coord)-1); --去除最后一个逗号 st := sde.ST_PolyFromText('polygon(( '|| coord ||' ))', 0); end if; RETURN st; END;