2015-12-18 3 views
-1

Я новая разработка Android. Я пытаюсь построить систему отслеживания на основе GPS, где наш клиент будет платить моему клиенту на основе расчета KMS, но я не получаю точное расстояние, которое я пытался метод distanceTo и Distancebetween никто из них не дают точные результаты может кто-то пожалуйста, помогите мне в этомКак получить точное расстояние от приемника местоположения в android

if (isNetworkEnabled) { 

       /*if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
        // TODO: Consider calling 
        // public void requestPermissions(@NonNull String[] permissions, int requestCode) 
        // here to request the missing permissions, and then overriding 
        // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
        //           int[] grantResults) 
        // to handle the case where the user grants the permission. See the documentation 
        // for Activity#requestPermissions for more details. 
        return null; 
       }*/ 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       Log.d("Network", "Network"); 
       Criteria criteria = new Criteria(); 
       String provider = locationManager.getBestProvider(criteria, true); 
       criteria.setAccuracy(Criteria.ACCURACY_FINE); 
       if (locationManager != null) { 
        location = locationManager 
          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
        } 
       } 
      } 

от этого я получаю LatLng и используя onLocationChanged метод я беру новое Расположение и вычисление расстояния с помощью расстояния Чтобы вы можете предложить, пожалуйста нас наилучшим образом даже я попытался с

public static double distance(double lat1, double lon1, double lat2, 
           double lon2, char unit) { 
    double theta = lon1 - lon2; 
    double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) 
      + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) 
      * Math.cos(deg2rad(theta)); 
    dist = Math.acos(dist); 
    dist = rad2deg(dist); 
    Log.d("Distance","from distance"+dist); 
    dist = dist * 60 * 1.1515; 
    if (unit == 'K') { 
     dist = dist * 1.609344; 
     Log.d("Distance","from distance after unit"+dist); 
    } else if (unit == 'N') { 
     dist = dist * 0.8684; 
    } 
    return (dist); 
} 
+0

// Минимальное расстояние для изменения Updates в метрах частные статические финальные длинные MIN_DISTANCE_CHANGE_FOR_UPDATES = 50; // 50 метров // Минимальное время между обновлениями в миллисекундах частное статическое окончательное длинное MIN_TIME_BW_UPDATES = 1000 * 60 * 3; // 3 минута – yashwanth

ответ

0

попробовать это:

Location locationA = new Location("point A"); 
    locationA.setLatitude(currentLati); 
    locationA.setLongitude(currentLongi); 

Location locationB = new Location("point B"); 
        locationB.setLatitude(Double.valueOf(destinationLatitude)); 
        locationB.setLongitude(Double.valueOf(destinationLongitude)); 
        //float distance = locationA.distanceTo(locationB); //in metres 
        float distance = locationA.distanceTo(locationB)/1000; //in KM 
+0

Я пробовал даже расстояние и расстояние между ними, но я получаю расстояние, но не точно, если i путешествие на 10 км я получаю 7.5kms – yashwanth

+0

на самом деле он возвращает кратчайшее расстояние между точками, чтобы получить список возможных расстояний между 2 точками использовать расстояние между ними, проверить эту ссылку: http://developer.android.com/reference/android/location /Location.html#distanceBetween (двойной,% 20double,% 20double,% 20double,% 20float []) –

0

Чтобы получить лучшее использование РАСПОЛОЖЕНИЕ эту функцию:

public static LocationManager mLocationManager; 

private Location getLastKnownLocation() { 
     mLocationManager = (LocationManager)getActivity().getApplicationContext().getSystemService(getActivity().LOCATION_SERVICE); 
     List<String> providers = mLocationManager.getProviders(true); 
     Location bestLocation = null; 
     try { 
      for (String provider : providers) { 
       Location l = mLocationManager.getLastKnownLocation(provider); 
       if (l == null) { 
        continue; 
       } 
       if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) { 
        // Found best last known location: %s", l); 
        bestLocation = l; 
       } 
      } 
     }catch (Exception e){ 

     } 
     return bestLocation; 
    } 
Смежные вопросы