如何验证经度和纬度

时间:2011-10-15 22:08:06

标签: iphone gps mkmapview coordinates mkannotation

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

我想找到一种方法来验证他们输入的值是实际的GPS坐标还是只是一堆垃圾。有没有办法做到这一点?

7 个答案:

答案 0 :(得分:69)

latitude必须是-90到90之间的数字,而longitude必须介于-180到180之间。

答案 1 :(得分:4)

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

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

Latitude RegEx:

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

经度RegEx:

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

纬度和纬度的正常正则表达式经度:

Latitude RegEx:

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

经度RegEx:

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

答案 2 :(得分:3)

以下是在JavaScript中对其进行验证的功能。

  1. 纬度必须为-90到90之间的数字
<button (click)="onDeleteSelected()" [disabled] = "mflagDisableMoveTo.value.value"> Delete selected </button>
  1. 经度必须在-180到180之间的数字
const isLatitude = num => isFinite(num) && Math.abs(num) <= 90;

答案 3 :(得分:0)

我会做这样的事情

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
}

答案 4 :(得分:0)

在经历了很多StackOverflow问题之后,我认为这个问题是以一种简单直接的方式提出的,它描述了我在寻找AMZO:A Global Map Based Station for Reporting Aliens, Monsters, Zombies and Other Interesting Events(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;

 }

答案 5 :(得分:0)

在Kotlin中,我们可以执行以下操作:

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

答案 6 :(得分:-1)

CLLocationCoordinate2D p1;
        p1.latitude  = [[punto latitud] doubleValue];
        p1.longitude = [[punto longitud] doubleValue];
        if (CLLocationCoordinate2DIsValid(p1))
        {
            [Mapa addAnnotation:annotationPoint];
        }