簡體   English   中英

在Java Android中獲取兩個位置之間的距離

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM