1. 程式人生 > >獲取經緯度之間兩點間真實距離(適用於GoogleMap,BaiduMap,Amap等)

獲取經緯度之間兩點間真實距離(適用於GoogleMap,BaiduMap,Amap等)

如何獲取經緯度之間兩點間真實距離(適用於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