座標系の操作には、データそのものを別の座標系に変更する「再投影」と、データそのものは変更せず、プロパティに記録された座標系の定義のみを変更する「投影法を設定」があります。前者は地理座標系のファイルを投影座標系に変換するなどのために使用します。後者は、不適切な座標系が割り当てられていたファイルを修正するために使用します。不適切な座標系が割り当てられているファイルに対して「再投影」を行っても、正しいデータを得ることはできませんし、正しい座標系が割り当てられているファイルに対して不適切な「投影法を設定」を行っても、データが使えなくなってしまうだけです。しっかり区別して使用しましょう。(本解説はQGIS 3.40.5を使用して作成しました。)
QGISはフリーでオープンソースの地理情報システムです。
例として使うデータについて
下図はベクタデータの例として使うcity.shpとroads.shpです。city.shpはCRSが割り当てられていません。昔のGISデータにはこのようなものがよくあり、別の説明資料がないと正しいCRSを見つけるのは難しいです。このケースだと、幸いTokyo座標系であることが別資料でわかっています。roads.shpはWGS84であることがプロパティから読み取れます。右端の図は、これらのレイヤを重ねて表示したものです。レイヤパネルのcityレイヤの右側に?が表示されており、CRSが認識されていないことがわかります。どちらも緯度経度を用いた地理座標系で、同じ場所の市境界ポリゴンと道路ポリゴンですが、海上に道路が描かれており、位置がずれていることがわかります。TokyoとWGS84は測地系が異なっているためです。

下図はラスタデータの例として使うdem.tifです。プロパティのCRSではJGD2000 / 平面直角座標系と人間の目では読み取れますが、右下のプロジェクトの座標系は「不明なCRS」のままとなっており、QGISには座標系が理解されていないことがわかります。このデータは、ドローン写真を合成するソフトであるMetashapeで作成したもので、座標系も割り当ててあるのですが、QGISとはプロパティの互換性が低いものと思われます。

レイヤパネルでの投影法の設定
ベクタデータの例
下図左はcityレイヤで右ボタンクリックしてコンテキストメニューを出した状態です。「レイヤのCRS」-「レイヤのCRSを設定」を選ぶと、右側の「座標参照系の選択」ダイアログが表示されます。cityレイヤの右側の?をクリックしても同じダイアログが開きます。フィルタにTokyoとタイプすると、下のあらかじめ定義されたCRSに選択肢が現れますので、適切なものを選びます。

ダイアログの「OK」をクリックすると、下図のようなダイアログが表示されることがあります。このダイアログは、再投影するにあたって適用可能な投影法が複数存在する場合に表示されます。この例ではそれぞれ精度や使用エリアに違いがある5つの変換法が提案されていますが、ダイアログの中に判断の助けとなる情報が表示されていますので、落ち着いて良いものを選んでください。場合によっては追加のパラメータのダウンロード・インストールを求められることもあります。

無事に座標系が設定されると、下図のようにレイヤ右の?は消え、道路が海上に描かれることもなくなりました。なお、この方法はデータファイルを変更しませんので、次回も同じようにする必要があります。

ラスタデータの例
ラスタデータに対する操作も基本は同じです。ただ、本稿で準備したデータを用いると、下図のようにカスタムCRSとして表示されます。座標系は定義されているが、QGISに元から組み込まれているものとは違うということです。

「カスタム座標系」の表示右端の三角をクリックして「定義済みCRS」を選択すると、ベクタデータと同様のダイアログに変化します。下図のようにフィルタであらためてJGD2000 Planeなどの文字で検索すると、同じ名前でもQGISに組み込まれた座標系が検索されるので、これを選びなおすと良いでしょう。その上で、コンテクストメニューから「レイヤのCRS」ー「レイヤのCRSをプロジェクトのCRSに設定」を選ぶことで、プロジェクトのCRSも正しく設定されます。この場合もベクタデータの場合と同様、データファイルには変更が加えられていませんので、次回も同じ操作が必要になります。

