我正在编写一个Android应用程序,花费大量时间将纬度/经度解析为UTM坐标.我目前建立UTM区域信的代码是这样的
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';
Run Code Online (Sandbox Code Playgroud)
虽然这是有效的,但它似乎是一种非常低效的东西方式.我的大多数用户都在U区,这意味着应用程序if..elseif在建立正确的区域字母之前执行了16次失败的测试.
通过调整顺序轻松设置if..elseifs?没错,但我不得不想到必须有一个更清洁的方法来做到这一点.我仍然是一个Java新手,所以虽然已经尝试过HashMaps等,但我没有取得多大进展.
更优雅的方法可能吗?
char Letter = "CDEFGHJKLMNPQRSTUVWX".charAt((int)((Lat + 80) / 8);
Run Code Online (Sandbox Code Playgroud)
也许有一些钳位以确保Lat在合适的范围内(另一种方法是抛出异常,因为在此范围之外未定义UTM):
ClampedLat = Math.min(Math.max(Lat, -80), 84);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |