Android下如何计算两经纬点之间距离?
来源:互联网 发布:ipython在linux安装 编辑:程序博客网 时间:2024/06/05 07:22
1 若开发者使用的是百度地图或定位API,且版本在1.3.5以后的,
路线规划提供了获取路线距离的方法,见MKRoutePlan 类的 getDistance 方法
2 如果是计算任意两点的距离,自2.0.0版本开始,Android SDK为开发者提供了计算距离的接口(DistanceUtil),具体使用方法如下:
- GeoPoint p2LL = new GeoPoint(39892131, 116498555);
- double distance = DistanceUtil.getDistance(p1LL, p2LL);
3若未使用百度地图或定位SDK,或是地图、定位SDK版本在1.3.5以下的,可以选用以下两种计算方式:
一、利用勾股定理计算,适用于两点距离很近的情况;
二、按标准的球面大圆劣弧长度计算,适用于距离较远的情况;
- static double DEF_PI = 3.14159265359; // PI
- static double DEF_2PI = 6.28318530712; // 2*PI
- static double DEF_PI180 = 0.01745329252; // PI/180.0
- static double DEF_R = 6370693.5; // radius of earth
- /**
- * 第一种方式,按勾股定律求结果
- * @param lon1
- * @param lat1
- * @param lon2
- * @param lat2
- * @return
- * @author kazeik.chen QQ:77132995 2014-4-1下午4:30:09
- * TODO kazeik@163.com
- */
- public double GetShortDistance(double lon1, double lat1, double lon2,
- double lat2) {
- double ew1, ns1, ew2, ns2;
- double dx, dy, dew;
- double distance;
- // 角度转换为弧度
- ew1 = lon1 * DEF_PI180;
- ns1 = lat1 * DEF_PI180;
- ew2 = lon2 * DEF_PI180;
- ns2 = lat2 * DEF_PI180;
- // 经度差
- dew = ew1 - ew2;
- // 若跨东经和西经180 度,进行调整
- if (dew > DEF_PI)
- dew = DEF_2PI - dew;
- else if (dew < -DEF_PI)
- dew = DEF_2PI + dew;
- dx = DEF_R * Math.cos(ns1) * dew; // 东西方向长度(在纬度圈上的投影长度)
- dy = DEF_R * (ns1 - ns2); // 南北方向长度(在经度圈上的投影长度)
- // 勾股定理求斜边长
- distance = Math.sqrt(dx * dx + dy * dy);
- return distance;
- }
- /**
- * 第二种方式,按大圆劣弧求距离
- * @param lon1
- * @param lat1
- * @param lon2
- * @param lat2
- * @return
- * @author kazeik.chen QQ:77132995 2014-4-1下午4:30:30
- * TODO kazeik@163.com
- */
- public double GetLongDistance(double lon1, double lat1, double lon2,
- double lat2) {
- double ew1, ns1, ew2, ns2;
- double distance;
- // 角度转换为弧度
- ew1 = lon1 * DEF_PI180;
- ns1 = lat1 * DEF_PI180;
- ew2 = lon2 * DEF_PI180;
- ns2 = lat2 * DEF_PI180;
- // 求大圆劣弧与球心所夹的角(弧度)
- distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1)
- * Math.cos(ns2) * Math.cos(ew1 - ew2);
- // 调整到[-1..1]范围内,避免溢出
- if (distance > 1.0)
- distance = 1.0;
- else if (distance < -1.0)
- distance = -1.0;
- // 求大圆劣弧长度
- distance = DEF_R * Math.acos(distance);
- return distance;
- }
- //以下是测试
- double mLat1 = 39.90923; // point1纬度
- double mLon1 = 116.357428; // point1经度
- double mLat2 = 39.90923;// point2纬度
- double mLon2 = 116.397428;// point2经度
- double distance = GetShortDistance(mLon1, mLat1, mLon2, mLat2);
0 0
- Android下如何计算两经纬点之间距离?
- Android下如何计算两经纬点之间距离?
- PHP计算两个经纬点之间的距离
- CSharp 两GPS点之间计算距离
- 百度地图计算两坐标点之间距离计算
- 百度地图计算两坐标点之间距离计算
- 计算地图上两坐标点之间的距离
- java通过经纬度计算两坐标点之间的距离
- java通过经纬度计算两坐标点之间的距离
- 计算两GPS点之间的距离(比较精确)
- 利用php 计算两点地理经纬坐标之间的距离
- 根据经纬坐标计算距离
- Android百度地图如何计算两点之间距离?
- 两经纬度之间的距离计算
- 计算两条直线之间的距离
- 计算两经纬度之间的距离
- sql 计算两经纬度之间的距离
- GPS两坐标点距离计算
- 小议:哪些用户是SharePoint System Account?
- 红黑树
- spark源码阅读(十五)--securityManager
- WEB服务器、应用程序服务器、HTTP服务器区别联系
- LINUX下使用Shell自动监控tomcat并且执行重启操作 --谷营中西软件科技园
- Android下如何计算两经纬点之间距离?
- Linux的学习路线图
- iOS SDK开发
- 打造高性能Java应用需掌握的5大知识
- ubuntu14.04如何使用google search
- 界面组件:按钮
- Maven两种打包方式
- iOS 证书的事
- 什么是面向对象编程OOP?