Створення об’єкта Location в Android зі значеннями широти та довготи


138

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

Я хочу отримати відстань між цими координатами та моїм поточним місцезнаходженням.

Клас Location має простий метод пошуку відстані між двома об’єктами Location, тому я зрозумів, що я буду об’єкт Location з координатами, а потім викликаю метод.

Чи є простий спосіб це зробити? Крім того, якщо є ще одне надійне, досить просте рівняння, яке не буде захаращувати речі занадто сильно, це також спрацює. Дякую.

(android.location.Location)


Дивіться 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);

1
+1, оскільки коментарі у цій відповіді, хоч і скорочені та прості, насправді були дуже корисними. Дякую @Exception Al
Subby

2
Дійсно поганий приклад документації для Android, витратив на це досить багато часу. Моє інше питання, припустимо, я надаю дійсного постачальника, як gps, чи дасть мені це місце? Іншими словами, яке значення провайдера
Utsav Gupta

Якщо вам потрібне значення за замовчуванням для об’єкта Location, і оскільки ви не можете його ініціалізувати з lat / lon, пропоную встановити їх у статичний ініціалізатор, наприклад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"?
заборона-геоінженерія

@ ban-geoengineering залишати порожнім "" не потрібно.
Альп Альтунель

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/…
Vijay E

1
Якщо locationоб'єкт створюється вручну, однак, не буде чи більш доцільним використовувати порожній рядок , а не LocationManager.GPS_PROVIDER, LocationManager.PASSIVEабо LocationManager.NETWORK_PROVIDER?
заборона-геоінженерія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.