【问题标题】:Calculate the total travelled distance Google Maps API V3 in Android在 Android 中计算总行驶距离 Google Maps API V3
【发布时间】:2026-02-26 12:45:01
【问题描述】:

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

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

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

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

已阅读 this SO post,但不知道如何使用 Google 地图距离矩阵 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();
            }
        }
    }

【问题讨论】:

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


    【解决方案1】:

    你可以使用下面的方法给你准确的结果

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

    【讨论】:

    • 我正在尝试计算总行驶距离,而不是两点之间的距离
    • 这正是我的想法,但我不确定这是否是最好的方法
    【解决方案2】:

    试试这个

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

    【讨论】:

      【解决方案3】:

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

      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 是的,这是您认为的最佳方式。