• Tensim EOP API を Go へ移行と地球のアップデート

    Tensim のバックエンドで動いている EOP API を Ruby on Rails 製から Go 製に作り直した(*´ェ`)

    EOP API は指定時刻の地球姿勢パラメータ(EOP)を返すだけの API なので、Rails だと少し大げさだったかなと思っていた(*´ェ`)

    rake タスクでやっていた EOP データの変換や取り込みは eopctl というコマンドにまとめた(*´ェ`)


    IERS から finals2000A.all をダウンロードして取り込むところまで eopctl fetch 一発でできるようになった(*゚ェ゚*)

    コンテナイメージも Ruby と bundle install が要らなくなったので、Go でビルドしたバイナリを Alpine に置くだけになった(*゚ェ゚*)
    Ruby と Rails のバージョンアップのたびに手間取っていたので気が楽になった(*゚ェ゚*)

    ついでにうるう秒の日もちゃんと扱えるようにした(*´ェ`)

    23:59:60 を受け付けて、UT1−UTC が翌日に 1 秒跳ぶ分を除いて補間している(*゚ェ゚*) ただ2027年からうるう秒は挿入されなくなるので、うるう秒の表はもう更新しなくてよさそう(*´ェ`)

    それから Tensim の地球の地表画像もアップデートした(*´ェ`)

    NASA が公開している Blue Marble Next Generation などの画像を使っている(*゚ェ゚*)

    • 昼の画像は 1月〜12月の 12枚を用意して、日付に合わせて前後の月をブレンド
    • 夜の街の明かりは Black Marble 2016
    • 標高データ(GEBCO)から作られた画像を元に山や谷の凸凹の陰影をつけた
    • 端末に合わせて 8192 と 4096 の 2種類の解像度を使い分け
    • ズームしたときは元画像の解像度のまま 8×4 に分割したタイル画像に切り替え

    季節によって雪や植物の色が変わるのが見られる(*´ェ`)

    元画像は GeoTIFF で 2億画素以上あるので、sharp で WebP に変換している(*゚ェ゚*)
    それでも全部で 200MB くらいになったので、画像は Git の管理外にして外部のホストに置くようにした(*´ェ`)

  • 太陽と地球の関係を理解しやすくするWebアプリの進捗状況

    8割方できた(*´ェ`)

    2019年4月1日21時0分0秒JSTの地球の様子をブラウザでシミュレートしてみる(*´ェ`)

    ブラウザで現在時刻をUTCで取得、APIに問い合わせ指定時刻の地球の傾きや回転、太陽の地心座標などを取得、結果をWebGLで描写する(*゚ェ゚*)

    地球の様子

    Day Night Map

    API(Go製)はEOPを取得する為のAPI(RoR製)に問い合わせ、その結果を元に
    以下のような結果が返ってくるプログラム(C言語)を作成した(*´ェ`)

    
    UTC: 2019/04/01 12:00:00.000000
    UT1: 2019/04/01 11:59:59.880856
    TAI: 2019/04/01 12:00:37.000000
    TT: 2019/04/01 12:01:09.184000
    TCG: 2019/04/01 12:01:10.113142
    TDB: 2019/04/01 12:01:09.185672
    TCB: 2019/04/01 12:01:29.857194
    (TAI-UTC): 37s
    (TT-UTC): 69.184s
    DUT1: -0.119144s
    GAST: 9.556986
    GMST: 9.561109
    EE: -0.000072
    EO: -0.242480
    ERA: 9.314506
    NL: -16.182279
    NO: -2.939230
    MOE: 23.436775
    TOE: 23.435959
    .
    .
    .
    

    この結果をAPI(Go製)側でパースしてブラウザ側に返している(*´ェ`)

    
    {
      "em": 0.99922431958942692,
      "gast": 9.5569856385418888,
      "gmst": 9.5611092065398857,
      "toe": 23.435958905709278,
      "sun": {
        "ra": 10.547232111832226,
        "dec": 4.5367110362474303,
        "lon": 11.471388099207983,
        "lat": -5.6459338108005382e-05
      }
    }
    

    ブラウザ側はVueとthree.jsを使用してTypescriptで書いている(*゚ェ゚*)

    そのうちNuxt.jsで作り直すかもしれない(*´ェ`)

    ブルーマーブルの画像
    Credit: NASA Goddard Space Flight Center Image by Reto Stöckli (land surface, shallow water, clouds). Enhancements by Robert Simmon (ocean color, compositing, 3D globes, animation). Data and technical support: MODIS Land Group; MODIS Science Data Support Team; MODIS Atmosphere Group; MODIS Ocean Group Additional data: USGS EROS Data Center (topography); USGS Terrestrial Remote Sensing Flagstaff Field Center (Antarctica); Defense Meteorological Satellite Program (city lights).
    地球の街の灯画像
    Credit: Data courtesy Marc Imhoff of NASA GSFC and Christopher Elvidge of NOAA NGDC. Image by Craig Mayhew and Robert Simmon, NASA GSFC.