论坛首页 综合技术论坛

GoogleMap计算2点坐标的直线距离

浏览 4537 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-07  

public class GoogleMapHelper {

	private static double EARTH_RADIUS = 6378.137;

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

	public static double getDistance(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);
		s = s / 10000;
		return s * 1000;//计算单位:米
	}
}

 

Test:

double x = 22.1953672347509;
double y = 113.542133778811;
		
double x3 = 22.1915277525429;
double y3 = 113.549369037628;
//GoogleHelper
double distance2 = GoogleMapHelper.getDistance(x, y, x3, y3);
System.out.println(distance2);

double perDegree = 111120.0;
//勾股定理
double sqrt2 = Math.sqrt((x - x3) * (x - x3) + (y - y3) * (y - y3))
				* perDegree;
System.out.println("sqrt2:" + sqrt2);
//使用jstott的API(个人觉得最准确的了)
LatLng latLng3 = new LatLng(x3, y3);
System.out.println(latLng.distance(latLng3) * 1000);
 

859.6
sqrt2:910.1711187557098
858.0108402647181

 

用自己写的那个Helper跟 jstott的API 误差在0.1-2米之内(1000米范围内的) 哈哈

 

 

   发表时间:2012-03-14  
我想在我的应用程序中使用您写的方法,但是测试时候算成的距离总是不对有相当大的误差
,您能不能给我解释下您的代码,我将来的程序中会明确表明这段代码的出处的!联系我好吗?
dilemma_gao@sina.com
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics