如果Google地图中的起点和终点相同,请获取行驶距离

时间:2017-12-04 12:50:49

标签: android google-maps google-maps-direction-api

我正在使用Google Maps Directions API 我需要计算两点之间的距离 如果起点和终点相同,我们如何计算行驶距离?

任何人都可以帮助我或就此提出一些建议吗?

2 个答案:

答案 0 :(得分:2)

如果用户从起点到终点,您将通过以下代码获得距离。

private float distanceCal(double lat1, double lon1, double lat2, double lon2) {
        Location loc1 = new Location(provider);
        loc1.setLatitude(lat1);
        loc1.setLongitude(lon1);

    Location loc2 = new Location(provider);
    loc2.setLatitude(lat2);
    loc2.setLongitude(lon2);

    float distanceInMeters = loc1.distanceTo(loc2);
    return distanceInMeters;
}

 LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String provider = locationManager.getBestProvider(criteria, false);

但是,您在移动时获取当前位置,当您到达距离为0的目的地时,您将通知用户已到达目的地。

但是当用户以自己的方式旅行并且需要计算沿途旅行的距离时,我们需要获得最后一点和当前点之间的距离并连续追加到您的总距离数据。

答案 1 :(得分:1)

试试此代码

public double Distance(LatLng StartP, LatLng EndP) {
        int Radius = 6371;// radius of earth in Km
        double lat1 = StartP.latitude;
        double lat2 = EndP.latitude;
        double lon1 = StartP.longitude;
        double lon2 = EndP.longitude;
        double dLat = Math.toRadians(lat2 - lat1);
        double dLon = Math.toRadians(lon2 - lon1);
        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
                + Math.cos(Math.toRadians(lat1))
                * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
                * Math.sin(dLon / 2);
        double c = 2 * Math.asin(Math.sqrt(a));
        double valueResult = Radius * c;
        double km = valueResult / 1;
        DecimalFormat newFormat = new DecimalFormat("####");
        int kmInDec = Integer.valueOf(newFormat.format(km));
        double meter = valueResult % 1000;
        int meterInDec = Integer.valueOf(newFormat.format(meter));
        Log.i("Radius Value", "" + valueResult + "   KM  " + kmInDec
                + " Meter   " + meterInDec);

        return Radius * c;
    }