Java、MySql计算两坐标点的距离

来源:互联网 发布:非诚勿扰网络播出时间 编辑:程序博客网 时间:2024/04/24 17:38

Java计算两坐标点的距离:


/** * 计算两经纬度点之间的距离(单位:米) *  * @param longitude1 *            坐标1经度 * @param latitude1 *            坐标1纬度 * @param longitude2 *            坐标2经度 * @param latitude2 *            坐标1纬度 * @return */public static double getDistance(String longitude1, String latitude1,String longitude2, String latitude2) {double lng1 = Double.parseDouble(longitude1);double lat1 = Double.parseDouble(latitude1);double lng2 = Double.parseDouble(longitude2);double lat2 = Double.parseDouble(latitude2);double radLat1 = Math.toRadians(lat1);double radLat2 = Math.toRadians(lat2);double a = radLat1 - radLat2;double b = Math.toRadians(lng1) - Math.toRadians(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 * 6378137.0;s = Math.round(s * 10000) / 10000;return s;}


MySql计算两坐标点距离(单位:米):


SELECT   (2 * ATAN2(SQRT(SIN((    a.latitude - #{latitude}) * PI() / 180 / 2) * SIN((a.latitude - #{latitude}) * PI() / 180 / 2) + COS(#{latitude} * PI() / 180) * COS(a.latitude * PI() / 180) * SIN((a.longitude - #{longitude}) * PI() / 180 / 2) * SIN((a.longitude - #{longitude}) * PI() / 180 / 2)  ),  SQRT(    1- SIN(      (        a.latitude - #{latitude}) * PI() / 180 / 2) * SIN((a.latitude - #{latitude}) * PI() / 180 / 2) + COS(#{latitude} * PI() / 180) * COS(a.latitude * PI() / 180) * SIN((a.longitude - #{longitude}) * PI() / 180 / 2) * SIN((a.longitude - #{longitude}) * PI() / 180 / 2)      )    )  ) * 6378100 AS distance FROM 表 a 


0 0