当前位置:编程学习 > JAVA >>

获取经纬度之间的距离

public class GeoUtil {

	/**
	 * 根据经纬度和距离返回一个矩形范围
	 * 
	 * @param lng
	 *            经度
	 * @param lat
	 *            纬度
	 * @param distance
	 *            距离(单位为米)
	 * @return [lng1,lat1, lng2,lat2] 矩形的左下角(lng1,lat1)和右上角(lng2,lat2)
	 */
	public static double[] getRectangle(double lng, double lat, long distance) {
		float delta = 111000;
		if (lng != 0 && lat != 0) {
			double lng1 = lng - distance
					/ Math.abs(Math.cos(Math.toRadians(lat)) * delta);
			double lng2 = lng + distance
					/ Math.abs(Math.cos(Math.toRadians(lat)) * delta);
			double lat1 = lat - (distance / delta);
			double lat2 = lat + (distance / delta);
			return new double[] { lng1, lat1, lng2, lat2 };
		} else {
			// TODO ZHCH 等于0时的计算公式
			double lng1 = lng - distance / delta;
			double lng2 = lng + distance / delta;
			double lat1 = lat - (distance / delta);
			double lat2 = lat + (distance / delta);
			return new double[] { lng1, lat1, lng2, lat2 };
		}
	}

	/**
	 * 得到两点间的距离 米
	 * 
	 * @param lat1
	 * @param lng1
	 * @param lat2
	 * @param lng2
	 * @return
	 */
	public static double getDistanceOfMeter(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;
		s = Math.round(s * 10000) / 10;
		return s;
	}
	
	private static double rad(double d) {
		return d * Math.PI / 180.0;
	}

	/**
	 * 地球半径:6378.137KM
	 */
	private static double EARTH_RADIUS = 6378.137;

}

 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,