La determinación de la distancia utilizando MapKit

votos
5

¿Cómo es un 1000 pies o media milla de distancia determinan con MapKit? Cualquiera de un radio de algunos pasador o la distancia entre dos pasadores.

Por ejemplo, centrar el mapa en el pin A. botones B, C y D también están en el mapa a diferentes distancias de pasador de A. B y C están dentro de media milla de A, pero d es 1 milla de distancia. Me gustaría saber que B y C están a media milla de A. ¿Cómo puedo calcular eso?

Publicado el 10/03/2010 a las 02:57
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
13

Puesto que usted ha declarado que los dos puntos diferentes son "alfileres", voy a asumir que utilizas MKPinAnnotationView (o alguna otra vista de anotación). Si no, vas a tener que conseguir la ubicación de alguna otra manera.

Si tiene punteros a los objetos de anotación para estos lugares, entonces se puede llamar fácilmente -coordinateen ellos, crear CLLocations de estas coordenadas (utilizando -initWithLatitude:longitude:), y luego usar el método -getDistanceFrompara recuperar la distancia en metros. A partir de ahí, es una conversión fácil de millas. En total, el código sería algo como esto:

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

Usted va a terminar con la distancia en millas, y se puede comparar a partir de ahí. Espero que esto ayude.

Respondida el 10/03/2010 a las 08:31
fuente por usuario

votos
12

getDistanceFrom ahora está en desuso así que aquí tiene una respuesta alternativa para cualquiera que quiera hacer esto.

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

Como el anterior, se puede utilizar floaten lugar de doubley se podía emitir los resultados a un int si no se requiere la precisión del floatmodo:

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

El intes muy útil si se quería dar una idea aproximada de la distancia en la anotación de este modo:

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

El subtítulo de la anotación se leería "Distancia: 50m", por ejemplo.

Respondida el 22/02/2011 a las 02:37
fuente por usuario

votos
0

Esto es Swift 3 equivalentes de la respuesta dada:

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)
Respondida el 10/11/2016 a las 19:21
fuente por usuario

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