计算经纬度之间的距离

public class DistinctUtil {
	/**
	 * 
	 * 
	 * MySQL的SQL语句查询
	 SELECT *,
ROUND(6378.138*2*ASIN(SQRT(POW(SIN((30.54895219*PI()/180-lat*PI()/180)/2),2)+COS(30.54895219*PI()/180)*COS(lat*PI()/180)*POW(SIN((104.06606734*PI()/180-lng*PI()/180)/2),2)))*1000)
AS
 juli
FROM area
ORDER BY juli DESC
	 * 
	 * @param lat1 维度1
	 * @param lng1 经度1
	 * @param lat2 维度2
	 * @param lng2 经度2
	 * @return 米
	 */
	public static double GetDistance2(double lat1, double lng1, double lat2, double lng2)
	{
	    double earthRadius = 6371;//6371; //appxoximate radius in miles  6378.137

	    double factor = Math.PI / 180.0;
	    double dLat = (lat2 - lat1) * factor;
	    double dLon = (lng2 - lng1) * factor;
	    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat1 * factor)
	      * Math.cos(lat2 * factor) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
	    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

	    double d = earthRadius * c * 1000;

	    return d;
	}
	
	
	
	public static void main(String[] args) {
		double result = GetDistance2( 30.54909078d, 104.06744599d, 30.54895219d, 104.06606734d);
		System.out.println(result);
		System.out.println(Math.round(result));
	}

}

 

  相关参考:

http://www.cnblogs.com/puzi0315/p/3293520.html

http://www.storyday.com/wp-content/uploads/2008/09/latlung_dis.html

http://zhidao.baidu.com/link?url=9UaKCwFsvy6J_y_KRlrPn-2CKY8hl7Y9qWm5B3fc8EcCwyHPl8DHUFVNPOVK_rBRyMuJ1z-KUNsfJCc_hXf6O_

猜你喜欢

转载自commissioner.iteye.com/blog/2304928