oracle 经纬度格式转换,GOOGLE与百度经纬度互转(plsql版)

首先创建两个存储过程



BAIDU2GOOGLE(百度转google)和GOOGLE2BAIDU(google转百度)。

CREATE OR REPLACE PROCEDURE "BAIDU2GOOGLE"

(in_lat IN OUT NUMBER,in_lng IN OUT NUMBER)

IS

RESULT NUMBER;

V NUMBER;

X NUMBER;

Y NUMBER;

Z NUMBER;

T NUMBER;

BEGIN

IF in_lat IS NULL OR in_lng IS NULL THEN

RETURN;

END IF;

IF in_lat = 0 OR in_lng = 0 THEN

RETURN;

END IF;

V := (ACOS(-1) * 3000.0) / 180.0;

X := in_lng - 0.0065;

Y := in_lat - 0.006;

IF X = 0 OR Y = 0 THEN

RETURN;

END IF;

Z := sqrt(X*X + Y*Y) - 0.00002 * sin(Y*V);

T := atan2(Y,X) - 0.000003 * cos(X*V);

in_lat := Z * sin(T);

in_lng := Z * cos(T);

EXCEPTION

WHEN OTHERS THEN

NULL;

END;

CREATE OR REPLACE PROCEDURE "GOOGLE2BAIDU"

(in_lat IN OUT NUMBER,in_lng IN OUT NUMBER)

IS

RESULT NUMBER;

V NUMBER;

X NUMBER;

Y NUMBER;

Z NUMBER;

T NUMBER;

BEGIN

IF in_lat IS NULL OR in_lng IS NULL THEN

RETURN;

END IF;

IF in_lat = 0 OR in_lng = 0 THEN

RETURN;

END IF;

V := (ACOS(-1) * 3000.0) / 180.0;

X := in_lng;

Y := in_lat;

Z := sqrt(X*X + Y*Y) + 0.00002 * sin(Y*V);

T := atan2(Y,X) + 0.000003 * cos(X*V);

in_lat := Z * sin(T) + 0.006;

in_lng := Z * cos(T) + 0.0065;

EXCEPTION

WHEN OTHERS THEN

NULL;

END;

测试代码:

declare

val varchar2(1024);

lat number;

lng number;

begin

lat := 25.123456;

lng := 120.987654;

google2baidu(lat,lng);

val := to_char(lat) || ' , ' || to_char(lng);

dbms_output.put_line(val);

baidu2google(lat,lng);

val := to_char(lat) || ' , ' || to_char(lng);

dbms_output.put_line(val);

end;

输出结果:

25.12950357111129114394070387150607218949 , 120.99415968477080269592699287102653898

25.12345611379500842252418931941721965068 , 120.987654009372443376128478150908972217

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值