Я хочу создать приложение, которое проверяет ближайшее место, где находится пользователь. Я могу легко узнать местоположение пользователя, и у меня уже есть список мест с широтой и долготой.
Как лучше всего узнать ближайшее место в списке относительно текущего местоположения пользователя.
Я ничего не нашел в API Google.
android
geolocation
maps
Chmouel Boudjnah
источник
источник
import android.location.Location;
или какойhttp://developer.android.com/reference/android/location/Location.html
Смотрите в distanceTo или distanceBetween. Вы можете создать объект Location по широте и долготе:
источник
distanceTo
метод.Приближенное решение (на основе равнопрямоугольной проекции) намного быстрее (требуется только 1 триггер и 1 квадратный корень).
Это приближение актуально, если ваши точки не слишком далеко друг от друга. Он всегда будет завышен по сравнению с реальным гаверсинусным расстоянием. Например, это добавит не более 0,05382% к реальному расстоянию, если дельта широты или долготы между вашими двумя точками не превышает 4 десятичных градуса .
Стандартная формула (Хаверсинус) является точной (то есть она работает для любой пары долготы / широты на Земле), но намного медленнее, так как для этого требуется 7 тригонометрических и 2 квадратных корня. Если пара точек не слишком далеко друг от друга и абсолютная точность не имеет первостепенного значения, вы можете использовать эту приблизительную версию (Equirectangular), которая работает намного быстрее, поскольку использует только один тригонометрический и один квадратный корень.
Вы можете дополнительно оптимизировать это :
Для получения дополнительной информации см .: http://www.movable-type.co.uk/scripts/latlong.html.
Существует хорошая эталонная реализация формулы Хаверсина на нескольких языках по адресу: http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe
источник
O(n)
. ДляO(1)
решения используйте двумерный пространственный индекс, чтобы обрезать возможные совпадения перед вычислением точного решения. Мы выходим за рамки этого вопроса :)Есть несколько методов, которые вы можете использовать, но чтобы определить, какой из них лучше, нам сначала нужно знать, знаете ли вы о высоте пользователя, а также о высоте других точек?
В зависимости от требуемого уровня точности, вы можете изучить формулы Хаверсина или Винсенти ...
На этих страницах подробно описаны формулы и, для менее склонных к математике, также объясняется, как их реализовать в сценарии!
Формула гаверсина: http://www.movable-type.co.uk/scripts/latlong.html
Формула Винсенти: http://www.movable-type.co.uk/scripts/latlong-vincenty.html
Если у вас возникли проблемы с каким-либо значением в формулах, просто прокомментируйте, и я постараюсь ответить на них :)
источник
Есть два способа определить расстояние между LatLng.
Посмотри это
и второй
public float distanceTo (Location dest)
как ответил praveen.источник
источник
Просто используйте следующий метод, передайте широту и долготу и получите расстояние в метрах:
источник
вы можете получить расстояние и время с помощью Google Map API Google Map API
просто передайте загруженный JSON этому методу, вы получите расстояние и время в реальном времени между двумя широтами
источник
источник