// 地球半径 private static final double EARTH_RADIUS = 6378.137; //第一种方法,返回多少米 / * 计算两点之间距离 * * @return 返回米 */ public Double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) { double lat1 = (Math.PI / 180) * latitude1; double lat2 = (Math.PI / 180) * latitude2; double lon1 = (Math.PI / 180) * longitude1; double lon2 = (Math.PI / 180) * longitude2; //两点间距离 km,如果想要米的话,结果*1000 double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) * EARTH_RADIUS; if (d < 1) return (Double) (d * 1000); else return Double.valueOf(String.format("%.2f", d * 1000)); }

//第二种计算返回千米 private static final double EARTH_RADIUS = 6378.137; / * 根据经纬度计算距离 * * @param longitude1 start * @param latitude1 start * @param longitude2 end * @param latitude2 end * @return */ public double getDistances(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 * EARTH_RADIUS; //有小数的情况;注意这里的10000d中的“d” s = Math.round(s * 10000d) / 10000d; s = s * 1000;//单位:米 // s = Math.round(s/10d) /100d ;//单位:千米 保留两位小数 s = Math.round(s / 100d) / 10d;//单位:千米 保留一位小数 return s; } private static double rad(double d) { return d * Math.PI / 180.0; }

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231066.html原文链接:https://javaforall.net