ブラウザパネル・レイヤパネルでの再投影
これらのパネルでは、選択したデータを右ボタンクリックして現れるコンテクストメニューからエクスポートするときに、座標系を再投影することができます。ブラウザパネルでは、「レイヤをエクスポート」ー「ファイルへ…」、レイヤパネルでは、ベクタレイヤなら「エクスポート」ー「新規ファイルに地物を保存…」、ラスタレイヤなら「エクスポート」ー「名前をつけて保存…」と、メニューの項目名は違いますが、現れるダイアログはブラウザパネルでもレイヤパネルでも同じものです。下図左はベクタレイヤに対するもの、下図右はラスタデータに対するものです。なお、これらを実行する前提として、現在のファイルなりレイヤなりに正しい座標系が設定されていることが必要です。従って、city.shpやdem.tifのようにQGISにCRSが認識されないデータは、いったんレイヤパネルに表示させて投影法を割り当てておくことが必要です。

最上部の数行で、ファイルの「形式」、出力する「ファイル名」、出力ファイルの「座標参照系」を指定するのはベクタ・ラスタとも共通です。「形式」にはたくさんの候補がありますが、特に理由がなければ元ファイルと同じにしましょう。ラスタの最上部にはベクタにはない「出力モード」がありますが、データとして使用するなら「生データ」を選びます。(「画像」は、RGB画像として保存する時に使用します。)他にもいろいろ設定できますが、再投影するだけならこれだけを設定すればOKです。

上図左のCRS設定部分の右側に黄色のビックリマークがついているけど、あれは何?

マークの上にマウスポインタをかざしてごらん。理由が表示されるよ。TokyoからWGS84への変換精度はあまり良くないよ、っていう注意だね。それぞれの座標系で地球を表現する楕円体自体が違うから仕方ないね。
OKをクリックすると、以下のように新しいシェープファイル(city-wgs84.shp)が作成されます。(その前に変換方法を選択するダイアログが表示されることがあるのは前項と同様です。)このファイルは新しい投影法に合致するようプロパティもデータそのものも書き換えられていますので、次回使用する時に再投影する必要はありません。

ツールを用いた投影法の設定
ブラウザパネル、レイヤパネルではなく、ツールを用いて投影法をファイルに割り当てることもできます。特に、複数のファイルに対して一括して処理を行う時に便利です。ツールバーで歯車のアイコンをクリックすると、画面の右側にプロセシングツールボックスが現れます。検索窓に「投影法」とタイプすると、関連するツールが現れます。

「投影法を設定」ツール(QGIS:ベクタ一般)
下図左はベクタ用の「投影法を設定」を起動した状態です。ダイアログに「割り当てられたCRS」が2か所にありますが、上の方は「割り当てるCRS]、下の方は「出力ファイル」の誤りでしょうね。レイヤパネルとの違いは、このツールを使うと投影法を割り当てた新しいファイルが作成されることです。また左下の「バッチプロセスで実行」をクリックすると、下図右のダイアログが開き、複数の入力ファイルを選ぶことができます。各カラム上段にあるオートフィルを使いこなせば、「割り当てるCRS」や「出力ファイル」の名前を機械的に生成することもできます。


バッチ処理をするときの出力ファイルは、右端の「割り当てられたCRS」カラム入力枠右端の[…]ボタンを押して、「ファイルの種類」で「SHP files」を選択した上でファイル名を入力してね。カラムに直接ファイル名をタイプすると、実行時にエラーになるよ。

上図右ではcity.shpとroads.shpの両方にTokyo座標系を割り当てているけど、roads.shpの方は不正な結果となることはもちろんわかってるよね?「投影法を設定」ツールは.shpファイル内のデータそのものは書き換えないよ。roads.shpのデータそのものはWGS84なのにプロパティにはTokyoと記入されることになるから、間違ったデータになっちゃうよ。注意してね!
「Shapefileの投影法ファイルを追加」ツール(QGIS:ベクタ一般)
「投影法を設定」ツールと異なり、新しいShapefileを作成せず、Shepefileの座標系定義ファイルだけを作成します。使い方は、出力ファイルの指定がないだけですので、省略します。

「Shapefileの座標系定義ファイル」って、Shapefileの他にもう一つファイルができるっていうこと?

