Android:GPS距离测量 - 未计算公里数

时间:2013-04-17 13:39:27

标签: android gps distance measure

我有一个应用程序可以计算行驶的公里数。但是当我在前1或2公里开车的时候。一切都很好,然后我的应用程序变慢。例如,当我走了2公里。我的应用程序是1.93或当我旅行70公里。我的应用程序是48公里。

我还有一个小问题。 当我第一次启动应用程序时,我获得了很大的价值(例如5536km。),当我重新启动程序时,我得到正常值0.0km。这就是我第一次启动GPS时如果我关闭GPS并且之后打开我会再次遇到同样的问题。

抱歉我的英语不好。

提前致谢。

public class Gps extends Activity   {

 TextView display;



  double km;
  double currentLon=0 ;
  double currentLat=0 ;
  double lastLon = 0;
  double lastLat = 0;
  double distance;
  double distanceMeters;
  double distanceKm;
  double distanceKm1;


  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gps);



   display = (TextView) findViewById(R.id.info);       




                LocationManager lm =(LocationManager) getSystemService(LOCATION_SERVICE); 
                lm.requestLocationUpdates(lm.GPS_PROVIDER, 0,0, Loclist);
                Location loc = lm.getLastKnownLocation(lm.GPS_PROVIDER);

                display.setText("GPS not found");


                if(loc==null){
                    display.setText("GPS not found");
                    }
                    else{
                        //Get the last latitude and longitude
                        lastLon=loc.getLongitude();
                        lastLat=loc.getLatitude();
                        }




   }



 LocationListener Loclist = new LocationListener(){




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

     //start location manager
     LocationManager lm =(LocationManager) getSystemService(LOCATION_SERVICE);


     //Get last location
      location = lm.getLastKnownLocation(lm.GPS_PROVIDER);




    //Request new location
     lm.requestLocationUpdates(lm.GPS_PROVIDER, 0,0, Loclist);





      //get the current lat and long
     currentLat = location.getLatitude();
     currentLon = location.getLongitude();



Location locationA = new Location("point A");
    locationA.setLatitude(lastLat);
    locationA.setLongitude(lastLon);


Location locationB = new Location("point B");
        locationB.setLatitude(currentLat);
        locationB.setLongitude(currentLon);


        distanceMeters = locationA.distanceTo(locationB);

        distanceKm = distanceMeters / 1000f;



        display.setText(String.format("traveled km.\n%.2f km.",distanceKm));


  }



@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}



@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub



}



@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub



}






 };



}

1 个答案:

答案 0 :(得分:1)

我可以回答你的第二个问题:

  

当我第一次启动应用程序时,我获得了很大的价值(例如   5536公里。)

这是从(0,0)(aequator)到你当前位置的距离 似乎lastLon和lastLat的初始值为0。 所以你必须避免lastLon和lastLat无效。 明确检查是否未被初始化。