移动互联网基于LBS地理位置应用开发

2015年4月23日 由 Creater 留言 »

功能:计算两个点(经纬度坐标)之间的距离
使用示例:
double distance = LatLng.distance(113.926496000000000, 22.538393000000000, 114.23, 22.23);

package com.haohui.util;

/**
 * 计算两个经纬度之间的距离的工具类
 */
public class LatLng {
	private static double lngPerMeter = 1.E-005D;

	public double getLat(double _curLat, int _radius) {
		return _radius * lngPerMeter;
	}

	public double getLng(int _radius) {
		return _radius * lngPerMeter;
	}

	/**
	 * 计算两个经纬度之间的距离
	 * 
	 * @param _lng1
	 * @param _lat1
	 * @param _lng2
	 * @param _lat2
	 * @return
	 */
	public static double distance(double _lng1, double _lat1, double _lng2,
			double _lat2) {
		if ((_lng1 == 0.0D) || (_lat1 == 0.0D) || (_lng2 == 0.0D)
				|| (_lat2 == 0.0D)) {
			return 0.0D;
		}
		double rad_lat1 = Rad(_lat1);
		double rad_lat2 = Rad(_lat2);
		double a = rad_lat1 - rad_lat2;
		double b = Rad(_lng1) - Rad(_lng2);
		double s = 2.0D * Math.asin(Math.sqrt(Math
				.pow(Math.sin(a / 2.0D), 2.0D)
				+ Math.cos(rad_lat1)
				* Math.cos(rad_lat2)
				* Math.pow(Math.sin(b / 2.0D), 2.0D)));
		s *= 6378137.0D;
		s = Math.round(s * 10000.0D) / 10000L;
		return s;
	}

	private static double Rad(double _d) {
		return _d * 3.141592653589793D / 180.0D;
	}
	
}
广告位

发表评论

你必须 登陆 方可发表评论.