計算Google地圖二個座標點的距離
阿新 • • 發佈:2018-12-11
1.
我們在使用地圖的時候,國內有些地圖在計算2個座標的距離的時候都有對應的API 可以用,比如Amap的就有:
AMapUtils.calculateLineDistance(currentLatlng, curLatlng);
這樣我們就可以取到結果!
2.
但是我們在集成了google服務後,使用google地圖,去檢視google API 卻無此方法。整合google服務,引用jar
至此,通過經緯度,在通過球面距離公式:compile 'com.google.android.gms:play-services-location:8.4.0' compile 'com.google.android.gms:play-services-maps:8.4.0'
其中,theta是兩向量夾角,球面距離d:
可以得到C的計算方式:
int Distance(float lat1, float lon1, float lat2, float lon2) { double latitude1,longitude1,latitude2,longitude2; double dlat,dlon; latitude1=lat1; longitude1=lon1; latitude2=lat2; longitude2=lon2; //computing procedure double a,c,distance; dlon =fabs((longitude2 - longitude1))*pi/180; dlat =fabs((latitude2 - latitude1))*pi/180; a = (sin(dlat/2)*sin(dlat/2)) + cos(latitude1*pi/180) * cos(latitude2*pi/180) * (sin(dlon/2)*sin(dlon/2)); if(a==1.0) c=pi; else c = 2 * atan(sqrt(a)/sqrt(1-a)); distance= radio*c; return distance; }
轉換為java:
/** * <p>獲取Google 地圖上,2點之間的距離</p> * * @param start * @param end * @return */ public double getGoogleDistance(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 R = 6371;//地球半徑 double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) * R; return d * 1000; }