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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值