2016-07-12 5 views
0

Я разработал приложение, подобное uber, но я столкнулся с проблемой при расчете правильной стоимости проезда из-за неправильного расстояния от места сбора до места, где была завершена поездка. То, что я сделал и делает:Расчет расстояния между двумя местоположениями в андроиде во время вождения

1-й подход

я получаю расстояние между между текущим положением водителя (место сохранения, когда началась поездка) и конечного расположения (где завершенного поездка) как это.

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

но проблема с этим кодом есть. если местонахождение пассажира (где началось отключение) и место вылета (где поездка завершена), то такое же расстояние равно нулю.

второй подход

Теперь я вызываю метод каждую минуту. который выполняется в первый раз. рассчитать расстояние между местом срабатывания (от начала поездки) и текущим местоположением (местоположение через 1 минуту) и сохранить разницу в переменной. и текущее местоположение становится местом пикапа и когда метод выполняется снова. он вычисляет расстояние между pickuplocation и текущим местоположением (между местоположением до и после 1 минуты) и добавляет результат на уже сохраненное расстояние.

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

Но это неверно. сегодня я проехал 20 км от офиса до дома за 18 минут. но этот метод рассчитал расстояние 6,8 км.

Пожалуйста, предложите мне лучший способ сделать это или любой пример рабочего исходного кода. поэтому я могу решить эту проблему.

ответ

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

Вы уверены? Я использую distanceTo. в чем разница между этими двумя? –

+0

Из того, что я вижу distanceTo, используется для вычисления расстояния от текущей позиции до пункта назначения. DistanceBetween используется для расстояния между местоположением A и местом B. Но вы также можете поместить текущее местоположение в качестве стартового, у меня обычно бывает непростое время с расстоянием с точностью по какой-то причине. – GeorgeHz