Android'de enlem ve boylam değerleriyle bir Konum nesnesi oluşturma


138

Bir konumun enlem ve boylam değerlerinin indirdiğim bir veritabanında saklandığı bir programım var.

Bu koordinatlar ile şu anki konumum arasındaki mesafeyi almak istiyorum.

Location sınıfının iki Location nesnesi arasındaki mesafeyi bulmak için basit bir yöntemi vardır, bu yüzden koordinatlarla bir Location nesnesi yapacağımı ve sonra yöntemi çağırdığımı düşündüm.

Bunu yapmanın kolay bir yolu var mı? Ayrıca, işleri çok fazla karıştırmayacak güvenilir, oldukça basit bir denklem varsa, bu da işe yarayacaktır. Teşekkürler.

(Android.location.Location)


Yanıtlar:


309

Geçerli konumunuzla birlikte zaten bir konum nesneniz olduğunu varsayarsak.

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
Kısaltılmış ve basit olsa da, bu cevaptaki yorumlar aslında gerçekte son derece yararlıydı. @Exception Al
Subby

2
Android için belgelerin gerçekten kötü bir örneği, bu konuda biraz zaman harcadı. Diğer sorum, gps gibi geçerli bir sağlayıcı sağladığımı varsayalım, bana şu anki konumu verecek mi? Başka bir deyişle, sağlayıcının önemi nedir
Utsav Gupta

Bir Yer nesnesi için ve o zamandan beri bir varsayılan değer gerekirse enlem / boylam, bir statik başlatıcısı, örneğin onları ayarlamanızı öneririz ile başlatılamıyorstatic { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley

Ya 'd' yazmayı kaçırmıştım ve konum nesnesini yaratamadım. Aptal küçük hata
zulkarnain shah

1
Neden birim testlerinde Konum nesnesinde Lat ve Lon ayarladığımda herhangi bir etkisi yoktur. Konum nesnesi bir şekilde boş!?!?
Ewoks

30

Sen kullanarak yerleri yaratabilir onların yapıcı sonra, latutude ve boylam değerleri ayarlayın.

final Location location = new Location("yourprovidername");
location.setLatitude(1.2345d);
location.setLongitude(1.2345d);

1
@dst Nedir "yourprovidername"?
ban-geoengineering

@ ban-geoengineering boş bırak "" gerekli değil.
Alp Altunel

13

Bunu tekrar cevaplıyorum, çünkü benim gibi birçok insan "providername"gerçekte ne olduğunu bilmiyor . Aşağıdaki kod soruyu cevaplar:

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

Burada LocationManager.GPS_PROVIDERsağlayıcı adı olarak kullanıyorum .


Neden LocationManager.GPS_PROVIDERve düşünebileceğimiz başka alternatifler var mı?
ban-geoengineering

1
PASSIVE ve NETWORK_PROVIDER olan 2 tane daha var. İşte neden ve ne kullanılacağına dair güzel bir açıklama. stackoverflow.com/questions/6775257/…
Vijay E

1
Eğer locationnesne el ile oluşturulan ediliyor olsa da, bunun yerine boş bir dize kullanmak daha uygun olmaz LocationManager.GPS_PROVIDER, LocationManager.PASSIVEya LocationManager.NETWORK_PROVIDER?
ban-geoengineering
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.