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;
相關文章
相關標籤/搜索