[转载]JAVA 计算两个经纬度关系计算 – FALCON的日志 – 网易博客.
Java 计算两个GPS坐标点之间的距离
1. Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;
2. a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差;
3. 6378.137为地球半径,单位为千米;
计算出来的结果单位为千米。
从google maps的脚本里扒了段代码,是用来计算两点间经纬度距离
privateconstdouble EARTH_RADIUS =6378.137; privatestaticdouble rad(double d) { return d *Math.PI /180.0; } publicstaticdoubleGetDistance(double lat1,double lng1,double lat2,double lng2) { double radLat1 = rad(lat1); double radLat2 = rad(lat2); double a = radLat1 - radLat2; double b = rad(lng1)- rad(lng2); 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 * EARTH_RADIUS; s =Math.Round(s *10000)/10000; return s; }
在Android中可采用如下代码获取距离
publicdouble getDistance(double lat1,double lon1,double lat2,double lon2){ float[] results=newfloat[1]; Location.distanceBetween(lat1, lon1, lat2, lon2, results); return results[0]; }
在其他设备若没有类似Android的Location的distanceBetween方法开采用如下代码获取
这个计算得出的结果是英里,如果要转换成公里,需要乘以1.609344,若是海里需要乘以0.8684
double distance(double lat1,double lon1,double lat2,double lon2){ double theta = lon1 - lon2; double dist =Math.sin(deg2rad(lat1))*Math.sin(deg2rad(lat2)) +Math.cos(deg2rad(lat1))*Math.cos(deg2rad(lat2)) *Math.cos(deg2rad(theta)); dist =Math.acos(dist); dist = rad2deg(dist); double miles = dist *60*1.1515; return miles; }
//将角度转换为弧度 staticdouble deg2rad(double degree){ return degree /180*Math.PI; } //将弧度转换为角度 staticdouble rad2deg(double radian){ return radian *180/Math.PI; }
计算方位角pab,
其中lat_a, lng_a是A的纬度和经度; lat_b, lng_b是B的纬度和经度。代码如下:
privatedouble gps2d(double lat_a,double lng_a,double lat_b,double lng_b) { double d =0; lat_a=lat_a*Math.PI/180; lng_a=lng_a*Math.PI/180; lat_b=lat_b*Math.PI/180; lng_b=lng_b*Math.PI/180; d=Math.sin(lat_a)*Math.sin(lat_b)+Math.cos(lat_a)*Math.cos(lat_b)*Math.cos(lng_b-lng_a); d=Math.sqrt(1-d*d); d=Math.cos(lat_b)*Math.sin(lng_b-lng_a)/d; d=Math.asin(d)*180/Math.PI; //d = Math.round(d*10000); return d; }
- 地图应用接口中使用的经纬度单位是NTU,您需要把其它单位的经纬度值转化过来,以下为常用的转换关系:
基本转换: 度分转换: 度分秒转换: |
与经纬度有关的基础知识:
NTU 相当于十万分之一度。
如何计算经度方向距离
比如: 点A的纬度为3995400,点B的纬度为3995300,则这两个点在沿着纬线的方向相差100米。
点A的经度为11695400,点B的经度为11695300,则这两个点在沿着经线的方向相差大约为77米,
该值的计算方法可以用近似公式:
经度方向距离 = 经度差 * cos(纬度值) = 100 * cos(39) = 77米。
如何计算两点间距离
比如:点A的经度为11695400,纬度为3995400。点B的经度为11695300,纬度为3995300。
公式:两点间距离 = [ (A点经度 – B点经度)^2 + (A点纬度 – B点纬度)^2 ] ^ (1/2) = [ (11695400 – 11695300)^2
+ (3995400 – 3995300)^2 ] ^(1/2) =(10000+10000) ^ (1/2) =141米