浏览 4537 次
锁定老帖子 主题:GoogleMap计算2点坐标的直线距离
精华帖 (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米范围内的) 哈哈
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-03-14
我想在我的应用程序中使用您写的方法,但是测试时候算成的距离总是不对有相当大的误差
,您能不能给我解释下您的代码,我将来的程序中会明确表明这段代码的出处的!联系我好吗? dilemma_gao@sina.com |
|
返回顶楼 | |