Determinarea distanță folosind mapkit

voturi
5

Cum este un 1000ft sau 1/2 mile distanță determinată cu mapkit? Fie o rază de la unele pini sau distanța dintre doi pini.

De exemplu, eu centrați harta pe pin A. Pins B, C și D sunt, de asemenea, pe hartă, la diferite distanțe de pin A. B și C sunt în termen de 1/2 mile de la A, dar D este de 1 mile distanță. Aș vrea să știu că B și C sunt în termen de o jumătate de mile de la A. Cum pot calcula asta?

Întrebat 10/03/2010 la 02:57
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
13

Din moment ce ați afirmat că cele două puncte diferite sunt „pini“, voi presupune că utilizați MKPinAnnotationView (sau o altă vedere adnotare). Dacă nu, vei avea pentru a obține locația alt mod.

Dacă aveți indicii la obiectele de adnotare pentru aceste locații, atunci puteți apela cu ușurință -coordinatepe ele, de a crea CLLocations de la aceste coordonate (folosind -initWithLatitude:longitude:), apoi utilizați metoda -getDistanceFrompentru a prelua distanța în metri. De acolo, este o conversie ușor de mile. Toate spus, codul ar arata ceva de genul:

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

Vei termina cu distanța în mile, și se poate compara de acolo. Sper că acest lucru vă ajută.

Publicat 10/03/2010 la 08:31
sursa de către utilizator

voturi
12

getDistanceFrom este acum depreciat atât de aici un răspuns alternativ pentru oricine caută să facă acest lucru.

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

Ca mai sus, ai putea folosi în floatloc doubleși ai putea arunca rezultatele la un int , dacă nu necesită precizia floatastfel:

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

intEste la îndemână dacă ai vrut să dea o idee de la distanță în adnotarea astfel:

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

Subtitlul adnotare va citi „Distanța de: 50m“, de exemplu.

Publicat 22/02/2011 la 02:37
sursa de către utilizator

voturi
0

Acest lucru este echivalent cu 3 Swift răspunsul dat:

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)
Publicat 10/11/2016 la 22:21
sursa de către utilizator

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