package com.walker.location;
|
|
public class DistanceUtils {
|
|
// private static final double EARTH_RADIUS = 6378.137;
|
// private static double rad(double d){
|
// return d * Math.PI / 180.0;
|
// }
|
// public static double getDistance(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;
|
// return Math.round(s * 10000) / 10000;
|
// }
|
|
private final static double PI = 3.14159265358979323; // 圆周率
|
private final static double R = 6371229; // 地球的半径
|
|
/**
|
* 返回两个坐标的球面距离。
|
* @param longt1
|
* @param lat1
|
* @param longt2
|
* @param lat2
|
* @return
|
* @date 2017-10-12
|
*/
|
public static final double getDistance(double longt1, double lat1, double longt2, double lat2) {
|
double x, y;
|
x = (longt2 - longt1) * PI * R
|
* Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;
|
y = (lat2 - lat1) * PI * R / 180;
|
return Math.hypot(x, y);
|
}
|
|
/**
|
* 返回两点之间的平面距离,通过三角函数计算。
|
* @param longt1
|
* @param lat1
|
* @param longt2
|
* @param lat2
|
* @return
|
*/
|
public static final double getFlatDistance(double longt1, double lat1, double longt2,double lat2){
|
double _x = Math.abs(longt1 - longt2);
|
double _y = Math.abs(lat1 - lat2);
|
return Math.sqrt(_x*_x+_y*_y);
|
}
|
|
public static void main(String[] args){
|
double destLon = 121.541924;
|
double destLat = 31.272223;
|
System.out.println("d1 = " + getDistance(121.537369, 31.278162, destLon,destLat));
|
System.out.println("平面距离 d1 = " + getFlatDistance(121.537369, 31.278162, destLon,destLat));
|
|
long startTime = System.nanoTime();
|
System.out.println("d2 = " + getDistance(121.557634, 31.312228, destLon,destLat));
|
System.out.println("d2 花费时间:" + (System.nanoTime()-startTime));
|
|
startTime = System.nanoTime();
|
System.out.println("平面距离 d2 = " + getFlatDistance(121.557634, 31.312228, destLon,destLat));
|
System.out.println("d2平面 花费时间:" + (System.nanoTime()-startTime));
|
|
startTime = System.nanoTime();
|
System.out.println("d3 = " + getDistance(121.557634, 31.312228, 121.537369,31.278162));
|
System.out.println("d3平面 花费时间:" + (System.nanoTime()-startTime));
|
System.out.println("平面距离 d3 = " + getFlatDistance(121.557634, 31.312228, 121.537369,31.278162));
|
}
|
}
|