[英]Get distance between two location in java android
我知道我可以和Google API取得距離,這非常好
但是有時會很慢嗎,對於我的應用程序是不可能的
有什么方法可以得到兩個位置之間的距離嗎?
您可以輕松地獲取lastKnownLocation
,將坐標添加到ArrayList
,然后測量該列表中點之間的距離,如下所示:
先決條件 :
添加權限以顯示:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
導入Gradle依賴關系:
compile 'com.google.android.gms:play-services-location:10.2.1'
將此類添加到您的項目中:
GitHub:android-maps-utils:SphericalUtil.java
在您的Activity
實現LocationListener
:
public class myClass extends Activity implements LocationListener {
定義全局變量:
private LocationManager locationManager;
private String provider;
private ArrayList<LatLng> coordList = new ArrayList<String>();
獲取初始位置(在onCreate()
或onClick()
):
locationManager = (LocationManager) getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
// Define the criteria how to select the locatioin provider -> use
// default
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
if (coordList != null && !coordList.isEmpty()) {
coordList.get(0);
} else {
coordList.add(0, new LatLng(location.getLatitude(), location.getLongitude()));
}
if (location != null) {
onLocationChanged(location);
}
getLocationUpdates();
創建一個getLocationUpdates()
方法:
private void getLocationUpdates() {
if (locationManager != null) {
checkPermission();
locationManager.requestLocationUpdates(provider, ONE_SECOND, ONE_METER, this);
}
}
從locationManager
請求位置更新(確保您對Android 6.0及更高版本請求requestPermission )
@Override
public void onResume() {
super.onResume();
getLocationUpdates();
}
使用SphericalUtil
類在onLocationChange
函數內部的ArrayList
計算距離。
@Override
public void onLocationChanged(Location location) {
double distance = SphericalUtil.computeLength(coordList);
distance = round(distance, 2) / 1000;
distanceOutput.setText(distance + "km");
}
添加舍入功能:
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(places, RoundingMode.FLOOR);
return bd.doubleValue();
}
這將獲得以公里為單位的起點和終點之間的距離,並將其四舍五入到小數點后兩位,請根據您的用例隨意將其轉換為任何其他距離單位。
Google距離矩陣API需要使用正確的地點之間的距離。
經過多次搜索和常見問題,最后我了解到Google的api是獲得距離兩個位置的最佳方法之一
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.