3

我正在尝试制作一个应用程序,该应用程序在用户当前位置获取纬度和经度。并计算瞬时,用户以公里为单位行驶了多少距离。

“currentLat”和“currentLon”是用户当前的纬度和经度。但我不知道“endLat”和“ednLon”的纬度和经度。

对不起,我的英语不好。

提前致谢。

//////////////////////////////

我把它做成了应用程序,但现在只有一个小问题。当我第一次启动程序时,我得到值 5536,当我重新启动程序时,我得到正常值 0.0

再次为我糟糕的英语感到抱歉。:)

伙计们感谢你帮助我,你是最棒的:)

  public class Gps extends Activity   {

 TextView display;


  double currentLon=0 ;
  double currentLat=0 ;
  double lastLon = 0;
  double lastLat = 0;
  double distance;




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




    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);

                if(loc==null){
                    display.setText("No GPS location found");
                    }
                    else{
                        //set Current latitude and longitude
                        currentLon=loc.getLongitude();
                        currentLat=loc.getLatitude();

                        }
                //Set the last latitude and longitude
                lastLat=currentLat;
                lastLon=currentLon ;


}



 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 loc = lm.getLastKnownLocation(lm.GPS_PROVIDER);

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

      //Get new location
      Location loc2 = lm.getLastKnownLocation(lm.GPS_PROVIDER);

      //get the current lat and long
     currentLat = loc.getLatitude();
     currentLon = loc.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);

        double distanceMeters = locationA.distanceTo(locationB);

        double distanceKm = distanceMeters / 1000f;

        display.setText(String.format("%.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



}

 };

}
4

3 回答 3

4

既然您有两个位置,为什么不考虑使用distanceTo

float distanceMeters = location1.distanceTo(location2);
float distanceKm = distanceMeters / 1000f;
于 2013-04-05T07:42:09.360 回答
1

但我不知道“endLat”和“ednLon”的纬度和经度。

endLat、endLon 是一个令人困惑的名称:

您应该有 lastLat, lastLon:在上一次调用 onGpsUpdate 时收到的 lat,lon,将其保存到您的例如 distanceCalculator.lastLat 中,其中 distanceCalculator 是您存储 lastLat 和 lastLon 的对象

那么你应该在 onGPSUpdate 中提供 curLat, curLon: current lat, lon

然后计算从 (lastLat, lastLon) -> (curLat, curLon) 的距离,并更新您的 distanceCalculator.lastLat 和 lastLon。

于 2013-04-05T13:06:25.457 回答
0

关联

var R = 6371; // Radius of the earth in km
var dLat = (lat2-lat1).toRad();  // Javascript functions in radians
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c; // Distance in km.
于 2013-04-05T07:51:57.907 回答