2016-07-12 13 views
0

Ich habe eine App wie Uber entwickelt, aber ich bin mit Problem bei der Berechnung der richtigen Tarif wegen der falschen Entfernung von Abholort zu dem Ort, an dem Reise abgeschlossen. Was ich getan habe und tun:Berechnung der Entfernung zwischen zwei Orten in Android während der Fahrt

ersten Ansatz

Ich war immer Abstand zwischen zwischen der aktuellen Position des Treibers (Speicherort, wenn Reise gestartet) und Endpunkt (wo Reise abgeschlossen) wie diese.

distanceInMeters = locationChanged.getmCurrentlocation().distanceTo(loc_pick_up); 

aber Problem mit diesem Code ist. wenn der Abholort des Passagiers (wo die Fahrt begonnen hat) und der Ablegeort (wo die Fahrt beendet wurde) gleich ist, ist die Entfernung gleich Null.

zweiten Ansatz

Jetzt nenne ich eine Methode, jede Minute. was beim ersten Mal ausgeführt wird. Ermitteln Sie die Entfernung zwischen Abholort (ab dem Beginn der Fahrt) und dem aktuellen Standort (Ort nach 1 Minute) und speichern Sie die Differenz in einer Variablen. und dann wird der aktuelle Ort zum Abholort und wenn das Verfahren erneut ausgeführt wird. Er berechnet den Abstand zwischen dem Standort und dem aktuellen Standort (zwischen dem Standort vor und nach 1 Minute) und fügt das Ergebnis in die bereits gespeicherte Entfernung ein.

private void locationDistanceHandler() { 

    handlerLocation = new Handler(); 
    runnableCode = new Runnable() { 
     @Override 
     public void run() { 

      Location loc_pick_up = new Location(""); 
      if (!pick_up_value_used) { 
       loc_pick_up.setLatitude(pickUpLatLng.latitude); 
       loc_pick_up.setLongitude(pickUpLatLng.longitude); 
       locationChanged.setmPickUpLocation(locationChanged.getmCurrentlocation()); 
       pick_up_value_used = true; 
      } else { 
       loc_pick_up.setLatitude(locationChanged.getmPickUpLocation().getLatitude()); 
       loc_pick_up.setLongitude(locationChanged.getmPickUpLocation().getLongitude()); 
      } 
      Log.d(Constants.LOG, "handle location called:" + distanceInMeters); 
      distanceInMeters = distanceInMeters + locationChanged.getmCurrentlocation().distanceTo(loc_pick_up); 
      handlerLocation.postDelayed(this, 60000); 
     } 
    }; 
    handlerLocation.postDelayed(runnableCode, 60000); 
} 

Aber das ist nicht korrekt. Heute bin ich in 18 Minuten 20 km von Büro zu Zuhause gereist. aber diese Methode berechnete Entfernung 6,8 km.

Bitte schlagen Sie mir eine bessere Möglichkeit vor, dies oder ein anderes Quellcodebeispiel zu tun. damit ich dieses Problem lösen kann.

Antwort

0
float[] results=new float[5]; 
       loc_pick_up.distanceBetween(startLatitude,startLongitude, endLatitude, endLongitude,results); 
       String calculatedDistance=results[0]; 
       System.out.println("Distance between point A and point B are: " + calulcatedDistance); 
+0

Sind Sie sicher? Ich benutze distanceTo. Was ist der Unterschied zwischen diesen beiden? –

+0

Von dem, was ich sehe, wird distanceTo verwendet, um die Entfernung von Ihrer aktuellen Position zu einem Ziel zu berechnen. DistanceBetween wird für die Entfernung zwischen Standort A und Standort B verwendet. Sie können aber auch den aktuellen Standort als Startpunkt festlegen. Aus irgendwelchen Gründen habe ich normalerweise Schwierigkeiten mit der Entfernung. – GeorgeHz

Verwandte Themen