GPS经纬度求距离

摘抄了几个方法,明天上班去测下精度



对上面的公式解释如下:

1.Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;
2.a=Lat1 – Lat2 为两点纬度之差  b=Lung1 -Lung2 为两点经度之差;
3.6378.137为地球半径,单位为公里;

计算出来的结果单位为公里。

 

====================================


  1. public class FCDTools {  
  2.       
  3.     public final static double PI   = 3.14159265354;  
  4.     private final static double D2R     = 0.017453 ;  
  5.     private final static double a2  = 6378137.0;  
  6.     private final static double e2  = 0.006739496742337;  
  7.       
  8.     public static double Distance(FCD_Point pt1, FCD_Point pt2) {  
  9.         if(pt1.lng == pt2.lng && pt1.lat == pt2.lat ) {  
  10.             return 0.0;  
  11.         } else {  
  12.             double fdLambda =(pt1.lng - pt2.lng) * D2R;  
  13.             double fdPhi = (pt1.lat - pt2.lat) * D2R;  
  14.             double fPhimean = ((pt1.lat + pt2.lat) / 2.0) * D2R;  
  15.             double fTemp = 1 - e2 * (Math.pow (Math.sin(fPhimean),2));  
  16.             double fRho = (a2 * (1 - e2)) / Math.pow (fTemp, 1.5);  
  17.             double fNu = a2 / (Math.sqrt(1 - e2 * (Math.sin(fPhimean) * Math.sin(fPhimean))));  
  18.             double fz = Math.sqrt (Math.pow(Math.sin(fdPhi / 2.0), 2) +  
  19.                     Math.cos(pt2.lat * D2R) * Math.cos( pt1.lat*D2R ) * Math.pow( Math.sin(fdLambda / 2.0),2));  
  20.             fz = 2 * Math.asin(fz);  
  21.             double fAlpha = Math.cos(pt2.lat * D2R) * Math.sin(fdLambda) * 1 / Math.sin(fz);  
  22.             fAlpha = Math.asin (fAlpha);  
  23.             double fR = (fRho * fNu) / ((fRho * Math.pow( Math.sin(fAlpha),2)) + (fNu * Math.pow( Math.cos(fAlpha),2)));  
  24.             return fz * fR;  
  25.         }  
  26.     }  
  27. }  


测试代码:

  1. System.out.println(FCDTools.Distance(new FCD_Point(117.107277,31.980298),   
  2.                 new FCD_Point(117.52475731.888227)));  
  3. // 输出70.7公里  

========================================





转:[url=http://www.cnblogs.com/computer-lzy/archive/2011/04/21/2024289.html]MISS_MY_GOD  [/url]

[align=center][size=4]根据两点经纬坐标计算两点间的距离[JAVA] [/size][/align]
解决此问题的关键是要理解空间几何模型,在理解空间几何模型的基础上再利用数学公式求取两点之间的值。其解决步骤如下:

1、设两点分别为P1、P2,如果其值是用度分秒形式表示,则需将其转换成十进制度的形式,如P1点纬度为23度30分,则其纬度值转换成十进制度的形式为23.5度。如果值为十进制度的形式,则直接进入第二步。

2、分别将两点的经度、纬度值转换成弧度制形式,如P1纬度为23.5度,转换成弧度制则为:23.5*PI / 180。分别用 P1latInRad、P1LongInRad、P2latInRad、P2LongInRad表示。

3、分别求取两点间的纬度差(dlat)与经度差(dlon);

4、求取两点间的正弦与余弦值,公式如下:

A=sin2(dlat/2) + cos(P1LatInRad)*cos(P2LatInRad)*Sin2(dlon/2)       (1)

5、求取两点的正切值,公式如下:

C=2*Math.Atan2(Math.Sqrt(A), Math.Sqrt(1-A))                     (2)

6、返回两点间的距离:公式如下:

D=EarthRadiusKm * C                                          (3)[code]public class distCnvter {
    private final static double PI = 3.14159265358979323; // 圆周率
    private final static double R = 6371229; // 地球的半径

    public static double getDistance(double longt1, double lat1, double longt2,double lat2) {
        double x, y, distance;
        x = (longt2 - longt1) * PI * R
                * Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;
        y = (lat2 - lat1) * PI * R / 180;
        distance = Math.hypot(x, y);
        return distance;
    }
}[/code]


==================================================




double hypot(double x, double y) {
      
return sqrt(x * x + y * y);
}


double distance(double wd1, double jd1, double wd2, double jd2) {// 根据经纬度坐标计算实际距离
      double x, y, out;
      
double PI = 3.1415926535898;
      
double R = 6.371229 * 1e6;
       x 
= (jd2 - jd1) * PI * R * cos( ( (wd1 + wd2) / 2* PI / 180/ 180;
       y 
= (wd2 - wd1) * PI * R / 180;
       
out = hypot(x, y);
       
return out;
  }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值