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

时间:2016-11-25 06:12:45

标签: android google-maps-api-3 distance google-distancematrix-api

直到现在,我已经从我走过的路上每隔5秒插入了我的数据库中的所有纬度和经度集。

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

我想到了通过获得两点之间的距离来计算总距离的方法 并在最后添加

有没有比这更好的解决方案?请提出建议和帮助

已经阅读this SO post但未了解如何使用Google Maps Distance Matrix API获取总距离

/////// service将坐标插入数据库。

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 :(得分: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;
    }

答案 1 :(得分:0)

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

float distanceInMeters =  lastLocation.distanceTo(myLocation);

其中" lastLocation"和#34; myLocation"是位置对象。

如果你没有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);

答案 2 :(得分: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);
}