一、公式

对上面的公式解释如下:
1.Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;
2.a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差;
3.6378.137为地球半径,单位为千米;
计算出来的结果单位为千米。
二、代码实现(oracle)
Create Or Replace Function get_earth_distance(lon1 Number,
lat1 Number,
lon2 Number,
lat2 Number) Return Number As
rad_lon1 Number(12, 8);
rad_lat1 Number(12, 8);
rad_lon2 Number(12, 8);
rad_lat2 Number(12, 8);
a Number(12, 8);
b Number(12, 8);
pi Number := 3.14159265;
s Number(20, 8);
EARTH_RADIUS Number := 6378.137;
Begin
rad_lat1 := lat1 * pi / 180.0;
rad_lat2 := lat2 * pi / 180.0;
rad_lon1 := lon1 * pi / 180.0;
rad_lon2 := lon2 * pi / 180.0;
a := rad_lat1 - rad_lat2;
b := rad_lon1 - rad_lon2;
s := 2 * asin(sqrt(power(sin(a / 2), 2) +
cos(rad_lat1) * cos(rad_lat2) *
power(sin(b / 2), 2)));
s := s * EARTH_RADIUS;
s := round(s * 100000) / 100000;
s := s * 1000;
Return s;
End get_earth_distance;
计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下。
三、关于经纬度十进制表示法
对于两个点,在纬度相等的情况下:
经度每隔0.00001度,距离相差约1米;每隔0.0001度,距离相差约10米;每隔0.001度,距离相差约100米;每隔0.01度,距离相差约1000米;每隔0.1度,距离相差约10000米。
对于两个点,在经度相等的情况下:
纬度每隔0.00001度,距离相差约1.1米;每隔0.0001度,距离相差约11米;每隔0.001度,距离相差约111米;每隔0.01度,距离相差约1113米;每隔0.1度,距离相差约11132米。