计算Android中的总距离Google Maps API V3



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

现在到达目的地后,我必须计算距纬度和经度的距离。这不是要计算两个点之间的行进距离,而是要使我的数据库中的LAT集总距离。

我认为通过获得两个点之间的距离来计算总距离并终于添加

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

已经阅读了此帖子,但无法通过使用Google Maps距离矩阵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();
            }
        }
    }

您可以使用以下方法,该方法将为您提供acurate结果

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;
    }

尝试这个

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

您只能在两个坐标之间插入距离,最后总结您在数据库中的所有距离。距离如下。

float distanceInMeters =  lastLocation.distanceTo(myLocation);

其中" lastLocation"one_answers" mylocation"是位置对象的。

如果没有位置对象,则可以尝试。

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);

最新更新