3

到现在为止,我已经在我走过的路径每 5 秒后将所有纬度和经度集插入到我的数据库中。

现在到达目的地后,我必须计算纬度、经度集的距离。这不是关于计算两点之间的行进距离,而是要从我的数据库中的一组 lat,long 中获得总行进距离。

我想到了一种通过获取两点之间的距离并最后将它们相加来计算总距离的方法

还有比这更好的解决方案吗?请建议和帮助

已经阅读了这篇 SO 帖子,但不知道如何使用 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();
            }
        }
    }
4

3 回答 3

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);
}
于 2016-11-25T06:44:43.803 回答
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;
    }
于 2016-11-25T06:32:52.650 回答
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);
于 2016-11-25T06:39:02.213 回答