現在、車両の移動距離を計算するアプリケーションに取り組んでいます。私の要件は、車の運転中に、私の Android デバイスが移動した合計距離を計算し、この情報をサーバーに送信することです。これを行うために、Android のロケーション マネージャー API を使用し、基準を設定して getBestProvider を使用しました。このようにして、GPS またはネットワークを使用して緯度と経度を取得できます。以下は、このコード スニペットです。
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.POWER_HIGH);
provider = locationManager.getBestProvider(criteria, false);
locationManager.requestLocationUpdates(provider,30000,5, this);
onLocationChanged() コールバック メソッドは、毎回緯度と経度を提供します。常に以前の座標を保存し、新しい座標を取得すると、distanceBetween() API を使用して 2 つの間の距離を見つけます。以下は、このコード スニペットです。
public void onLocationChanged(Location location) {
findLatLongDistance(location);
}
private void findLatLongDistance(Location location) {
// TODO Auto-generated method stub
try{
Date date = new Date();
TimeStamp2 = sdf.format(date);
getSavedLatLong();//get lat and long from preference
Location locationB = new Location("point B");
locationB.setLatitude(location.getLatitude());
locationB.setLongitude(location.getLongitude());
Location locationA = new Location("point A");
locationA.setLatitude(prelat_val); //lat from pref locationA.setLongitude(prelong_val); //long from pref
if(prelat_val>0.0 && prelong_val>0.0){
Toast.makeText(LocationService.this,"Location Odometer Sum "+odometer_sum, Toast.LENGTH_LONG).show();
float distance2 = getDistance(prelat_val,prelong_val,location.getLatitude(),location.getLongitude());
odometer_sum = odometer_sum + (distance2/1000);
Toast.makeText(LocationService.this,"Lat "+prelat_val+"Long "+prelong_val+"Sum "+odometer_sum, Toast.LENGTH_LONG).show();
}
saveData(lat,lng,odometer_sum);
}catch(Exception e){
e.printStackTrace();
}
}
public float getDistance(double d, double e, double f, double g) {
float [] dist = new float[2];
Location.distanceBetween(d,e,f, g, dist);
return dist[0] ;
}
これは、ここで直面している問題のリストです。
- それが提供する場所は正確ではありません。このアプリを 5 km の距離でテストしたところ、約 300 ~ 400 メートルの差があります。
- モバイルが長時間同じ場所にある場合、常に異なる緯度と経度が表示されます。上記のコード スニペットを確認すると、requestLocationUpdates() で、30 秒の時間間隔と 5m の距離が設定されています。ここで私たちが考えたのは、モバイル デバイスが 5 メートルの距離を移動し、30 秒間隔を超えると、新しい緯度と経度が提供されるということです。しかし、実際には、デバイスの動きに関係なく、30 秒ごとに座標が提供されます。この問題を解決する方法がわかりません。
- デバイスが動いている間、正確な値を取得する方法。コードでさらに何かを行う必要がありますか?
さまざまなオプションを試すのに本当に何時間も費やしています。しかし、私はここで何かが欠けていると感じています。これについて私を助けてください。前もって感謝します..
ありがとう、