根据地图经纬度计算两点间的距离

时间:2025-01-20 13:59:22
经纬度丢失计算距离

1.纬度相同,经度不同
在纬度相同的情况下:
经度每隔0.00001度,距离相差约1米;
每隔0.0001度,距离相差约10米;
每隔0.001度,距离相差约100米;
每隔0.01度,距离相差约1000米;
每隔0.1度,距离相差约10000米。
2.经度相同,纬度不同
纬度每隔0.00001度,距离相差约1.1米;
每隔0.0001度,距离相差约11米;
每隔0.001度,距离相差约111米;
每隔0.01度,距离相差约1113米;
每隔0.1度,距离相差约11132米。

最近需要做地图的一些功能,其中有一点是需要计算 两点间的距离,网上其实大多都是使用如下方法1

方法1

function Rad(d){
          return d * Math.PI / 180.0;
       }
function getDistance(lat1,lng1,lat2,lng2){
       var radLat1 = Rad(lat1);
       var radLat2 = Number(Rad(lat2));
       var a = Number(radLat1 - radLat2);
       var  b = Rad(lng1) - Rad(lng2);
       var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
       s = s *6378.137 ;
       s = Math.round(s * 10000) / 10; 
       return s;
 }

方法2

利用三角形的勾股定理,假设成两点的坐标就是平面直角坐标系的横纵坐标,求两点的距离 就是利用勾股定理去,(x2-x1)2 +(y2-y1)2 再进行开根.但是与坐标系中的横纵坐标不同的是,经纬度的距离是不太统一的,经度每隔0.1度,距离相差约10000米,每隔0.1度,距离相差约11132米,所以最后需要经度方向的距离和纬度方向的距离需要统一转换为m,这样才比较准确.

计算点到直线的距离,可以利用海伦公式 根据三边距离求出三角形面积,再由三角形面积求出高,高就是点到直线的距离.

public class DistanceUtils{

	//计算A,B两点的距离,(lng1,lat1)为点A的经度和纬度,(lng2,lat2)为点B的经度和纬度
	public static double getDistance(double lng1,double lat1,double lng2,double lat2){
		double lngDistance = Math.round((lng1-lng2)*100000);  //经度方向的距离差 单位m
		double latDistance = Math.round((lat1-lat2)*111320); //纬度方向的距离差 单位m
		return Math.sqrt(Math.pow(lngDistance,2)+Math.pow(latDistance,2));
	}
}