Создание объекта Location в Android со значениями широты и долготы

138

У меня есть программа, в которой значения широты и долготы местоположения хранятся в базе данных, которую я загружаю.

Я хочу получить расстояние между этими координатами и мое текущее местоположение.

Класс Location имеет простой метод для определения расстояния между двумя объектами Location, поэтому я решил, что создам объект Location с координатами, а затем вызову метод.

Есть простой способ сделать это? Кроме того, если есть другое надежное, довольно простое уравнение, которое не будет слишком сильно мешать, это тоже сработает. Спасибо.

(Android.location.Location)

fonduman
источник
Смотрите stackoverflow.com/questions/8049612/… подробнее
Пол Томпсон

Ответы:

309

Предполагая, что у вас уже есть объект местоположения с вашим текущим местоположением.

Location targetLocation = new Location("");//provider name is unnecessary
targetLocation.setLatitude(0.0d);//your coords of course
targetLocation.setLongitude(0.0d);

float distanceInMeters =  targetLocation.distanceTo(myLocation);
Androiderson
источник
1
+1, поскольку комментарии в этом ответе, хотя и сокращенные и простые, на самом деле были чрезвычайно полезны. Спасибо @Exception Al
Subby
2
Действительно плохой пример документации для Android, потраченный на это довольно много времени. Другой мой вопрос: допустим, я предоставляю действующего провайдера, такого как gps, он даст мне текущее местоположение? Другими словами, в чем значение провайдера
Утсав Гупта
Если вам нужно значение по умолчанию для объекта Location и вы не можете инициализировать его с широтой / долготой, я предлагаю установить их в статическом инициализаторе, напримерstatic { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley
Да, я пропустил запись 'd' и не смог создать объект местоположения. Глупая маленькая ошибка
зулькарнайн шах
1
почему в модульных тестах это не имеет никакого эффекта, когда я устанавливаю Lat и Lon для объекта Location. Расположение объекта как-то равно нулю!?!?
Эвокс
30

Вы можете создать местоположения, используя их конструктор , а затем установить значения широты и долготы.

final Location location = new Location("yourprovidername");
location.setLatitude(1.2345d);
location.setLongitude(1.2345d);
ДСТ
источник
1
@dst Что "yourprovidername"?
запрет геоинженерии
@ Бан-геоинженерия оставь пустым "" не обязательно.
Alp Altunel
13

Я отвечаю на это снова, потому что многие люди, подобные мне, не знают, что на "providername"самом деле. Ниже код отвечает на вопрос:

Location location = new Location(LocationManager.GPS_PROVIDER);
location.setLatitude(23.5678);
location.setLongitude(34.456);

Здесь я использую в LocationManager.GPS_PROVIDERкачестве имени поставщика.

Виджай Е
источник
Почему LocationManager.GPS_PROVIDERи есть ли альтернативы, которые мы могли бы рассмотреть?
запрет геоинженерии
1
Есть еще 2, которые PASSIVE и NETWORK_PROVIDER. Вот хорошее объяснение, почему и что использовать. stackoverflow.com/questions/6775257/…
Виджай Е
1
Если locationобъект создается вручную, однако, не будет ли более целесообразным использовать пустую строку , а не LocationManager.GPS_PROVIDER, LocationManager.PASSIVEили LocationManager.NETWORK_PROVIDER?
запрет геоинженерии