2017-01-21 30 views
1

こんにちは、私は旅行の距離と速度を計算するためのアプリをやっています。スピードと距離がうまく動作するすべての機能は、しかし、私は距離が速度が19キロメートル/時+である場合にのみ測定され始めているバグを見た距離計算のバグandroid

これはなぜかもしれない起こっている?

おかげ

あなたgetDistanceBetweenGeoPoints機能があるため、このラインの位置の小さな違いを正確に0を返すために起こっている
//initialize location listener 
    locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      getSpeed(location); 
      getDistance(location); 
     } 

     @Override 
     public void onStatusChanged(String s, int i, Bundle bundle) { 

     } 

     @Override 
     public void onProviderEnabled(String s) { 

     } 

     @Override 
     public void onProviderDisabled(String s) { 
     } 

     //get the speed from the given location updates 
     public void getSpeed(Location location) { 
      currentSpeed = (location.getSpeed() * 3600/1000); 
      String convertedSpeed = String.format("%.2f", currentSpeed); 
      speedTxt.setText(convertedSpeed + "Km/h"); 
     } 

     private void getDistance(Location location) { 

      //to capture current location and keep as starting position of person 
      if (pLat == 500.0 && pLng == 500.0){ 
       pLat = location.getLatitude(); 
       pLng = location.getLongitude(); 
      } 

      if (cLat == 500.0 && cLng == 500.0){ 
       cLat = location.getLatitude(); 
       cLng=location.getLongitude(); 
      } 

      //to check is the person has changed location 
      if (pLat != cLat && pLng != cLng) { 
       pLat = cLat; 
       pLng = cLng; 
      } 

      //update the current location 
      cLat = location.getLatitude(); 
      cLng = location.getLongitude(); 

      //call the calculation method 
      distance += getDistanceBetweenGeoPoints(cLat, cLng, pLat, pLng); 
      String convertedDistance = String.format("%.2f", distance); 
      distanceTxt.setText(" " + convertedDistance); 
     } 

     public double getDistanceBetweenGeoPoints(Double cLat, Double cLng, Double pLat, Double pLng) { 
      // CALCULATE DISTANCE BETWEEN TWO POINTS 
      double earthRadius = 6367; //meters 
      double dLat = Math.toRadians(cLat - pLat); 
      double dLng = Math.toRadians(cLng - pLng); 
      double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
        Math.cos(Math.toRadians(cLat)) * Math.cos(Math.toRadians(pLat)) * 
          Math.sin(dLng/2) * Math.sin(dLng/2); 
      double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
      double dist = (double) (earthRadius * c); 
      dist = Math.round(dist * 100)/100.0; 

      return dist; 
     } 
    }; 

答えて

1

dist = Math.round(dist * 100)/100.0; 

のみGetDistanceでの表示のための総距離を丸めてみ( ):

//call the calculation method 
distance += getDistanceBetweenGeoPoints(cLat, cLng, pLat, pLng); 
String convertedDistance = String.format("%.2f", Math.round(dist * 100)/100.0); 
distanceTxt.setText(" " + convertedDistance); 
+0

答えをありがとう、私はそれを試してみる:) – MariusBrave

+0

うん、うまくいった、ありがとう@サム – MariusBrave

0
private void getDistance(Location location) { 

    //to capture current location and keep as starting position of person 
    if (pLat == 500.0 && pLng == 500.0) { 
     pLat = location.getLatitude(); 
     pLng = location.getLongitude(); 
    } 

    if (cLat == 500.0 && cLng == 500.0) { 
     cLat = location.getLatitude(); 
     cLng = location.getLongitude(); 
    } 

    //to check is the person has changed location 
    if (pLat != cLat && pLng != cLng) { 
     pLat = cLat; 
     pLng = cLng; 
    } 

    //update the current location 
    cLat = location.getLatitude(); 
    cLng = location.getLongitude(); 

    //call the calculation method 
    distance += getDistanceBetweenGeoPoints(cLat, cLng, pLat, pLng); 
    //String convertedDistance = String.format("%.2f", distance); 
    String convertedDistance = String.format("%.2f", Math.round(distance * 100)/100.0); 
    distanceTxt.setText(" " + convertedDistance); 
} 

public double getDistanceBetweenGeoPoints(Double cLat, Double cLng, Double pLat, Double pLng) { 
    // CALCULATE DISTANCE BETWEEN TWO POINTS 
    double earthRadius = 6367; //meters 
    double dLat = Math.toRadians(cLat - pLat); 
    double dLng = Math.toRadians(cLng - pLng); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(Math.toRadians(cLat)) * Math.cos(Math.toRadians(pLat)) * 
        Math.sin(dLng/2) * Math.sin(dLng/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double dist = (double) (earthRadius * c); 
    //dist = Math.round(dist * 100)/100.0; 

    return dist; 
}