web-dev-qa-db-ja.com

緯度と経度を検証する方法

ユーザーが緯度と経度を入力できる2つのUITextFieldがあります。これらの座標を使用して、MKMapViewにピンを作成します。

入力した値が実際のGPS座標なのか、それとも大量のゴミなのかを検証する方法を見つけたいのです。これを行う方法はありますか?

28
The Crazy Chimp

緯度 は-90から90の間の数値で、 経度 は-180から180の間の数値でなければなりません。

75
rid

緯度と経度の正規表現に従うことで、検証できます。

Objective-Cのエスケープ文字:

Latitude RegEx:

@"^(\\+|-)?((\\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})?))$"

緯度と経度の両方の通常の正規表現:

Latitude RegEx:

^(\+|-)?((\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})?))$
4
abhi

私はこのようなことをします

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
Craig

Kotlinでは、次のようなことができます。

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

StackOverflowに関する多くの質問を行った後、この質問は単純で簡単な方法で尋ねられると思いました。これは、緯度/経度の検証を解決するために私が探していたものを説明するものです AMZO:エイリアンを報告するグローバルマップベースのステーション、モンスター、ゾンビ、その他の興味深いイベント (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;

 }
0
Jim Rota