Comment calculer la distance entre deux endroits? Existe-t-il un service disponible sur Google Map pour iphone?

StackOverflow https://stackoverflow.com/questions/1643138

  •  10-07-2019
  •  | 
  •  

Question

Je souhaite mettre en place une fonctionnalité permettant d'afficher la distance entre deux lieux sélectionnés par l'utilisateur.

Existe-t-il un exemple de code source / service disponible pour le faire?

Merci d'avance.

Était-ce utile?

La solution

Le CoreLocation Framework permet de calculer 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

Autres conseils

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

[location1 getDistanceFrom:location2];

Cependant, ce n’est que point à point. Si vous voulez la distance sur un itinéraire spécifique, eh bien, c’est tout un tas de poissons.

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

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

méthode.

Je ne connais pas bien le développement d'un iPhone, mais voici le code C # permettant de calculer la distance entre deux points à l'aide de 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;

}

L'unité MeasurementUnit est définie comme suit:

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

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

Si vous souhaitez toujours utiliser la distance dans les airs, utilisez Core Location.

- (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. Utilisation la distance de l'emplacement:

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top