ややこしいよね。Shapefileって、QGISのブラウザで見ると1つのファイルみたいだけど、WindowsのExplorerで見るとベースネーム(ピリオド前)の部分が同じで拡張子(ピリオド以下)の部分が異なる複数のファイルでできていることがわかるんだ。このツールで作成される座標系定義ファイルもこの中の1つだから、QGISのブラウザから見るとこのツールを実行しても何も変化は起こらない。プロパティで座標系が定義されるだけに見えるよ。Shapefileのしくみについては別のところで説明しているので勉強してね。
「投影法を設定」ツール(GDAL:ラスタ投影)
下図左はラスタ用の「投影法を設定」を起動した状態です。 また左下の「バッチプロセスで実行」をクリックすると、下図右のダイアログが開き、複数の入力ファイルを選ぶことができるのもベクタ用と同じです。ただし、ベクタ用の「投影法を設定」とは違って、ラスタ用は新しいファイルを作るのではなく、元のファイルのプロパティを書き換えます。 「Shapefileの投影法ファイルを追加」と同じ位置づけですね。

ツールを用いた再投影
再投影についても、ツールを使うと複数のファイルに対して一括して処理を行う時に便利です。ツールバーで歯車のアイコンをクリックすると、画面の右側にプロセシングツールボックスが現れます。検索窓に「再投影」とタイプすると、関連するツールが現れます。

「ベクタレイヤを再投影」ツール(QGIS:ベクタ一般)
ベクタファイルを再投影して新しいファイルとして出力するツールです。左下の「バッチプロセスで実行…」をクリックして複数ファイルを一括変換する時に使用するのが良いでしょう。なお、ダイアログには「再投影したラスタファイル」と書かれていますが、ベクタファイルに対する操作です。また出力ファイルの形式がいろいろ選択できるのもベクタの「投影法を設定」ツールと同様ですので、きちんと適切なファイル形式を選択してから実行しましょう。


上図の右のバッチ処理では、またroadsにTokyo座標系を設定しようとしているけど、これはいいの?

再投影ではデータの中身を書き換えた新しいファイルを出力するので、今度はOKよ!
「再投影 (warp)」ツール(GDAL:ラスタ投影)
ラスタファイルを再投影するツールです。ブラウザパネルより細かい設定ができます。まず、入力レイヤの座標系が正しく割り当てられていれば、「変換元のCRS」は空欄でも大丈夫です。次の「ラスタのCRS」には変換したい座標系を設定します。「リサンプリング法」は、再投影によりセルの位置がずれた場合に、新しいデータを生成する方法を定義します。たくさんの選択肢がありますが、下図では最も簡単な最近傍としました。新しいセルの位置に最も近い変換元のセルの値をマッピングします。あとは出力ファイルとして「再投影したラスタファイル」を設定すれば大丈夫です。

なお、左下の「バッチプロセスで実行…」をクリックすれば複数ファイルを一括変換することができるのはこれまでのツールと同様です。下図は複数ファイルを処理するダイアログです。

下図左は再投影したdem-wgs84.tifを表示したもの、下図右は元データのdem.tifを表示したものです。どちらのマップビューもまったく同じ範囲を表示しています。プロジェクトの座標系はdem.tifと同じっ投影座標系のJGD2000/Japan Plane Rectangular CS IIIなので、右側のdem.tifはセルの区切りの縦線、横線がマップビューを水平・垂直に区切っています。一方左側の再投影されたdem-wgs84.tifは地理座標系のWGS 84なので、プロジェクトの座標系とは異なっています。このため、セルの区切りの縦線、横線がわずかに傾いているのがわかるでしょうか。また、値のパターンも部分的には大きく異なっています。これは最も近くのセルの値をそのまま取ってくるという最近傍法が原因だと思われます。リサンプリング法によって誤差の出方が異なりますので、目的によっては試行錯誤する必要があるかもしれません。

おわりに
GISの解析を成功させようと思うなら、使用するすべてのデータの座標系を合わせておくことが大切です。そのためには、本稿の方法が不可欠ですので、十分習熟してくださいね。
Have fun!

コメント