如何获取经纬度之间两点间真实距离(适用于GoogleMap,BaiduMap,Amap等)
目标:使用百度定位sdk开发实时移动距离计算功能,根据经纬度的定位,计算行驶公里数并实时刷新界面显示。
大家都知道定位有三种方式:GPS 、Wifi 、 基站 .
误差方面的话,使用GPS误差在10左右,Wifi则在20 - 300左右 ,而使用基站则误差在100 - 300左右的样子,因为在室内GPS是定位不到的,必须在室外,
而我们项目的需求正好需要使用GPS定位,所以我们这里设置GPS优先。车,不可能在室内跑吧。
看标题就会明白,两个经纬度之间真实距离这个一般的地图API有自带方法,直接调用便可得到结果,一般结果都是以米为单位。最近在做Android版上的GoogleMap,找了半天API发现没有此类方法,看来只能自己实现了,接下来我就把如何计算两点之间(经纬度)的真实距离的算法写下来,原则上在各种地图版本上都通用,方便大家使用。
Google Map API:https://developers.google.com/maps/documentation/android/
【本文适用于android,iOS等各种平台下的地图经纬度测距】
自己实现距离算法:
/** * 计算两点之间距离 * @param start * @param end * @return 米 */ public double getDistance(LatLng start,LatLng end){ double lat1 = (Math.PI/180)*start.latitude; double lat2 = (Math.PI/180)*end.latitude; double lon1 = (Math.PI/180)*start.longitude; double lon2 = (Math.PI/180)*end.longitude; // double Lat1r = (Math.PI/180)*(gp1.getLatitudeE6()/1E6); // double Lat2r = (Math.PI/180)*(gp2.getLatitudeE6()/1E6); // double Lon1r = (Math.PI/180)*(gp1.getLongitudeE6()/1E6); // double Lon2r = (Math.PI/180)*(gp2.getLongitudeE6()/1E6); //地球半径 double R = 6371; //两点间距离 km,如果想要米的话,结果*1000就可以了 double d = Math.acos(Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lon2-lon1))*R; return d*1000; }
举例:(我使用的百度地图的经纬度数据)
LatLng start = new LatLng(39.95676, 116.401394); LatLng end = new LatLng(36.63014,114.499574); getDistance(start, end);
log日志结果为:402.21321(km)
害怕不准确的话,可以打开百度地图首页,使用测距工具:
看图应该知道,应该没什么问题吧。
公式推导过程见:https://blog.csdn.net/xiejm2333/article/details/73297004
原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/10121499.html
时间: 2024-11-08 15:52:40