由经纬度计算距离

    前些天接触到一个由经纬度计算距离的算法,非常简明了哦。
怎奈进行操作的时候,却报出来类型错误的结果。后来经过分析,发现问题出在下面代码中的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
12 13 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; }  

 

转载于:https://www.cnblogs.com/linzilaixiu/p/4180795.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值