iphone - sacar - Cómo validar latitud y longitud.
latitud y longitud de todos los paises (5)
Tengo dos UITextFields que los usuarios pueden ingresar en latitud y longitud, estas coordenadas se utilizan para crear un pin en un MKMapView.
Quiero encontrar una manera de validar si los valores que ingresan son coordenadas reales de GPS o solo una carga de basura. ¿Hay alguna manera de hacer esto?
Después de pasar por muchas preguntas de , pensé que esta pregunta se hizo de una manera simple y directa que describía lo que estaba buscando para resolver mi validación de latitud / longitud para AMZO: una estación basada en un mapa global para reportar alienígenas, monstruos y zombis. y otros eventos interesantes (aplicación iPhone / iPad). Sin vergüenza, lo sé, pero creo que lo merezco por encontrar una solución / solución completa y elegante (adaptando la breve respuesta de Craig más arriba).
Estoy usando el nuevo AlertController que llama a cada una de las siguientes validaciones para las entradas de texto de latitud y longitud.
- (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;
}
Haría algo como esto
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
}
Usando expresiones regulares de seguimiento de latitud y longitud, podemos validar.
Con personajes de escape en Objective-C:
Latitud RegEx:
@"^(//+|-)?((//d((//.)|//.//d{1,6})?)|(0*?[0-8]//d((//.)|//.//d{1,6})?)|(0*?90((//.)|//.0{1,6})?))$"
RegEx de longitud:
@"^(//+|-)?((//d((//.)|//.//d{1,6})?)|(0*?//d//d((//.)|//.//d{1,6})?)|(0*?1[0-7]//d((//.)|//.//d{1,6})?)|(0*?180((//.)|//.0{1,6})?))$"
Expresiones regulares normales para latitud y longitud:
Latitud RegEx:
^(/+|-)?((/d((/.)|/./d{1,6})?)|(0*?[0-8]/d((/.)|/./d{1,6})?)|(0*?90((/.)|/.0{1,6})?))$
RegEx de longitud:
^(/+|-)?((/d((/.)|/./d{1,6})?)|(0*?/d/d((/.)|/./d{1,6})?)|(0*?1[0-7]/d((/.)|/./d{1,6})?)|(0*?180((/.)|/.0{1,6})?))$
CLLocationCoordinate2D p1;
p1.latitude = [[punto latitud] doubleValue];
p1.longitude = [[punto longitud] doubleValue];
if (CLLocationCoordinate2DIsValid(p1))
{
[Mapa addAnnotation:annotationPoint];
}