标签:
首先创建两个存储过程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
标签:
原文地址:http://blog.csdn.net/cackeme/article/details/45057455