私はuberのようなアプリを開発しましたが、ピックアップ場所から旅行が完了した場所までの間違った距離のために正しい運賃を計算することに問題があります。アンドロイドの2つの場所間の距離を計算する
第一のアプローチを、私は、現在のドライバの場所(旅行が始まったときに場所を保存)と終了位置(トリップが完了)。このような との間の距離を得ていた
:私は行ってとやってきた何 。
このコードに問題があります。旅客が場所を拾う(旅行が始まった)場所を降りると(旅行が完了した)同じ距離である場合はゼロです。
第二のアプローチ
は今、私は毎分メソッドを呼び出しています。これは初めて実行されたときに発生します。ピックアップ位置(トリップ開始位置)と現在位置(1分後の位置)の間の距離を計算し、変数の差異を保存します。現在位置がピックアップ位置となり、再度メソッドが実行されるときに発生します。ピックアップ位置と現在位置(1分前後の位置の間)の距離を計算し、結果を既に保存された距離に加算します。
private void locationDistanceHandler() {
handlerLocation = new Handler();
runnableCode = new Runnable() {
@Override
public void run() {
Location loc_pick_up = new Location("");
if (!pick_up_value_used) {
loc_pick_up.setLatitude(pickUpLatLng.latitude);
loc_pick_up.setLongitude(pickUpLatLng.longitude);
locationChanged.setmPickUpLocation(locationChanged.getmCurrentlocation());
pick_up_value_used = true;
} else {
loc_pick_up.setLatitude(locationChanged.getmPickUpLocation().getLatitude());
loc_pick_up.setLongitude(locationChanged.getmPickUpLocation().getLongitude());
}
Log.d(Constants.LOG, "handle location called:" + distanceInMeters);
distanceInMeters = distanceInMeters + locationChanged.getmCurrentlocation().distanceTo(loc_pick_up);
handlerLocation.postDelayed(this, 60000);
}
};
handlerLocation.postDelayed(runnableCode, 60000);
}
これは正確ではありません。今日私は18分でオフィスから家まで20km移動しました。この方法は6.8kmの距離を計算した。
これを行うには良い方法を教えてください。私はこの問題を解決することができます。
本当ですか?私は距離を使用しています。これら2つの違いは何ですか? –
distanceToは現在地から目的地までの距離を計算するために使用されます。 DistanceBetweenは位置Aと場所Bの間の距離に使用されますが、現在の位置を開始点として配置することもできますが、通常は何らかの理由でdistanceToとの厳しい時間があります。 – GeorgeHz