在java android中获取两个位置之间的距离

时间:2017-04-13 12:32:37

标签: java android google-maps location

我知道我可以与google api保持距离,而且非常好

但有时候它很慢而且我的应用程序无法实现

有没有办法在两个地点之间找到距离?

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您可以轻松获取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

LocationListener

中实施Activity
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请求位置更新(确保您{6}适用于Android 6.0及更高版本)

@Override
    public void onResume() {
        super.onResume();
        getLocationUpdates();
    }

使用SphericalUtil类计算ArrayList函数内onLocationChange内的距离。

@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();
}

这将获得起点和终点之间的距离(以km为单位)并将其向下舍入到两位小数,可以根据您的使用情况将它们转换为任何其他距离单位。

答案 2 :(得分:0)

Google距离矩阵API需要用于确定地点之间的正确距离。

答案 3 :(得分:0)

经过多次搜索和常见问题解答,最后我明白google的api是最好的第一种方式来获得距离两个位置