web-dev-qa-db-fra.com

Comment valider la latitude et la longitude

J'ai deux UITextFields que les utilisateurs peuvent entrer dans une latitude et une longitude, ces coordonnées sont ensuite utilisées pour créer une broche sur un MKMapView.

Je veux trouver un moyen de valider si les valeurs saisies sont de véritables coordonnées GPS ou simplement une charge de détritus. Y a-t-il une manière de faire ça?

28
The Crazy Chimp

Le latitude doit être un nombre compris entre -90 et 90 et le longitude entre -180 et 180.

75
rid

En utilisant les expressions régulières de latitude et longitude de suivi, nous pouvons valider.

Avec des caractères d'échappement dans Objective-C:

Latitude RegEx:

@"^(\\+|-)?((\\d((\\.)|\\.\\d{1,6})?)|(0*?[0-8]\\d((\\.)|\\.\\d{1,6})?)|(0*?90((\\.)|\\.0{1,6})?))$"

Longitude RegEx:

@"^(\\+|-)?((\\d((\\.)|\\.\\d{1,6})?)|(0*?\\d\\d((\\.)|\\.\\d{1,6})?)|(0*?1[0-7]\\d((\\.)|\\.\\d{1,6})?)|(0*?180((\\.)|\\.0{1,6})?))$"

Expressions régulières normales pour la latitude et la longitude:

Latitude RegEx:

^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?[0-8]\d((\.)|\.\d{1,6})?)|(0*?90((\.)|\.0{1,6})?))$

Longitude RegEx:

^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?\d\d((\.)|\.\d{1,6})?)|(0*?1[0-7]\d((\.)|\.\d{1,6})?)|(0*?180((\.)|\.0{1,6})?))$
4
abhi

Je ferais quelque chose comme ça

numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];  
NSNumber *latitude = [numberFormatter numberFromString:theInputString];     
if((latitude != nil) 
{
  //check it is within lat/long range
} else {
  //not even a valid number, reject it
}
0
Craig

Dans Kotlin, nous pouvons faire quelque chose comme ceci:

fun isValidLatLang(latitude: Double?, longitude: Double?): Boolean {
    return latitude?.toInt() in -90 until 90 && longitude?.toInt() in -180 until 180
}
0
Shylendra Madda

Après avoir traversé beaucoup de questions StackOverflow, j'ai pensé que cette question était posée d'une manière simple et directe qui décrivait ce que je cherchais pour résoudre ma validation de latitude/longitude pour AMZO: une station basée sur une carte mondiale pour signaler les étrangers , Monstres, zombies et autres événements intéressants (application iPhone/iPad). Sans vergogne, je sais, mais je pense que je le mérite pour avoir trouvé une réponse/solution complète et élégante (en adaptant la brève réponse de Craig ci-dessus)!

J'utilise le nouveau AlertController qui appelle chacune des validations suivantes pour les entrées de texte de latitude et de longitude.

 - (BOOL) validateInput1: (NSString *) latitude
 {
     NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
     [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
     NSNumber *latitude1 = [numberFormatter numberFromString:latitude];

     if (latitude1 != nil)

     {
         //check it is within lat/long range

         if ((latitude1.floatValue > -90.0) && (latitude1.floatValue < 90.0)) {

             NSLog(@"Hello Latitude!!!");

             return 1;
         }

     } else {

         //not even a valid number, reject it

         return 0;

     }

      return 0;

 }


 - (BOOL) validateInput2: (NSString *) longitude
 {
     NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
     [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
     NSNumber *longitude1 = [numberFormatter numberFromString:longitude];

     if (longitude1 != nil)

     {
         //check it is within lat/long range

         if ((longitude1.floatValue > -180.0) && (longitude1.floatValue < 180.0)) {

             NSLog(@"Hello Longitude!!!");

             return 1;
         }

     } else {

         //not even a valid number, reject it

         return 0;

     }

     return 0;

 }
0
Jim Rota