Intereting Posts
R.string; Получить строку из динамического имени ключа Белая граница вместе с прозрачностью в «LinearLayout» Один и тот же навигационный ящик в разных действиях Менеджер местоположений Android, получить местоположение GPS, если нет GPS, затем перейдите в местоположение поставщика сети Операционная система Android Android: добавление простого фрагмента Первый пользовательский интерфейс для Android-библиотеки Logcat часто не работает Как показать ошибки компиляции в студии android Запуск Android-сервиса каждые 5 минут Андроидный компас кажется ненадежным Как сохранить Hashmap для Android, чтобы он был повторно использован при перезапуске приложения с использованием общих настроек? Список подключенных устройств Bluetooth? Клавиатура Android Emulator не отображается Как использовать библиотеку сохранения пространства с предварительно заполненной базой данных?

Расчет расстояния между двумя географическими точками

Прошу пролить свет на эту ситуацию

Прямо сейчас у меня есть два массива, имеющих широту и долготу соседних мест, а также теперь местоположение пользователя latiude и longiude теперь я хочу рассчитать расстояние между местоположением пользователя и соседними местами и хочу показать их в списке.

Я знаю, что существует способ вычисления расстояния как

public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results); 

Теперь в чем проблема состоит в том, как передать эти два массива с близкой широтой и долготой в этом методе и получить массив расстояний.

Solutions Collecting From Web of "Расчет расстояния между двумя географическими точками"

http://developer.android.com/reference/android/location/Location.html

Посмотрите на distanceTo или distanceBetween. Вы можете создать объект Location из широты и долготы:

 Location locationA = new Location("point A"); locationA.setLatitude(latA); locationA.setLongitude(lngA); Location locationB = new Location("point B"); locationB.setLatitude(latB); locationB.setLongitude(lngB); float distance = locationA.distanceTo(locationB); 

или

 private double meterDistanceBetweenPoints(float lat_a, float lng_a, float lat_b, float lng_b) { float pk = (float) (180.f/Math.PI); float a1 = lat_a / pk; float a2 = lng_a / pk; float b1 = lat_b / pk; float b2 = lng_b / pk; float t1 = FloatMath.cos(a1)*FloatMath.cos(a2)*FloatMath.cos(b1)*FloatMath.cos(b2); float t2 = FloatMath.cos(a1)*FloatMath.sin(a2)*FloatMath.cos(b1)*FloatMath.sin(b2); float t3 = FloatMath.sin(a1)*FloatMath.sin(b1); double tt = Math.acos(t1 + t2 + t3); return 6366000*tt; } 

Попробуйте этот код. Здесь мы имеем два значения долготы и широты, а функция selected_location.distanceTo (near_locations) возвращает расстояние между этими местами в метрах.

 Location location1=new Location("locationA"); near_locations.setLatitude(17.372102); near_locations.setLongitude(78.484196); Location location2=new Location("locationA"); near_locations.setLatitude(17.375775); near_locations.setLongitude(78.469218); double distance=selected_location.distanceTo(near_locations); 

Здесь «расстояние» – расстояние между местоположением1 и местом2 (в метрах)

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

Из того, что я понимаю, distanceBetween() для далеких мест, его выход – это эллипсоид WGS84.

  private static Double _MilesToKilometers = 1.609344; private static Double _MilesToNautical = 0.8684; /// <summary> /// Calculates the distance between two points of latitude and longitude. /// Great Link - http://www.movable-type.co.uk/scripts/latlong.html /// </summary> /// <param name="coordinate1">First coordinate.</param> /// <param name="coordinate2">Second coordinate.</param> /// <param name="unitsOfLength">Sets the return value unit of length.</param> public static Double Distance(Coordinate coordinate1, Coordinate coordinate2, UnitsOfLength unitsOfLength) { double theta = coordinate1.getLongitude() - coordinate2.getLongitude(); double distance = Math.sin(ToRadian(coordinate1.getLatitude())) * Math.sin(ToRadian(coordinate2.getLatitude())) + Math.cos(ToRadian(coordinate1.getLatitude())) * Math.cos(ToRadian(coordinate2.getLatitude())) * Math.cos(ToRadian(theta)); distance = Math.acos(distance); distance = ToDegree(distance); distance = distance * 60 * 1.1515; if (unitsOfLength == UnitsOfLength.Kilometer) distance = distance * _MilesToKilometers; else if (unitsOfLength == UnitsOfLength.NauticalMiles) distance = distance * _MilesToNautical; return (distance); } 

DistanceTo даст вам расстояние в метрах между двумя данными местоположением ej target.distanceTo (пункт назначения).

DistanceBetween дает вам расстояние, но он сохранит расстояние в массиве float (результаты [0]). Документ сообщает, что если результаты имеют длину 2 или больше, исходный подшипник сохраняется в результатах [1]. Если результаты имеют длину 3 или больше, конечный подшипник сохраняется в результатах [2]

Надеюсь, что это поможет

Я использовал distanceTo, чтобы получить расстояние от точки A до B, я думаю, что это путь.

 public double distance(Double latitude, Double longitude, double e, double f) { double d2r = Math.PI / 180; double dlong = (longitude - f) * d2r; double dlat = (latitude - e) * d2r; double a = Math.pow(Math.sin(dlat / 2.0), 2) + Math.cos(e * d2r) * Math.cos(latitude * d2r) * Math.pow(Math.sin(dlong / 2.0), 2) double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double d = 6367 * c; return d; }