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;
原文地址:https://www.cnblogs.com/hamfy/p/3239918.html