根据经纬度求两点间距离实现源码(java)

研究了一下Google Map上的根据经纬度求地球表面两点间距离的实现, 用java实现了一把,对我国境内的Beijing54, Xian80,WGS84三种坐标系的空间距离计算感觉这个实现是比较准确的。当然,这里只是个人的感觉而已。。。可能我还没有遇到那种对精度要求非常严格的地方,或许,本身我这个方式就是错误的。。。呵呵。。。这里只是作个记号先。。。各位达人多多指教

/**
 * 
 * <p>
 * Title: GeoUtils.java
 * </p>
 * <p>
 * E-Mail: [email protected]
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2012-5-4 下午1:49:34
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class GeoUtils {
	
	public enum GaussSphere {
		Beijing54, // Krassovsky(北京54 采用)
		Xian80, // IAG 75(西安80 采用)
		WGS84, // WGS 84
	}

	private static double rad(double d) {
		return d * Math.PI / 180.0;
	}

	/**
	 * 计算经纬度之间的距离
	 * 
	 * @param lat1
	 * @param lng1
	 * @param lat2
	 * @param lng2
	 * @return
	 */
	public static double getDistance(double lng1, double lat1, double lng2, double lat2, GaussSphere gs) {
		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 * (gs == GaussSphere.WGS84 ? 6378137.0 : (gs == GaussSphere.Xian80 ? 6378140.0 : 6378245.0));
		s = Math.round(s * 10000) / 10000;
		return s;
	}
	
	/**
	 * 计算经纬度之间的距离
	 * 
	 * @param lat1
	 * @param lng1
	 * @param lat2
	 * @param lng2
	 * @return
	 */
	public static double getDistance(double lng1, double lat1, double lng2, double lat2) {
		return getDistance(lng1,lat1,lng2,lat2,GaussSphere.WGS84);
	}

}

你可能感兴趣的:(java)