50 votes

distanceFromLocation - Calculer la distance entre deux points

Juste une petite question sur Core Location, j'essaie de calculer la distance entre deux points, le code est ci-dessous :

    -(void)locationChange:(CLLocation *)newLocation:(CLLocation *)oldLocation
    {   

    // Configure the new event with information from the location.
        CLLocationCoordinate2D newCoordinate = [newLocation coordinate];
        CLLocationCoordinate2D oldCoordinate = [oldLocation coordinate];

        CLLocationDistance kilometers = [newCoordinate distanceFromLocation:oldCoordinate] / 1000; // Error ocurring here.
        CLLocationDistance meters = [newCoordinate distanceFromLocation:oldCoordinate]; // Error ocurring here.
}

J'obtiens l'erreur suivante sur les deux dernières lignes :

error : cannot convert to a pointer type

J'ai fait des recherches sur Google, mais je ne trouve rien.

114voto

deanWombourne Points 26066

Essayez plutôt ceci :

CLLocationDistance meters = [newLocation distanceFromLocation:oldLocation];

La méthode que vous essayez d'utiliser est une méthode sur un fichier CLLocation objet :)

11 votes

Et aussi garder à l'esprit "Cette méthode mesure la distance entre les deux endroits en traçant une ligne entre eux qui suit la courbure de la Terre" documents de pomme. Donc cela ne donnera pas la distance par la route.

1 votes

Comment trouver la distance par la route ? @deanWombourne

0 votes

@AnkitSrivastava Comment puis-je trouver la distance par la route ?

22voto

Atulkumar V. Jain Points 2752

La distance est calculée entre 2 CLLocations et non entre deux coordonnées.

Vous devez utiliser ces coordonnées pour obtenir les CLLocations pour les coordonnées respectives en utilisant la ligne de code suivante

CLLocation *newLocation = [[CLLocation alloc] initWithCoordinate: newCoordinate altitude:1 horizontalAccuracy:1 verticalAccuracy:-1 timestamp:nil];

De même pour l'autre coordonnée, puis vous pouvez calculer la distance entre ces deux endroits en utilisant la ligne de code suivante

CLLocationDistance kilometers = [newLocation distanceFromLocation:oldLocation] / 1000;

J'espère que cela vous aidera.

Mise à jour : Swift 3.0

let distanceKiloMeters = (newLocation.distance(from: oldLocation))/1000

11voto

En Swift

Créons une fonction méthode qui calcule la distance entre deux endroits :

 func distanceBetweenTwoLocations(source:CLLocation,destination:CLLocation) -> Double{

        var distanceMeters = source.distanceFromLocation(destination)
        var distanceKM = distanceMeters / 1000
        let roundedTwoDigit = distanceKM.roundedTwoDigit
        return roundedTwoDigit

    }

Si vous ne voulez que deux chiffres :

extension Double{

    var roundedTwoDigit:Double{

        return Double(round(100*self)/100)

        }
    }

5voto

Max Alexander Points 776

Si vous voulez utiliser 2 valeurs CLLocationCoordinate2D, vous pouvez utiliser ceci.

Il s'agit de Swift 2.1 sur Xcode 7.1.

import CoreLocation

extension CLLocationCoordinate2D {

    func distanceInMetersFrom(otherCoord : CLLocationCoordinate2D) -> CLLocationDistance {
        let firstLoc = CLLocation(latitude: self.latitude, longitude: self.longitude)
        let secondLoc = CLLocation(latitude: otherCoord.latitude, longitude: otherCoord.longitude)
        return firstLoc.distanceFromLocation(secondLoc)
    }

}

4voto

Pawel Points 2919

Le problème ici est que vous appelez un objet méthode :

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

de la classe CLLocation.

CLLocationCoordinate2D est en fait une structure, constituée de deux doubles :

typedef struct
{
    CLLocationDegrees latitude;
    CLLocationDegrees longitude;
} CLLocationCoordinate2D;

La bonne façon de procéder est d'obtenir un CLLocation et appeler distanceFromLocation sur elle. Comme ça :

CLLocation* newLocation;
CLLocation* oldLocation;
CLLocationDistance distance = [newLocation distanceFromLocation:oldLocation];

Bien sûr, vous devez d'abord initialiser ces deux valeurs (à partir de CLLocationManager par exemple).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X