Die Bestimmung Abstand MapKit mit

stimmen
5

Wie wird ein 1000 Fuß oder 1/2 Meile Entfernung mit MapKit bestimmt? Entweder wird ein Radius von einem Stift oder der Abstand zwischen zwei Stiften.

Zum Beispiel Center I die Karte auf Pin A. Pins B, C und D sind ebenfalls auf der Karte in verschiedenen Abständen von pin A. B und C sind innerhalb 1/2 Meile von A d jedoch 1 Meile entfernt. Ich möchte wissen, dass B und C innerhalb 1/2 Meile von A. sind Wie kann ich das berechnen?

Veröffentlicht am 10/03/2010 um 02:57
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
13

Da Sie, dass die beiden unterschiedlichen Punkte angegeben haben, sind „Stifte“, werde ich Sie verwenden MKPinAnnotationView (oder eine andere Anmerkungsansicht) zu übernehmen. Wenn nicht, dann werden Sie die Lage eine andere Art und Weise zu bekommen haben.

Wenn Sie Hinweise auf die Beschriftungsobjekte für diese Orte haben, dann können Sie leicht rufen -coordinateauf sie, erstellen CLLocations aus diesen Koordinaten (mit -initWithLatitude:longitude:), und dann die Methode verwenden , um -getDistanceFromden Abstand in Metern abzurufen. Von dort ist es eine einfache Umwandlung in Meilen. Alles in allem würde der Code wie folgt aussehen:

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

Sie werden mit der Entfernung in Meilen am Ende, und von dort vergleichen. Hoffe das hilft.

Beantwortet am 10/03/2010 um 08:31
quelle vom benutzer

stimmen
12

getDistanceFrom jetzt veraltet ist, so ist hier eine alternative Lösung für jedermann, dies zu tun suchen.

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

Wie oben erwähnt, könnten Sie floatstatt doubleund man konnte die Ergebnisse in einen int werfen , wenn Sie nicht die Präzision der erfordern floatso wie:

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

Das intist praktisch , wenn Sie eine ungefähre Vorstellung davon Abstand in der Anmerkung wie so geben wollen:

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

„: 50m Entfernung“ zum Beispiel der Untertitel der Anmerkung lesen würde.

Beantwortet am 22/02/2011 um 02:37
quelle vom benutzer

stimmen
0

Dies ist Swift 3 Äquivalent der gegebenen Antwort:

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)
Beantwortet am 10/11/2016 um 22:21
quelle vom benutzer

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