[Oracle]计算地表两点之间的距离
--创建存储过程point_diatance
create or replace procedure point_distance Authid Current_User is
--定义变量
net1 float;
net2 float;
net3 int;
net4 int;
net5 int;
lata float;
lona float;
latb float;
lonb float;
net6 float;
net7 float;
net8 float;
net9 float;
net10 float;
net11 float;
net12 float;
net13 float;
begin
for net3 in 1..49
loop --开始循环
for net4 in 1..49
loop
--从aa_point表格中读取经纬度
select latitude into lata from AA_POINT where point_id = net3;
select longtitude into lona from AA_POINT where point_id = net3;
select latitude into latb from AA_POINT where point_id = net4;
select longtitude into lonb from AA_POINT where point_id = net4;
--开始计算过程--核心公式
net6 := sin(lata);
net7 := sin(latb);
net8 := cos(lona-lonb);
net9 := cos(lata);
net10 := cos(latb);
net11:= net6 * net7 * net8 + net9 * net10;
if net11 >= 1 then net12 := acos(0.999);
else if net11 <= -1 then net12 := acos(-0.999);
else net12 := acos(net11);
end if;
end if;
net2 := 6371.004 * net12 * 3.1415926/180;
--net1 := sin(lata)*sin(latb)*cos(lona-lonb)+cos(lata)*cos(latb);
--net2 := 6371.004*acos(net1)*3.1415926/180;
--输出计算结果到aa_distance表格
update aa_distance set point_1=net3,point_2=net4,distance=net2
where id_number = net5;
end loop;
end loop;--结束循环
commit;--提交任务
end point_distance;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。