2009-10-29 13 views

Respuesta

12

El CoreLocation Framework proporciona la capacidad para calcular la distancia, en metros, entre dos puntos:

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location 

Puede inicializar un objeto CLLocation con la latitud y longitud:

- (id)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude 
+0

Gracias ... Su? útil. – Rambo

2

Esta es una tarea para CLLocation framework. Con coordenadas conocidas de 2 puntos que se pueden crear (si no los tiene ya) 2 objetos CLLocation y encontrar una distancia entre ellos utilizando el método

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location 

.

3

Si tiene dos objetos CLLocation, sólo se puede hacer:

[location1 getDistanceFrom:location2]; 

Sin embargo, eso es sólo punto a punto. Si quieres la distancia sobre una ruta específica, bueno, esa es una olla entera de peces.

2

no soy familiar con el desarrollo de iPhone, pero aquí está el código C# para calcular la distancia entre dos puntos usando la fórmula Haversine:

/// <summary> 
/// Computes the distance beween two points 
/// </summary> 
/// <param name="P1_Latitude">Latitude of first point (in radians).</param> 
/// <param name="P1_Longitude">Longitude of first point(in radians).</param> 
/// <param name="P2_Latitude">Latitude of second point (in radians).</param> 
/// <param name="P2_Longitude">Longitude of second point (in radians).</param> 
protected double ComputeDistance(double P1_Longitude, double P1_Latitude, double P2_Longitude, double P2_Latitude, MeasurementUnit unit) 
{    
    double dLon = P1_Longitude - P2_Longitude; 
    double dLat = P1_Latitude - P2_Latitude; 

    double a = Math.Pow(Math.Sin(dLat/2.0), 2) + 
      Math.Cos(P1_Latitude) * 
      Math.Cos(P2_Latitude) * 
      Math.Pow(Math.Sin(dLon/2.0), 2.0); 

    double c = 2 * Math.Asin(Math.Min(1.0, Math.Sqrt(a))); 
    double d = (unit == MeasurementUnit.Miles ? 3956 : 6367) * c; 
    return d; 

} 

El MeasurementUnit se define como:

/// <summary> 
/// Measurement units 
/// </summary> 
public enum MeasurementUnit 
{ 
    Miles, 
    Kilometers 
} 
+0

Gracias vbocan por su respuesta – Rambo

0

Depende de qué tipo de diferencia que usted desea tener entre ambos puntos. En el mapa, creo que no quieres la distancia aérea. Luego debe marcar http://iosboilerplate.com/

Si aún desea utilizar la distancia aérea, use Core Location.

0
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location 

Devuelve la distancia (en metros) desde la ubicación del receptor hasta la ubicación especificada. (En desuso en IOS 3.2 Utilice la distanceFromLocation:.

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location 
Cuestiones relacionadas