经纬度丢失计算距离
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));
}
}