一开始,把代码写成了
提示.
Math.sqrt((经度1-经度2)* (经度1-经度2)+(纬度1-纬度2)*(纬度1-纬度2))
sqrt是求平方差的函数
这就是平面上两点的距离,然而,测试的时候发现...距离不超过几毫米
原因:经纬度不是平面坐标,它的单位不是米
正确方法:
public static double algorithm(double longitude1, double latitude1, double longitude2, double latitude2) { double Lat1 = rad(latitude1); // 纬度 double Lat2 = rad(latitude2); double a = Lat1 - Lat2;//两点纬度之差 double b = rad(longitude1) - rad(longitude2); //经度之差 double s = 2 * Math.asin(Math .sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(b / 2), 2)));//计算两点距离的公式 s = s * 6378137.0;//弧长乘地球半径(半径为米) s = Math.round(s * 10000d) / 10000d;//精确距离的数值 return s; } private static double rad(double d) { return d * Math.PI / 180.00; //角度转换成弧度 }
这段代码大致就是,两地纬度之差为a,所以弧度为(a/180)π,地球半径R,所以两地南北相距为(a/180)πR,两地经度之差为b,两地东西相距(b/180)πR,所以两地距离为√((a/180)πR)^2) ((b/180)πR)^2)
然而,我突然发现:
float distance = AMapUtils.calculateLineDistance(latLng1,latLng2);
高德地图自带,我想百度地图也应该是有
android studio测试