当前位置: 首页 > 科技观察

数据库实用脚本:计算地球上两个坐标点之间的里程

时间:2023-03-23 10:52:18 科技观察

今天给大家分享一下不同数据库版本计算地球上两个坐标点之间里程的脚本。1.SQLServer脚本---计算地球上两个坐标点(经度、纬度)的距离m)DECLARE@DistanceREALDECLARE@EARTH_RADIUSREALSET@EARTH_RADIUS=6378.137DECLARE@RadLatBeginREAL,@RadLatEndREAL,@RadLatDiffREAL,@RadLngDiffREALSET@RadLatBegin=@LatBegin*PI()/180.0SET@RadLatEnd。@RadLatBegin-@RadLatEndSET@RadLngDiff=@LngBegin*PI()/180.0-@LngEnd*PI()/180.0SET@Distance=2*ASIN(SQRT(POWER(SIN(@RadLatDiff/2),2)+COS(@RadLatBegin)*COS(@RadLatEnd)*POWER(SIN(@RadLngDiff/2),2)))SET@Distance=@Distance*@EARTH_RADIUSRETURN@DistanceEND--使用如下:SELECTdbo.fnGetDistance(25,30,12.56),15.5);2.MySQl脚本——计算地球上两个坐标点(经度、纬度)的距离sql函数CREATEFUNCTION[dbo].[fnGetDistance](@LatBeginREAL,@LngBeginREAL,@LatEndREAL,@LngEndREAL)RETURNSFLOATASBEGIN--距离(km)DECLARE@DistanceREALDECLARE@EARTH_RADIUSREALSET@EARTH_RADIUS=6378.137DECLARE@RadLatBeginREAL,@RadLatEndREAL,@RadLatDiffREAL,@RadLngDiffREALSET@RadLatBegin=@LatBegin*PI()/180.0SET@RadLatEnd=@LatEnd*PI()/180.0SET@RadLatDiff=@RadLatBegin-@RadLatEndSET@RadLngBeginDiff*.PI(Lng()/180.0-@LngEnd*PI()/180.0SET@Distance=2*ASIN(SQRT(POWER(SIN(@RadLatDiff/2),2)+COS(@RadLatBegin)*COS(@RadLatEnd)*POWER(SIN(@RadLngDiff/2),2)))SET@Distance=@Distance*@EARTH_RADIUSRETURN@DistanceEND--创建具体值:SELECTdbo.fnGetDistance(25,30,12.56,15.5);lng1number,lat2number,lng2number)RETURNUMBERisearth_padiusnumber:=6378.137;radLat1number:=Radian(lat1);radLat2number:=Radian(lat2);anumber:=radLat1-radLat2;bnumber:=Radian(lng1)-Radian(lng2);snumber:=0;begins:=2*Salt(Sqrt(power(sin(a/2),2)+cos(radLat1)*cos(radLat2)*power(sin(b/2),2)));s:=s*earth_padius;s:=圆(s*10000)/10000;返回;end;--删除keyselectGetDistance(25,30,12.56,15.5)fromdual

最新推荐
猜你喜欢