2017-06-27 2 views
-1

J'ai des problèmes dans le calcul de la distance en KM pour l'une de mes applications P-Cab. Pour l'application du conducteur, je mets l'emplacement de ramassage et le conducteur commence à conduire la voiture. Et basé sur le "KM" voyagé, l'utilisateur est facturé en taxi. Pour de meilleurs résultats, je calcule la distance toutes les minutes, de telle sorte que le lieu de ramassage me soit fourni toutes les minutes et que j'ajoute la distance parcourue chaque minute. Le problème que je reçois est la plupart du temps, le GPS prend un mauvais emplacement et donc pour un tour de 5 km, il donne des résultats comme 10KM ou 15KM.Erreur de calcul de la distance en utilisant le GPS même si le téléphone est en haute précision

est en dessous du service que je me sers pour GPS obtenir:

// The minimum distance to change Updates in meters 
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 4; // 10 meters 

// The minimum time between updates in milliseconds 
private static final long MIN_TIME_BW_UPDATES = 1000 * 10 * 1; // 1 minute 

// Declaring a Location Manager 
protected LocationManager locationManager; 

public GPSTracker(Context context) { 
    this.mContext = context; 
    getLocation(); 
} 

public Location getLocation() { 
    try { 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     locationManager = (LocationManager) mContext 
       .getSystemService(LOCATION_SERVICE); 
     String provider = locationManager.getBestProvider(criteria, true); 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

     } 
     // getting GPS status 
     isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

     // getting network status 
     isNetworkEnabled = locationManager 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 
      // no network provider is enabled 
     } else { 
      this.canGetLocation = true; 
      // First get location from Network Provider 
      if (isNetworkEnabled) { 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       Log.d("Network", "Network"); 
       if (locationManager != null) { 
        location = locationManager.getLastKnownLocation(provider); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
        } 
       } 
      } 
      // if GPS Enabled get lat/long using GPS Services 
      if (isGPSEnabled) { 
       if (location == null) { 
        locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("GPS Enabled", "GPS Enabled"); 
        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(provider); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
      } 
     } 

    } 
    return location; 
    } 
} 

Répondre

0

La méthode par laquelle vous calculez la distance donne la distance aérienne. Directement de la source à la destination, pas la distance de la route. Vous devrez utiliser google API lieux:

url: String = https://maps.googleapis.com/maps/api/distancematrix/json « ;

Voici trois origines params, destinations, et le mode doivent être transmis, l'origine : emplacement d'origine, la destination : emplacement de destination, Mode: dans votre cas, il pilotera

L'URL complète sera:.

https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=Washington,DC&destinations=New+York+City,NY&key=YOUR_API_KEY

+0

Salut Nitesh, j'ai essayé cette méthode aussi, mais ne donnait pas de résultats parfaits, le problème vient dans le ramassage de l'emplacement, je pense. –