Create two stored procedures first
Baidu2google (Baidu to Google) and Google2baidu (Google to Baidu).
CREATE OR REPLACE PROCEDURE "Baidu2google"
(In_lat in Out number,in_lng on out number)
Is
RESULT number;
V number;
X number;
Y number;
Z number;
T number;
BEGIN
IF In_lat is null OR in_lng are null then
RETURN;
END IF;
IF in_lat = 0 OR in_lng = 0 Then
RE TURN;
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 on out number)
Is
RESULT number;
V number;
X number;
Y number;
Z number;
T number;
BEGIN
IF In_lat is null OR IN_LNG was 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;
Test code:
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
Output Result:
25.12950357111129114394070387150607218949, 120.99415968477080269592699287102653898
25.12345611379500842252418931941721965068, 120.987654009372443376128478150908972217
Google and Baidu latitude and longitude Mutual transfer (Plsql version)