0

* *位置情報の更新を使用して距離を計算するために GPS 座標を使用しました。しかし問題は、同じ場所に立っていると座標が変わり、どこにも移動せずに距離が変わることです。10 メートル以上移動した場合にのみ変更したい。

## Activity ##

//Activity

public TextView dist;
public double lati1,lati2,longi1,longi2;
private boolean run1 = false; 
private Handler handler1 = new Handler();
private Runnable task1 = new Runnable() {

     public void run() {  
     // TODO Auto-generated method stub  
        if (run1) {  
            handler1.postDelayed(this,1000);  
            if(lati1==0.0&&longi1==0.0)
            {
                    lati1=Service1.lat1;
                        longi1=Service1.lon1;
            }

                        lati2=Service1.lat1;
                        longi2=Service1.lon1;

              double R=63710;
              double dLat=Math.toRadians(lati2-lati1);
              double dLon=Math.toRadians(longi2-longi1);

                       double a=Math.sin(dLat/2)*Math.sin(dLat/2)+
                       Math.cos(Math.toRadians(lati1))*Math.cos(Math.toRadians(lati2))*
             Math.sin(dLon/2)*Math.sin(dLon/2);

             double c=2*Math.asin(Math.sqrt(a));
             double d=R*c;
             d=(double)(Math.round(d*100.00))/1000.00;
             distance+=d;
             String s=String.format("%.2f", distance);
             dist.setText(s); 

             lati1 = lati2;
             longi1 = longi2;

                    } 



            }  
        };
  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

        dist=(TextView)findViewById(R.id.distancetextView);
          Intent i =  new Intent(context, Service1.class);

        startService(i);

}







## Service ##


//Service



private double new_latitude = 0.0;
private double new_longitude = 0.0;

public static double lat1=0.0,lon1=0.0;

LocationManager locationManager = null;

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onCreate() {
// TODO Auto-generated method stub

locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0L, 0.0f, this);
super.onCreate();
}

@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
locationManager.removeUpdates(this);
super.onDestroy();
}

public void onLocationChanged(Location location) {
// TODO Auto-generated method stub

new_latitude=location.getLatitude();
new_longitude=location.getLongitude();


lat1=new_latitude;
lon1=new_longitude;
}

public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub

}

public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub

}

public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub

}****
4

3 に答える 3

0

//クラスで初期化された前の速度のパブリックまたはクラス変数。// float previousSpeed;

public void onLocationChanged(Location location) {
   // TODO Auto-generated method stub

   new_latitude=location.getLatitude();
   new_longitude=location.getLongitude();

   float speed = location.getSpeed();
   //You could also use location.hasSpeed(), which is a boolean, but it almost 
   //always returns True

   if(speed > DESIRED_LIMIT && previousSpeed > DESIRED_LIMIT){

      lat1=new_latitude;
      lon1=new_longitude;

   }

   previousSpeed = speed;
}

そのようなものです。その条件は、あまり最適化または設計されていません。しかし、それが位置オブジェクトから GPS 速度を取得する方法です。速度制限または全体の状態を微調整して、最良の結果を得ることができます。または、監視する速度の履歴をさらに追加します。

于 2013-01-25T06:11:42.470 に答える
0

あなたが書いているコードを見るべきです。しかし、それがなければ、呼び出す関数があり、X ミリ秒ごとに位置情報を更新すると言えます。または、最新の更新された場所を取得することもできます。コードが表示されるはずです。

アップデート:

この行を変更

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0L, 0.0f, this);

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0L, 10.0f, this);

10m 移動すると更新情報が届きます。

2 番目のパラメータはミリ秒単位の時間で、3 番目のパラメータは最小距離です。ただし、要求された時間または要求された距離に正確に更新されるという意味ではなく、それについてです。

于 2013-01-24T09:14:02.547 に答える
-1

Android マーケットのロケーション スプーファー アプリケーションを使用して、ロケーション スプーフィングの期間と距離を指定できます。

于 2013-01-24T09:14:23.360 に答える