地球半徑取6378.138千米,輸出distance單位米。
SQL寫法:
select ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( latitude1 * PI() / 180 - latitude2 * PI() / 180 ) / 2 ), 2 ) + COS(latitude1 * PI() / 180) * COS(latitude2 * PI() / 180)
* POW( SIN( ( longitude1 * PI() / 180 - longitude2 * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS distance from table where id = 28;
執行結果:
Java程序寫法:
public double getDistance(double lon1, double lat1, double lon2, double lat2) { // 地球半徑 double EARTH_RADIUS = 6378.138; //經緯度轉換成弧度 lat1 = ConvertDegreesToRadians(lat1); lon1 = ConvertDegreesToRadians(lon1); lat2 = ConvertDegreesToRadians(lat2); lon2 = ConvertDegreesToRadians(lon2); //差值 double vLon = Math.abs(lon1 - lon2); double vLat = Math.abs(lat1 - lat2); double h = HaverSine(vLat) + Math.cos(lat1) * Math.cos(lat2) * HaverSine(vLon); double distance = 2 * EARTH_RADIUS * Math.asin(Math.sqrt(h)); return distance; } // HaverSine公式 public double HaverSine(double x) { double v = Math.sin(x / 2); return v * v; } // 將角度換算為弧度 public static double ConvertDegreesToRadians(double degrees) { return degrees * Math.PI / 180; }