2009-10-29 10 views

Répondre

12

Le CoreLocation Framework offre la possibilité de travailler sur la distance, en mètres, entre deux points:

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

Vous pouvez initialiser un objet CLLocation avec la latitude et la longitude:

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

... Son? – Rambo

2

Ceci est une tâche pour le framework CLLocation. Avec des coordonnées connues de 2 points que vous pouvez créer (si vous ne les avez pas déjà) 2 objets CLLocation et de trouver une distance entre eux en utilisant la méthode

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

.

3

Si vous avez deux objets CLLocation, vous pouvez juste faire:

[location1 getDistanceFrom:location2]; 

Cependant, c'est point à point juste. Si vous voulez la distance par rapport à un itinéraire précis, eh bien, c'est une autre marmite de poisson.

2

Je ne suis pas familier avec le développement de l'iPhone, mais voici le code C# pour calculer la distance entre deux points en utilisant la formule de 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; 

} 

Le MeasurementUnit est défini comme:

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

Merci vbocan pour votre réponse – Rambo

0

Cela dépend de quel type de différence que vous voulez avoir entre les deux points. Sur la carte, je pense que vous ne voulez pas la distance aérienne. Ensuite, vous devriez vérifier http://iosboilerplate.com/

Si vous voulez toujours utiliser la distance de l'air, utilisez Core Location.

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

Renvoie la distance (en mètres) entre l'emplacement du destinataire et l'emplacement spécifié. (Obsolète dans iOS 3.2 Utilisez le distanceFromLocation.

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