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


138

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

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

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

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

(Android.location.Location)


Ответы:


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);

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?
запрет геоинженерии
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.