3

これまで、移動した経路から 5 秒ごとに緯度と経度のすべてのセットをデータベースに挿入しました。

目的地に到着したら、緯度と経度のセットから距離を計算する必要があります。2 点間の移動距離を計算することではなく、データベース内の緯度、経度のセットから移動した合計距離を取得することです。

2点間の距離を取得して合計することで合計距離を計算する方法を考えました

これよりも良い解決策はありますか?提案して助けてください

すでにこの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

2 つの座標間の距離のみを挿入し、最後にデータベースにあるすべての距離を合計することができます。以下のように距離を達成します。

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 に答える
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 に答える