2011-10-15 44 views
11

Tôi có hai UITextFields mà người dùng có thể nhập vào vĩ độ và kinh độ, các tọa độ này sau đó được sử dụng để tạo một ghim trên MKMapView.Cách xác thực vĩ ​​độ và kinh độ

Tôi muốn tìm cách xác thực xem các giá trị họ nhập có là tọa độ GPS thực hay chỉ là tải rác. Có cách nào để làm điều này không?

Trả lời

38

Các latitude phải là một số giữa -90 và 90 và longitude giữa -180 và 180.

+2

Tuyệt vời, điều này có đúng không? – Pacerier

+1

Câu trả lời có giải thích, http://stackoverflow.com/a/6536279/368691. Có, đó là câu trả lời đúng. Tuy nhiên, điều này giả định đất và biển. – Gajus

+2

Chúng ta có nên bao gồm biên giới? (long> = -180 && long <= 180) hoặc (long> -180 && long <180)? – Mehmed

0

Tôi muốn làm điều gì đó như thế này

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 
} 
-1
CLLocationCoordinate2D p1; 
     p1.latitude = [[punto latitud] doubleValue]; 
     p1.longitude = [[punto longitud] doubleValue]; 
     if (CLLocationCoordinate2DIsValid(p1)) 
     { 
      [Mapa addAnnotation:annotationPoint]; 
     } 
+3

Câu trả lời này nằm trong hàng đợi đánh giá Bài viết có chất lượng thấp vì nó chỉ là mã không có lời giải thích. Vui lòng cải thiện câu trả lời của bạn bằng cách giải thích mã của bạn làm gì và cách nó trả lời câu hỏi. Vui lòng đọc [lời khuyên này để trả lời các câu hỏi lập trình một cách hữu ích] (http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx). –

3

Sử dụng vĩ độ và kinh độ tiếp theo biểu thức chính quy, chúng tôi có thể xác thực.

Với nhân vật thoát trong 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})?))$" 

Bình thường biểu thức chính quy cho Cả hai vĩ độ & kinh độ:

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})?))$ 
0

Sau khi đi qua rất nhiều câu hỏi StackOverflow, tôi nghĩ câu hỏi này đã được hỏi một cách đơn giản và dễ hiểu mà mô tả những gì tôi đang tìm kiếm trong việc giải quyết vĩ độ của tôi/kinh độ xác thực cho AMZO:A Global Map Based Station for Reporting Aliens, Monsters, Zombies and Other Interesting Events (ứng dụng iPhone/iPad). Shameless, tôi biết, nhưng tôi nghĩ rằng tôi xứng đáng với nó cho đến với một câu trả lời hoàn chỉnh và thanh lịch/giải pháp (thích ứng với câu trả lời ngắn gọn của Craig ở trên)!

Tôi đang sử dụng AlertController mới, cuộc gọi này sẽ gọi mỗi xác thực sau đây cho các đầu vào văn bản kinh độ và vĩ độ.

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

} 
Các vấn đề liên quan