64 votes

Comment vérifier que CLLocationCoordinate2D n'est pas vide?

Comment vérifier que CLLocationCoordinate2D n'est pas vide?

143voto

Rick van der Linde Points 860

Un sujet très ancien, mais j'en avais besoin maintenant et j'ai résolu mon problème avec l'aide de Klaas Hermanns, avec un petit changement.

Au lieu de

if( myCoordinate ==  kCLLocationCoordinate2DInvalid ) {
  NSLog(@"Coordonnée invalide");
}

J'ai dû utiliser

if (CLLocationCoordinate2DIsValid(myCoordinate)) {
  NSLog("Coordonnée valide");
} else {
  NSLog("Coordonnée invalide");
}

Peut-être que cela aidera quelqu'un d'autre :)

Éditer :

Comme cela a été souligné, l'initialisation, comme expliqué dans le message de Klaas, est toujours nécessaire.

8 votes

Pour que cela fonctionne, les coordonnées doivent être initialisées à kCLLocationCoordinate2DInvalid sinon les coordonnées 0,0 seront valides.

3 votes

@malcolmhall les coordonnées (0,0) sont en fait des coordonnées valides. Dire qu'elles sont invalides pourrait induire en erreur certains développeurs. Cependant, cela se produit généralement en raison d'une erreur conduisant aux coordonnées (0,0). Par exemple, [anNSNumber floatValue] renverra 0 si l'instance est nulle. Mais comme il n'y a rien d'intéressant à (0,0), la plupart des programmeurs sont prêts à le marquer comme invalide pour identifier ces erreurs.

0 votes

La fonction tient-elle également compte du fait que la latitude doit être un nombre compris entre -90 et 90 et la longitude entre -180 et 180?

60voto

Klaas Points 2995

Vous pouvez utiliser la constante kCLLocationCoordinate2DInvalid déclarée dans CLLocation.h

Initialisez votre variable avec

CLLocationCoordinate2D myCoordinate = kCLLocationCoordinate2DInvalid;

et vérifiez-la ultérieurement avec:

if( myCoordinate ==  kCLLocationCoordinate2DInvalid ) {
  NSLog(@"Coordonnée invalide");
}

Ajout:

Parfois, cela semble être une solution encore meilleure (comme mentionné par Rick van der Linde dans une autre réponse):

if (CLLocationCoordinate2DIsValid(myCoordinate)) {
    NSLog(@"Coordonnée valide");
} else {
    NSLog(@"Coordonnée invalide");
}

Ajout pour Swift:

Vous pouvez faire de même en Swift comme illustré ici:

let myCoordinate = kCLLocationCoordinate2DInvalid

if CLLocationCoordinate2DIsValid(myCoordinate) {
    println("Coordonnée valide")
} else {
    println("Coordonnée invalide")
}

9voto

joerick Points 6215
if ( coordonnée.latitude != 0 && coordonnée.longitude != 0 )
{
    ....
}

8 votes

Haha, point pris. Bien qu'ils devraient être des doubles comparaisons, donc en théorie nous pourrions nous rapprocher à 2^-1074 de zéro avant d'oublier par erreur qu'ils existent...

1 votes

La latitude et la longitude sont des doubles. Ne jamais évaluer un double avec une comparaison d'égalité.

1 votes

Il n'y a rien de mal à vérifier si c'est zéro, car la question demande comment vérifier s'il est vide.

0voto

elgawady14 Points 22
func isCoordinateValid(latitude: CLLocationDegrees, longitude: CLLocationDegrees) -> Bool {
    guard latitude != 0, longitude != 0, CLLocationCoordinate2DIsValid(CLLocationCoordinate2D(latitude: latitude, longitude: longitude)) else {
        return false
    }
    return true
}

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