Gps测量两点之间的距离

点击下面的链接可以打开一个在线的根据两点之间的gps经纬度得到两地之间的距离:

在线距离计算


一个截图:

Gps测量两点之间的距离_第1张图片

你看到这里的时候,是不是认为我们输入的就是弧度制的数值,如果是的话,那就错了。

GPS向我们传递过来的其实不是弧度制的数值,而是角度值,虽然这里我们得到的或者输入的是弧度值形式的,计算的过程中我们其实是按角度来转换为弧度的,GPS获取的也是角度值哦。

那么下面我们来纤细的看看如何计算吧 !


首先我们得知道,如何在数学公式的层面来解析这些数据,公式如下;(提醒一句,我也不知道该如何推导这个,初中的地理早还给老师了,哈哈)。

解释下,a是纬度的差的弧度值。b是经度的差的弧度值。lat 1和lat2是两点的纬度的弧度值。

至于 6378.137是地球的R,不过这个也不是一定的,学过地理的都知道地球是椭圆的,极半径和赤道半径是不一样的。

地球的 极性半径 是从其中心的距离到北部或南极, 和是大约3950 英哩(6356.9 公里) 。
地球的 赤道半径 是从其中心的距离到赤道, 和是大约3963 英哩(6378.5 公里) 。
地球的 平均半径 是大约3959 英哩(6371.3 公里) 。
航天上用到的是经过拟合的平半径6378140米。嗯,这里我们就大概取的这个。


好了,下面是具体的java代码:

	public static void main(String[] args) {
	
		//地球半径 
		double R=6378137.0;	
		//模拟数据
		double lat1=109.99309;
		double log1=39.81625;
		double lat2=109.99456;
		double log2= 39.81595;
		//将角度转化为弧度
		double radLat1=(lat1*Math.PI/180.0);
		double radLat2=(lat2*Math.PI/180.0);
		double radLog1=(log1*Math.PI/180.0);
		double radLog2=(log2*Math.PI/180.0);
		//纬度的差值
		double a=radLat1-radLat2;
		//经度差值
		double b=radLog1-radLog2;
		//弧度长度
		double 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*R;
		//返回最接近参数的 long。结果将舍入为整数:加上 1/2
		s=Math.round(s*10000)/10000;
		System.out.println(s);
	}

打印的结果:


跟最上面的截图的数据是相同的,至于为啥一个是0.1637km,一个是164.0m,这是有Math.round()方法的原因,因为它会返回一个long型的值,另外的也是R的取值不一样,取值不是6378140也不是6378140。我用了平均半径6371.3测试了下,得到的是0.1638617225039341,比0.1367km大一些。

你可能感兴趣的:(android,开源及第三方项目)