mapkit kullanılarak mesafe belirleme

oy
5

Nasıl bir 1000ft veya 1/2 mil mesafesi mapkit ile belirlenir? Bazı pin bir yarıçap veya iki pim arasındaki mesafe ya.

Örneğin, iğne A iğneler B, C ilgili ilk merkezi ve D A 1/2 mil içinde pim A, B ve C farklı mesafelerde haritada da vardır ama D 1 mil uzaklıktadır. Ben bu nasıl hesaplayabilir B ve C A'dan 1/2 mil içinde olduğunu bilmek istiyorum?

Oluştur 10/03/2010 saat 02:57
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
13

İki farklı noktaları "pin" olduğunu ifade ettik beri, sen MKPinAnnotationView (veya başka bir açıklama görünümü) kullanıyorsunuz varsaymak gidiyorum. Değilse, konuma başka bir şekilde almak zorunda olacak.

Bu yerlerde için ek açıklama nesnelere işaretçileri varsa, o zaman kolayca çağırabilirsiniz -coordinate(kullanarak bu koordinatlardan CLLocations oluşturmak, onlara -initWithLatitude:longitude:) ve ardından yöntemi kullanmak -getDistanceFrommetre mesafe almak için. Oradan mile kolay bir dönüşüm bu. Tüm kodu şöyle görünecektir, şunları söyledi:

CLLocationCoordinate2D pointACoordinate = [pointAAnnotation coordinate];
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude];
CLLocationCoordinate2D pointBCoordinate = [pointBAnnotation coordinate];
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude];
double distanceMeters = [pointALocation getDistanceFrom:pointBLocation];
double distanceMiles = (distanceMeters / 1609.344);

Sen mil cinsinden mesafe ile bitireceğiz ve oradan karşılaştırabilirsiniz. Bu yardımcı olur umarım.

Cevap 10/03/2010 saat 08:31
kaynak kullanıcı

oy
12

getDistanceFrom Şimdi işte artık kullanılmamaktadır Bunu yapmak isteyen herkes için alternatif bir yanıt.

CLLocationCoordinate2D pointACoordinate = [pointAAnnotation coordinate];
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude];  

CLLocationCoordinate2D pointBCoordinate = [pointBAnnotation coordinate];
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude];  

float distanceMeters = [pointALocation distanceFromLocation:pointBLocation];
float distanceMiles = (distanceMeters / 1609.344);  

[pointALocation release];
[pointBLocation release];  

Yukarıda olduğu gibi, kullanabilirsiniz floatyerine doubleve kesinliğini gerektirmeyen eğer bir int sonuçları döküm olabilir floatşöyle:

int distanceCastToInt = (int) [pointALocation distanceFromLocation:pointBLocation];

intBunu gibi ek açıklamada mesafenin kaba bir fikir vermek istiyorsa kullanışlıdır:

pointAAnnotation.title = @"Point A";
pointAAnnotation.subtitle = [NSString stringWithFormat: @"Distance: %im",distanceCastToInt];

örneğin: "50 milyon uzaklık" ek açıklama altyazı okurdu.

Cevap 22/02/2011 saat 02:37
kaynak kullanıcı

oy
0

Bu verilen cevabın 3 Swift eşdeğerdir:

let pointACoordinate = pointAAnnotation.coordinate
let pointALocation = CLLocation(latitude: pointACoordinate.latitude, longitude: pointACoordinate.longitude)
let pointBCoordinate = pointBAnnotation.coordinate
let pointBLocation = CLLocation(latitude: pointBCoordinate.latitude, longitude: pointBCoordinate.longitude)
let distanceMeters = pointALocation.distance(from: pointBLocation)
let distanceMiles = (distanceMeters / 1609.344)
Cevap 10/11/2016 saat 22:21
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more