2016-07-06 9 views
3

私は、緯度/経度をUTM coordinatesに解決するのに多くの時間を費やすAndroidアプリを開発中です。これは、ドン物事の恐ろしく非効率的な方法であると思わ働く一方でUTMゾーンの手紙を確立するための私の現在のコードは、この複数のif..elseifステートメントを避ける

if (Lat<-72) Letter='C'; 
else if (Lat<-64) Letter='D'; 
else if (Lat<-56) Letter='E'; 
else if (Lat<-48) Letter='F'; 
else if (Lat<-40) Letter='G'; 
else if (Lat<-32) Letter='H'; 
else if (Lat<-24) Letter='J'; 
else if (Lat<-16) Letter='K'; 
else if (Lat<-8) Letter='L'; 
else if (Lat<0) Letter='M'; 
else if (Lat<8) Letter='N'; 
else if (Lat<16) Letter='P'; 
else if (Lat<24) Letter='Q'; 
else if (Lat<32) Letter='R'; 
else if (Lat<40) Letter='S'; 
else if (Lat<48) Letter='T'; 
else if (Lat<56) Letter='U'; 
else if (Lat<64) Letter='V'; 
else if (Lat<72) Letter='W'; 
else Letter='X'; 

のようになります。私のユーザーのほとんどはZone Uに入ります。これは、正しいゾーン文字を設定する前に、アプリケーションが1636の失敗したテストを実行していることを意味します。

if..elseifsの順番を調整して簡単に設定できますか?本当ですが、これを行うにはよりクリーンな方法が必要であると考えることを助けることはできません。私はまだJavaの初心者の何かですので、HashMapsなどで実験していますが、私は多くの進歩を遂げていません。

より洗練されたアプローチが可能ですか?

一部クランプと、おそらく
+1

これはボトルネックであることが分かっていない限り、アプリケーションが実行している他のものと比較して16のelse-ifsが非常に安い可能性があります。私はあなたのソリューションの可読性と保守性について心配しています。 @AndyTurnerは両方の問題に対処する答えを提案した。 – majk

+1

とは無関係:Java命名規則では、変数名を小文字の小文字の小文字の小文字の最初の文字で記述することが示唆されています。 [Oracle Webサイトに関する詳細情報](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html) – jhamon

+1

編集内容は元のコードと同じです。 'lat'が-75の場合、 'C'ではなく 'X'を返します。私はあなたが望んでいたか分からないが、チェックする価値がある。私は編集が「C」を返すとは思わない。 – Holloway

答えて

8
char Letter = "CDEFGHJKLMNPQRSTUVWX".charAt((int)((Lat + 80)/8); 

(UTMがこの範囲外で定義されていないので、例外がスローされる代替)Latが適切な範囲内にあることを確実にする。代わって

ClampedLat = Math.min(Math.max(Lat, -80), 84); 
0

(投稿回答質問の著者の。説明はここではオーダーである

public static char testIt(double lat) 
{ 
return "CCCDEFGHJKLMNPQRSTUVWXXX".charAt((int)(Math.ceil((lat + 90)/ 8))); 
} 

:私はこれをやってしまった回答@AndyTurnerに基づいて、この問題に実行している他の誰の利益のために

  • は90の性を保証を追加します
  • -72度以下では、ゾーン文字は常にCで72度以上では常にですX. if..テストでこれらの問題を処理するのではなく、必要に応じて余分なCsとXsをパディングして、両端のゾーン文字範囲を人工的に拡張するだけです。

結果の妥当性をチェックするための便利なグラフィカルリファレンスはUTM grid chartです。私は自分のテストをコード化しましたhere

関連する問題