小东Freeman + 关注

签名:我们爱我们的倒霉工作,也爱这千疮百孔的世界。

Java通过两地经纬度计算两地距离

发表于 3个月前   272次查看    1评论  2 赞
/*
 * 根据经纬度计算两点之间的距离(单位米)
 * */
private static double rad(double d) {
   return d * Math.PI / 180.00; //角度转换成弧度
}

public static Double algorithm(double longitude1, double latitude1, double longitude2, double latitude2) {

   double Lat1 = rad(latitude1); // 纬度

   double Lat2 = rad(latitude2);

   double a = Lat1 - Lat2;//两点纬度之差

   double b = rad(longitude1) - rad(longitude2); //经度之差

   double s = 2 * Math.asin(Math

         .sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(b / 2), 2)));//计算两点距离的公式

   s = s * 6378137.0;//弧长乘地球半径(半径为米)

   s = Math.round(s * 10000d) / 10000d;//精确距离的数值
   s = s/1000;//将单位转换为km,如果想得到以米为单位的数据 就不用除以1000
   //四舍五入 保留一位小数
   DecimalFormat df = new DecimalFormat("#.0");

   return Double.valueOf(df.format(s));

}

测试一下

public static void main(String[] args){
   double lng1=120.396592;
   double lat1=36.309051;
   double lng2=120.41681;
   double lat2=36.311063;
   System.out.println(NearbyUtils.algorithm(lng1,lat1,lng2,lat2)+"km");
}

结果:

1.8km



结论:比mysql空间数据库计算快了很多,减少了很多io操作

2人已赞


本文由Fun言网 – 小东Freeman创作,转载请务必附上本文链接和出处,欢迎参与我们的付费投稿计划


你还没有登录,请先 登录注册!
文章评论1