この投稿は、地震情報アプリ界隈 Advent Calendar 2021 の5日目の記事です。
4日目は、 ingen084 さんの ASP.NET Coreで簡易プロキシサーバーを作ってみる でした。
はじめに
地図を描画する際には、本来は球面である地表を平面にどう投影するかという問題に直面します。この投影の方法は地図投影法と呼ばれ、よく聞くメルカトル図法や正距方位図法など、様々な種類が存在します。
地震情報における震度分布図など、指定した経緯度の座標にマーカーをプロットしていくような地図を作る場合には、緯線と経線が直交しかつ等間隔である正距円筒図法(方眼図法)の使用が好まれます。下にある画像では、緯線と経線の間隔が等しく、直交している様子が分かると思います。
(画像リンク:Wikipedia)
しかし、この正距円筒図法には、赤道から離れるほど実際の地表面より横に間延びするという特徴があります。今回は正距円筒図法をベースとして、縦横比を変える(標準緯線を変える)ことにより、間延びする問題を解消します。
正距円筒図法の縦横比を変える
シェープファイルの読み込み
今回は、気象庁GISデータのうち、地震情報/都道府県等のデータを使います。
データは、 気象データ高度利用ポータルサイト にある 予報区等GISデータの一覧 からダウンロードできます。
ダウンロードしたshpファイルについて、ベクタレイヤの追加を行うと以下のように日本地図が出てきます。
(地図データの出典:気象庁ホームページ)
ここで、座標参照系の設定について、 プロジェクトCRS: EPSG:4326 - WGS 84
を選択します。
設定後は、ウィンドウを閉じます。
厳密には、気象庁GISデータはWGS84ではなくJGD2011を採用しています。
ここで、地図のあるウィンドウ右下を確認すると、EPSG:4326
と書いてあるのが分かります。これはEPSGコードのひとつで、世界で最も標準的な測地系のひとつであるWGS84を使用していることを意味します。
測地系の変更とProj4コードの入手
EPSGコードの表示部分をクリックすると、以下のようなウィンドウが表示されます(最近使用したCRS
の部分は各環境で異なります)。
正距円筒図法のEPSGコードは EPSG:32662
であることから、まずはこの値を使って投影しましょう。
フィルタ
欄に適当なワード(画像中では 32662
)を入れて、WGS 84 / Plate Carree
を選択します。
ここで、地図の左側にある枠内から Proj4
の部分をコピーしておきます。
なおProj4とは、それぞれ異なる測地系や投影法における相互変換を可能にしたライブラリのことです。今回はこのProj4コードを使って、投影法を変更します。
コピーしたあとはプロパティウィンドウを閉じます。
カスタム投影法の作成
地図ウィンドウの 設定
から、 カスタム投影法…
をクリックします。
ウィンドウ右上のプラスマークを押して、カスタム座標参照系の作成に入ります。
名称を適当に決めて(今回は orig_crs
)、フォーマットを Proj文字列
とします。パラメータ欄には、先ほどコピーProj4コードを貼り付けます。
ここで、パラメータの lat_ts
を変更してみましょう。これは標準緯線、すなわち正距円筒図法の基準となる緯度にあたります。序盤で、正距円筒図法は赤道から離れるほど実際の地表面より横に間延びすると説明しましたが、これはこの標準緯線が0度の場合に該当します。
今回は、東京や大阪がおおよそ位置する北緯35度を標準緯線に設定することとします。これにより、北緯35度より極に向かうと実際の地表面より間延びしますが、赤道に向かうと実際の地表面より縮んで描画されます。平均して、日本域では実際の地表面に近い様子となります。
設定後はOKボタンでウィンドウを閉じます。
地図への反映
地図右下にあるEPSGコードが表示されたボタンを再びクリックします。
出てきたウィンドウで、フィルタを使って先ほど作成した座標参照系を探して選択します。
すると、これまでとは違って横方向に締まった地図が表示されました。これが標準緯線35度の正距円筒図法による地図です。
あとはこの地図を使って色々遊びましょう。
#おわりに
今回は、正距円筒図法における縦横比の変更方法、正確には標準緯線の設定方法を紹介しました。
説明を整理すると、
- 標準緯線をカスタマイズした投影法(カスタム投影法)を作成する
- 地図にカスタム投影法を設定する
となります。簡単ですね。
地震情報アプリ界隈 Advent Calendar 2021 の6日目担当は 孤独のコーヒー さんです。よろしくお願いします!