2015-09-30 2 views
-3

Я хочу разработать небольшое приложение, которое вычисляет расстояние во время путешествия. Я пробовал решение ниже, основанное на GPS Android, но результат неправильный.Как OLA и UBER вычисляют расстояние для их выставления счетов

Пожалуйста, помогите мне в этом

Мой код:

locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 10, this); 
    public void onLocationChanged(Location location) { 

    if ((location != null)) { 
     if (location.getAccuracy()<50 && location.getSpeed()>0) { 
      onlocationChangeMethod(location); 
      lastlatitude = location.getLatitude(); 
      lastlongitude = location.getLongitude(); 

     } 

    } 
} 
public void onlocationChangeMethod(Location location){ 
    if (lastlatitude > 0) { 
      float[] results = new float[5]; 
      location.distanceBetween(location.getLatitude(), location.getLongitude(), 
        lastlatitude, lastlongitude, results); 
    } 
} 
+3

Как вы расчета расстояния? вы можете показать нам код? – Emil

+0

Спасибо за ответ. Я добавил свой код. –

+0

Я думаю, что метод 'distanceBetween' дает прямолинейное расстояние. правильные парни? – Emil

ответ

2

расстояние может быть точным, только если вы получаете местоположения GPS в очень короткие промежутки времени. Таким образом, одним из способов является вычисление расстояния, основанного на сдвигах координат gps. Это не может быть на 100% точным.

Также должно быть слышно, что внутри приборной панели Ola/Uber установлены внутренние устройства слежения, которые точно отслеживают флот и общаются со своим сервером (устройства отслеживания поставляются с сим, чтобы они могли общаться на серверы, на которых установлены шлюзы). Это означает, что, если Ола и Убер настолько точны с расстоянием, они могут полагаться на устройства отслеживания, установленные в автомобильной тире, и получать информацию через сервер.

+0

Спасибо за информацию. Но GPS несколько раз не соединяется, и он дает неправильное расстояние каждый раз. Например, если я перехожу на 2 КМ, тогда наступает разница в 400 м. –

+0

, пожалуйста, проверьте мои изменения. Они также используют внутренние устройства отслеживания флота. – Aun

+0

Спасибо Aun. Это полезно. –

0

GPS: Рассмотрите как отправную точку.

Продолжайте добавлять расстояние GPS между 2 точками (A и текущим местоположением) каждые X секунд (скажем, 10 секунд). Проверьте местоположение Android. distanceTo или distanceBetween. Check My Tracks app, это с открытым исходным кодом. GPS недоступен в помещении и будет иметь ошибку, если пользователь меняет направление очень часто (читается каждые 1-2 секунды)

Для получения точной дистанции позвоните в Google WebService с широтой и долготой вашего местоположения, она вернет расстояние, совершенно близкое к точная

private String getDistanceOnRoad(double latitude, double longitude, 
      double prelatitute, double prelongitude) { 
     String result_in_kms = ""; 
     String url = "http://maps.google.com/maps/api/directions/xml?origin=" 
       + latitude + "," + longitude + "&destination=" + prelatitute 
       + "," + prelongitude + "&sensor=false&units=metric"; 
     String tag[] = { "text" }; 
     HttpResponse response = null; 
     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 
      HttpPost httpPost = new HttpPost(url); 
      response = httpClient.execute(httpPost, localContext); 
      InputStream is = response.getEntity().getContent(); 
      DocumentBuilder builder = DocumentBuilderFactory.newInstance() 
        .newDocumentBuilder(); 
      Document doc = builder.parse(is); 
      if (doc != null) { 
       NodeList nl; 
       ArrayList args = new ArrayList(); 
       for (String s : tag) { 
        nl = doc.getElementsByTagName(s); 
        if (nl.getLength() > 0) { 
         Node node = nl.item(nl.getLength() - 1); 
         args.add(node.getTextContent()); 
        } else { 
         args.add(" - "); 
        } 
       } 
       result_in_kms = String.format("%s", args.get(0)); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return result_in_kms; 
    } 

Refernce: Get the distance between two locations in android?

+0

Спасибо за информацию. Те же методы, которые я использую, но неправильное расстояние приближается. Я запрашиваю обновления местоположения на каждые 10 м, и я добавляю это расстояние. Но это расстояние неверно. –

+0

Проверьте это Mallikarjun, ive Обновлен код –

+0

Спасибо. Мне нужно приложение работать без Интернета. Несколько раз GPS-координаты приближаются очень далеко от моего текущего местоположения. В этом случае расстояние неправильное –