/ / Comment valider latitude et longitude - iphone, gps, mkmapview, coordonnées, mkannotation

Comment valider la latitude et la longitude - iphone, gps, mkmapview, coordonnées, mkannotation

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 épingle sur un MKMapView.

Je veux trouver un moyen de valider si les valeurs entrées sont des coordonnées GPS réelles ou juste une charge de déchets. Y a-t-il une manière de faire ça?

Réponses:

46 pour la réponse № 1

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


4 pour la réponse № 2

En utilisant les expressions rationnelles de latitude et longitude, 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 les deux latitude et 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*?dd((.)|.d{1,6})?)|(0*?1[0-7]d((.)|.d{1,6})?)|(0*?180((.)|.0{1,6})?))$

0 pour la réponse № 3

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 pour la réponse № 4

Après avoir traversé beaucoup de StackOverflowquestions, je pensais que cette question avait été posée de manière simple et directe et décrivait ce que je cherchais pour résoudre ma validation de latitude / longitude pour AMZO: une station cartographique mondiale pour signaler des extraterrestres, des monstres, des zombies et d'autres événements intéressants (application iPhone / iPad). Sans vergogne, je sais, mais je pense le mériter pour avoir proposé une réponse / solution complète et élégante (en adaptant la réponse brève 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;

}

-1 pour la réponse № 5
CLLocationCoordinate2D p1;
p1.latitude  = [[punto latitud] doubleValue];
p1.longitude = [[punto longitud] doubleValue];
if (CLLocationCoordinate2DIsValid(p1))
{
[Mapa addAnnotation:annotationPoint];
}