Geolocation 如何验证纬度和经度

Geolocation 如何验证纬度和经度,geolocation,gps,coordinates,mkmapview,mkannotation,Geolocation,Gps,Coordinates,Mkmapview,Mkannotation,我有两个UITextField,用户可以输入纬度和经度,然后使用这些坐标在MKMapView上创建pin 我想找到一种方法来验证他们输入的值是实际的GPS坐标还是一堆垃圾。有什么办法吗?必须是一个介于-90和90之间的数字,以及介于-180和180之间的数字。我会这样做 numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]

我有两个UITextField,用户可以输入纬度和经度,然后使用这些坐标在MKMapView上创建pin


我想找到一种方法来验证他们输入的值是实际的GPS坐标还是一堆垃圾。有什么办法吗?

必须是一个介于-90和90之间的数字,以及介于-180和180之间的数字。

我会这样做

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
}

使用跟随纬度和经度正则表达式,我们可以验证

在Objective-C中使用转义字符:

纬度正则表达式:

@"^(\\+|-)?((\\d((\\.)|\\.\\d{1,6})?)|(0*?[0-8]\\d((\\.)|\\.\\d{1,6})?)|(0*?90((\\.)|\\.0{1,6})?))$"
@"^(\\+|-)?((\\d((\\.)|\\.\\d{1,6})?)|(0*?\\d\\d((\\.)|\\.\\d{1,6})?)|(0*?1[0-7]\\d((\\.)|\\.\\d{1,6})?)|(0*?180((\\.)|\\.0{1,6})?))$"
^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?[0-8]\d((\.)|\.\d{1,6})?)|(0*?90((\.)|\.0{1,6})?))$
^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?\d\d((\.)|\.\d{1,6})?)|(0*?1[0-7]\d((\.)|\.\d{1,6})?)|(0*?180((\.)|\.0{1,6})?))$
经度正则表达式:

@"^(\\+|-)?((\\d((\\.)|\\.\\d{1,6})?)|(0*?[0-8]\\d((\\.)|\\.\\d{1,6})?)|(0*?90((\\.)|\\.0{1,6})?))$"
@"^(\\+|-)?((\\d((\\.)|\\.\\d{1,6})?)|(0*?\\d\\d((\\.)|\\.\\d{1,6})?)|(0*?1[0-7]\\d((\\.)|\\.\\d{1,6})?)|(0*?180((\\.)|\\.0{1,6})?))$"
^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?[0-8]\d((\.)|\.\d{1,6})?)|(0*?90((\.)|\.0{1,6})?))$
^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?\d\d((\.)|\.\d{1,6})?)|(0*?1[0-7]\d((\.)|\.\d{1,6})?)|(0*?180((\.)|\.0{1,6})?))$
纬度和经度的常规正则表达式:

纬度正则表达式:

@"^(\\+|-)?((\\d((\\.)|\\.\\d{1,6})?)|(0*?[0-8]\\d((\\.)|\\.\\d{1,6})?)|(0*?90((\\.)|\\.0{1,6})?))$"
@"^(\\+|-)?((\\d((\\.)|\\.\\d{1,6})?)|(0*?\\d\\d((\\.)|\\.\\d{1,6})?)|(0*?1[0-7]\\d((\\.)|\\.\\d{1,6})?)|(0*?180((\\.)|\\.0{1,6})?))$"
^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?[0-8]\d((\.)|\.\d{1,6})?)|(0*?90((\.)|\.0{1,6})?))$
^(\+|-)?((\d((\.)|\.\d{1,6})?)|(0*?\d\d((\.)|\.\d{1,6})?)|(0*?1[0-7]\d((\.)|\.\d{1,6})?)|(0*?180((\.)|\.0{1,6})?))$
经度正则表达式:

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

在经历了大量的StackOverflow问题之后,我认为这个问题是以一种简单而直接的方式提出的,它描述了我在解决(iPhone/iPad应用程序)的纬度/经度验证时所寻找的东西。不知羞耻,我知道,但我认为我应该得到它,因为我提出了一个完整而优雅的答案/解决方案(改编了上面克雷格的简短回答)

我正在使用新的AlertController,它为纬度和经度文本输入调用以下每个验证

 - (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;

 }
-(BOOL)validateInput1:(NSString*)纬度
{
NSNumberFormatter*numberFormatter=[[NSNumberFormatter alloc]init];
[NumberFormatterSetNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber*latitude1=[numberFormatter numberFromString:latitude];
如果(纬度1!=零)
{
//检查它是否在横向/纵向范围内
如果((latitude1.floatValue>-90.0)和&(latitude1.floatValue<90.0)){
NSLog(@“你好,纬度!!!”);
返回1;
}
}否则{
//甚至不是一个有效的数字,拒绝它
返回0;
}
返回0;
}
-(BOOL)validateInput2:(NSString*)经度
{
NSNumberFormatter*numberFormatter=[[NSNumberFormatter alloc]init];
[NumberFormatterSetNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber*longitude1=[numberFormatter numberFromString:longitude];
if(longitude1!=nil)
{
//检查它是否在横向/纵向范围内
如果((longitude1.floatValue>-180.0)和&(longitude1.floatValue<180.0)){
NSLog(@“你好!!!”);
返回1;
}
}否则{
//甚至不是一个有效的数字,拒绝它
返回0;
}
返回0;
}

在科特林,我们可以这样做:

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

以下是在JavaScript中验证它的函数。

  • 纬度必须是介于-90和90之间的数字

  • const isLatitude=num=>isFinite(num)和&Math.abs(num)isFinite(num)和&Math.abs(num)一个带解释的答案。是的,这是正确的答案。然而,这假设了陆地和海洋。我们应该包括边界吗?(long>=-180&&long-180&&long<180)?@Mehmed否。它应该是(long>-180&&long<180)和(lat>-90&&lat<90)。@SahilSharma这有什么原因吗?如果其中一个坐标恰好位于某个极端(例如:)会发生什么情况?是的,包括边界,但请理解经度,-180和180是同一点。对于纬度,90是地理北极,-90是地理南极。这个答案在低质量的帖子评论队列中,因为它只是没有解释的代码。请通过解释代码的作用以及如何回答问题来改进您的答案。请阅读。我不知道这在被接受的答案上实现了什么(而不是使事情复杂化)