在Android中使用Google Maps API V3计算总行程距离

3
到目前为止,我已经从我所走过的路径中每5秒插入一组纬度和经度集合到我的数据库中。现在,在到达目的地后,我需要计算与纬度、经度集合的距离。这不是计算两点之间的旅行距离,而是获取从我的数据库中的lat、long集合中行驶的总距离。我想通过获取两点之间的距离并在最后加起来来计算总距离。 请问是否有比这更好的解决方案?请提供建议和帮助。已阅读this SO post,但不知道如何使用Google Maps Distance Matrix API获取总距离。 ///////服务将坐标插入数据库中。
private class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            String name = arg1.getAction();
            if (name.equalsIgnoreCase("Location_Changed")) {
                db.insertlatlong(new Latilongi(arg1.getStringExtra("latitude"),
                        arg1.getStringExtra("longitude"),currentDateandTime));


                   } else if (arg1.getAction().matches("android.location.PROVIDERS_CHANGED")) {
                Toast.makeText(MapActivity.this, "in android.location.PROVIDERS_CHANGED",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }
3个回答

0

你可以使用以下方法,它将给你准确的结果

public double CalculationByDistance(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;
    }

我正在尝试计算总行驶距离,而不是两点之间的距离。 - Nilabja
这正是我所想的,但我不确定这是否是最好的方式。 - Nilabja

0

您可以仅插入两个坐标之间的距离,最后将数据库中所有距离相加。距离计算如下。

float distanceInMeters =  lastLocation.distanceTo(myLocation);

其中"lastLocation"和"myLocation"是Location对象。

如果您没有Location对象,可以尝试这个方法。

Location lastLocation = new Location("");
lastLocation.setLatitude(latitude);
lastLocation.setLongitude(longitude);

Location myLocation = new Location("");
myLocation.setLatitude(otherlatitude);
myLocation.setLongitude(otherlongitude);

float distanceInMeters =  lastLocation.distanceTo(myLocation);

请阅读我的问题,将每个值添加到末尾正是我所考虑的,但我不确定这是否是最佳方法。 - Nilabja
@Nilabja 是的,正如你所想的那样,这是最好的方法。 - Akash Patel

0

试试这一个

 private  double distance(double lat1, double lon1, double lat2, double lon2, String unit) {
    double theta = lon1 - lon2;
    double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
    dist = Math.acos(dist);
    dist = rad2deg(dist);
    dist = dist * 60 * 1.1515;
    if (unit == "K") {
        dist = dist * 1.609344;
    } else if (unit == "N") {
        dist = dist * 0.8684;
    }

    return (dist);
}

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*::    This function converts decimal degrees to radians                        :*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
private static double deg2rad(double deg) {
    return (deg * Math.PI / 180.0);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接