国際宇宙ステーションの位置をAndroidアプリで表示してみる

2023年9月15日

分かりづらいですが、中央にISSがいる地図表示です

ネットニュースで今日何時頃、国際宇宙ステーション(以降、ISS)が見えますという記事を見ますが、忘れたり、思ったように見れなかったりします。そこで、Android地図アプリケーションISSの位置を反映させてみました。これなら事前に待機できそうです。

1.ISSの位置を取得する

ISSの位置取得ですが、上記のサイトで取得できます。用意されたAPIHTTPアクセスすると、JSON形式ISS位置情報を返してくれます。

しかしながら、URLが"http"のままで、保護されていない通信です。そのため、アプリケーション側もセキュリティチェックを外す必要があり、現在提供しているアプリケーションに組み込むのはやめます。そこで、公開予定のない「北海道周辺マップ」という自作アプリケーションに取り込んでみました。

2.プログラム

申し訳ありませんが、Javaソースです。KotlinChatGPTなどを使えば取得できるでしょう。

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化してくれれば、アプリケーションに組み込みたいと思います。しかしながら、ISS2020年代いっぱいの運用で終わりそうです。日本の宇宙開発は、この先どうなるのでしょうか。個人的には、今の「きぼう」のような宇宙実験室は続けて持って欲しいと思います。今後に期待です。