Bepalen van de afstand met behulp mapkit

stemmen
5

Hoe wordt een 1000ft of 1/2 mijl afstand bepaald mapkit? Hetzij een straal van enkele pin of de afstand tussen twee pennen.

Zo centreer ik de map op pen A. Pins B, C en D zijn ook bekijken op verschillende afstanden pin A. B en C binnen 1/2 mijl van A, maar D 1 mijl afstand. Ik zou graag willen weten dat B en C binnen 1/2 mijl van A. Hoe kan ik dat berekenen?

De vraag is gesteld op 10/03/2010 om 02:57
bron van user
In andere talen...                            


3 antwoorden

stemmen
13

Aangezien u hebt gezegd dat de twee verschillende punten zijn "pinnen", ik ga ervan uit dat u met behulp van MKPinAnnotationView (of een andere annotatie view). Zo niet, je gaat te hebben om de locatie op een andere manier te krijgen.

Als u verwijzingen naar de annotatie-objecten voor deze locaties hebben, dan kunt u gemakkelijk bellen -coordinateop hen, maken CLLocations van deze coördinaten (gebruik -initWithLatitude:longitude:), en gebruik vervolgens de methode -getDistanceFromom de afstand in meters op te halen. Vanaf daar, het is een eenvoudige conversie naar mijlen. Alles bij elkaar, de code zou er ongeveer zo uitzien:

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

Je zult eindigen met de afstand in mijlen, en kan het vergelijken van daar. Ik hoop dat dit helpt.

antwoordde op 10/03/2010 om 08:31
bron van user

stemmen
12

getDistanceFrom is nu verouderd dus hier is een alternatieve oplossing voor iedereen die op zoek om dit te doen.

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

Zoals hierboven, kunt u gebruik maken floatin plaats van doubleen je kon de resultaten naar een int werpen als je niet de precisie van de eisen floatals volgt:

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

Het intis handig als je wilde een ruw idee van afstand te geven in de aantekening als volgt:

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

De ondertitel van het annotatie zou lezen "Afstand: 50m" bijvoorbeeld.

antwoordde op 22/02/2011 om 02:37
bron van user

stemmen
0

Dit is Swift 3 equivalent van het antwoord gegeven:

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)
antwoordde op 10/11/2016 om 22:21
bron van user

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