Я новая разработка 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);
}
// Минимальное расстояние для изменения Updates в метрах частные статические финальные длинные MIN_DISTANCE_CHANGE_FOR_UPDATES = 50; // 50 метров // Минимальное время между обновлениями в миллисекундах частное статическое окончательное длинное MIN_TIME_BW_UPDATES = 1000 * 60 * 3; // 3 минута – yashwanth