国際宇宙ステーションの位置をAndroidアプリで表示してみる
ネットニュースで今日何時頃、国際宇宙ステーション(以降、ISS)が見えますという記事を見ますが、忘れたり、思ったように見れなかったりします。そこで、Android地図アプリケーションにISSの位置を反映させてみました。これなら事前に待機できそうです。
1.ISSの位置を取得する
ISSの位置取得ですが、上記のサイトで取得できます。用意されたAPIをHTTPでアクセスすると、JSON形式でISSの位置情報を返してくれます。
しかしながら、URLが"http"のままで、保護されていない通信です。そのため、アプリケーション側もセキュリティチェックを外す必要があり、現在提供しているアプリケーションに組み込むのはやめます。そこで、公開予定のない「北海道周辺マップ」という自作アプリケーションに取り込んでみました。
2.プログラム
申し訳ありませんが、Javaソースです。KotlinもChatGPTなどを使えば取得できるでしょう。
urlに"http://api.open-notify.org/iss-now.json“を渡します。
private String mISSLatitude ; // 国際宇宙ステーション緯度
private String mISSLongitude ; // 国際宇宙ステーション経度
public void Get_Iss_Position(String url) throws IOException {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
client.newCall(request)
.enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
mISSLatitude = "EEEEE" ;
mISSLongitude = "EEEEE" ;
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
final String jsonStr = response.body().string();
try{
JSONObject json = new JSONObject(jsonStr);
final String wISSPosition = json.getString("iss_position");
json = new JSONObject(wISSPosition);
mISSLatitude = json.getString("latitude");
mISSLongitude = json.getString("longitude");
Handler mainHandler = new Handler(Looper.getMainLooper());
mainHandler.post(new Runnable() {
@Override
public void run() {
myDraw() ; // アプリに用意した描画関数
}
});
}catch(Exception e){
mISSLatitude = "EEEEE2" ;
mISSLongitude = "EEEEE2" ;
}
}
});
}
ISS位置取得の関数だけのソースです。取得できるのは緯度・経度ですから、これをosmdroidライブラリを使って地図表示します。
また、OkHttpClientを使っているので、build.gradleに
implementation 'com.squareup.okhttp3:okhttp:4.9.0' // 適度、最新バージョンにしてください
を加えておいてください。
3.https化して欲しいけれどISSもそう長くはない
ISSの位置取得がhttps化してくれれば、アプリケーションに組み込みたいと思います。しかしながら、ISSも2020年代いっぱいの運用で終わりそうです。日本の宇宙開発は、この先どうなるのでしょうか。個人的には、今の「きぼう」のような宇宙実験室は続けて持って欲しいと思います。今後に期待です。