首页 > 代码库 > 由经纬度计算距离
由经纬度计算距离
前些天接触到一个由经纬度计算距离的算法,非常简明了哦。
怎奈进行操作的时候,却报出来类型错误的结果。后来经过分析,发现问题出在下面代码中的13行。
/* 计算两个GPS点直线距离 结果单位:M
3 */ 4 public static double distance(double jingdu1, double weidu1, 5 double jingdu2, double weidu2) { 6 double theta = jingdu1 - jingdu2; 7 double dist = Math.sin(deg2rad(weidu1)) * Math.sin(deg2rad(weidu2)) 8 + Math.cos(deg2rad(weidu1)) * Math.cos(deg2rad(weidu2)) 9 * Math.cos(deg2rad(theta));
10
11
1213 dist = Math.acos(dist);14 dist = rad2deg(dist);15 return dist * 60 * 1.1515 * 1.609344 * 1000;16 }17 // 将角度转换为弧度18 static double deg2rad(double degree) {19 return degree / 180 * Math.PI;20 }21 22 // 将弧度转换为角度23 static double rad2deg(double radian) {24 return radian * 180 / Math.PI;25 }
第7行得到的dist,要在第13行进行反余弦计算。但是在某个具体的经纬度时(概率特别特别小,很遗憾,没有记下来),会得到一个1.00000000000000000001的值。 我们知道,余弦值最大只能为1啦,所以反余弦的时候就会处理为错误喽。所以在10、11、12行加上如下代码就ok啦!
if(dist>1){
dist = 1.0; }
由经纬度计算距离
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。