もともとGISデータではない地図画像をGISに表示させたいことはよくあります。このように地図画像に座標を与えることをジオリファレンスといいます。
QGISはフリーでオープンソースの地理情報システムです。
本稿の方法が適用できる地図画像データの制限について
投影法がわからない国スケールの小縮尺の地図や、カメラで撮影した地図、生の航空写真などには歪みが含まれているので、精度高くジオリファレンスするには注意が必要です。ここでは、形に歪みのない県スケール以下の地図画像を考えます。20万分の一程度以下のスケールの紙の地図をスキャナで画像にするとこのようなデータになります。
地図画像をGISで表示してみる
下図は、ある湾で昔行った調査地点をプロットした地図画像です。この調査地点をGISデータに落とし込むことを考えましょう。元地図が何だったかもわからないのでCRSも不明です。
![CRSが設定されていないトレースされた地図画像](https://sk-lb.net/wp-content/uploads/2022/03/qgis-georeference.png)
![SKラボ](https://sk-lb.net/wp-content/uploads/2022/02/sklb-150x150.png)
パソコンの能力が低かった1980年台は、地図にトレーシングペーパーを重ねて、ロットリングペンとかカラス口とかで手でトレースして地図を作ってたんですよねー。懐かしー。
この地図画像のレイヤのプロパティを調べると、CRSは不明、領域は画像のピクセル数になっています。
![CRSが設定されていない地図画像ファイルのレイヤプロパティ](https://sk-lb.net/wp-content/uploads/2022/03/2a831ec055ed4fee4e1d0936ea40500d-3.png)
起動したばかりのQGISなら、ブラウザでこの画像をダブルクリックすると地図が表示されます。座標系はデフォルトのEPSG:4326になっています。しかし、レイヤパネルの右端に「?」マークが表示され、?をクリックすると、座標参照系を選択するように促されます。しかしそもそもこの画像の領域は既存の座標系との関連はない画像のピクセルにもとづいているので、ここで座標参照系を選択しても意味がないのです。またこの地図画像以前にマップビューに正しい座標系を持つGISデータが表示されていれば、地図画像は表示すらされません。
![レイヤパネルの?をクリックすると座標参照系の選択ダイアログが現れる](https://sk-lb.net/wp-content/uploads/2022/03/ee3be1d100caf1aa771552d59c2bd436-4.png)
まず、歪みのない正しい地図をGISに表示する
ジオリファレンスするには、まずこの地図画像の場所を含む正しい地図を表示しておく必要があります。QGISで新規プロジェクトを開き、OpenStreetMapで同じ場所を開きましょう。OpenStreetMapはブラウザパネルの下方、XYZ Tilesの中に含まれています。OpenStreetMapのデフォルトの座標系はEPSG:3857(WGS 84 / Pseud-Marcator)ですが、この座標系は世界地図用ですのでマップビューの地図に歪が含まれている恐れがあります。プロジェクト座標系は当該地域の平面直角座標系(海外ならUTM座標系)に変更します。(この例ではEPSG:6671です。)
![OpenStreetMapを投影座標系で表示する](https://sk-lb.net/wp-content/uploads/2022/03/5f63f49b6b7d98988e1002a4a4f2d6d5-3.png)
ジオリファレンサで対応点を設定する
この状態で地図画像をブラウザパネルでクリックしても、レイヤパネルに追加はされますが、先述のように地図画像の座標が正しくないため表示されません。ここでは地図画像をレイヤに追加せず、メニューから「ラスタ」ー「ジオリファレンサ」をクリックします。(3.28 LTRでは「レイヤ」ー「ジオリファレンサ」に変わりました。)すると、「ジオリファレンサ」ダイアログが開きます。
![ジオリファレンサを開く](https://sk-lb.net/wp-content/uploads/2022/03/04f86ea9c104d100d663feb8a9a65769-2.png)
ジオリファレンサのツールバーの左端の「ラスタを開く」(チェッカーのようなアイコン)をクリックし、ジオリファレンスしたい画像を選択すると、ジオリファレンサの上側のビューに地図画像が表示されます。この地図はジオリファレンサのツールバーの拡大・縮小・パンなどのツールやマウスホイールで自由に拡大、縮小、移動できます。またQGIS側のマップビューも通常の方法で拡大、縮小、移動できますので、ジオリファレンサ側の「点を追加」ツールを使って、ジオリファレンスしたい地図画像とQGIS側の正しい地図の対応する地点を、1.ジオリファレンサ側、2.QGIS側の順でクリックするのです。
下図では、特徴的な湾西岸河口部を対応づけようとしています。まず右側のジオリファレンサで「点の追加」ツールを選び、河口左岸の突端でクリックすると、小さな緑の点が打たれ、「地図座標の入力」ダイアログが開くので、「地図キャンパスから」ボタンを押して、左側のQGIS画面で対応する位置をクリックします。すると「地図座標の入力ダイアログに座標値が読み取られるので、OKをクリックします。
![CRSのない地図画像とCRSのある地図画像の対応点をつくっていく](https://sk-lb.net/wp-content/uploads/2022/03/63ead695680eb0c485fa3f134844052f-2-1024x665.png)
この作業を地図画像の上下左右の離れた位置に2点以上配置します。この例では、元図が手でトレースしたものなので歪みがあると思われるため、6点配置してみました。結果は下図で、それぞれの対応する位置に赤い点が打たれています。またそれぞれの座標値がジオリファレンサのGCPテーブルに表示されています。
![対応点を6点作成した状態](https://sk-lb.net/wp-content/uploads/2022/03/0ae7c62e50dc705df75843b104ce66cd-2-1024x650.png)
線形変換でジオリファレンスを実行する
次に、ジオリファレンサの「変換の設定」ツール(黄色歯車アイコン)をクリックし、変換タイプを「線形」、変換先CRSをプロジェクトCRSと同じEPSG:6671、出力ラスタをデフォルトで表示されるtif形式にします。tifにすると座標系が画像ファイルに埋め込まれるので、その後のハンドリングは楽ですが、ファイルサイズは大きめになります。必要に応じて圧縮を選択しても構いません。一方、「ワールドファイルの作成のみ(リニア変換)」にチェックを入れると、出力ラスタの枠がグレーとなります。この方法では、元の画像ファイルはそのままとし、画像ファイルの座標系定義を記録したワールドファイル(拡張子は.wld)が生成されます。ファイルが2つになるためコピーする際2つともコピーすることを忘れないようにするなどハンドリングはやや複雑になりますが、元データが劣化しないメリットはあります。リサンプリング方法は最終的に綺麗に見えるものを選べばよいのですがここでは単純な「最近傍」とし、「完了時にQGISにロードする」はチェックしておきます。
![変換の設定画面](https://sk-lb.net/wp-content/uploads/2022/03/2839ab849d9b2c81bd86f4778e9767e3-2.png)
以上の設定を終え、「変換の設定」ダイアログをOKボタンで閉じれば、「ジオリファレンスの開始」ボタン(緑の三角)をクリックすると、マップビュー上に地図画像が表示されます。(下図では、OpenStreetMapとの対応が良くわかるように半透明にしてあります。)
![線形でのジオリファレンシング実行結果](https://sk-lb.net/wp-content/uploads/2022/03/7d2a8a5d380f463388d1c8d4512bef57-2-1024x616.png)
ジオリファレンサのGCPテーブルには変換残差も表示されていますが、ID:2, 3の残差が大きいです。地図の赤丸はID:3ですが、かなりずれていますね。その結果、東岸の海岸線も全体に東にずれています。
ヘルマート変換でジオリファレンスを実行する
これではちょっと満足がいかないので、線形ではなく、ヘルマート変換してみましょう。
![すだくん](https://sk-lb.net/wp-content/uploads/2022/02/sudakun-150x150.png)
線形変換は拡大・縮小と並行移動だけ。ヘルマート変換はそれに加えて回転もするよ。どちらも対応する点は2点以上必要だよ。
![ヘルマート変換を設定。出力ラスタ名を変えておくことを忘れずに!](https://sk-lb.net/wp-content/uploads/2022/03/40dcbe9d88c96297b642179a653642d8-2.png)
変換を実行すると以下のようになります。東岸の海岸線のずれは小さくなりましたね。でもID:3のポイントの残差はますます大きくなりました。どうもID:3のポイントの対応関係が悪いようです。実は、この部分は、河川改修で河口の位置が動いたのです。古い地図を現在の地形に対応させようとすると、このようなことはよくあります。
![ヘルマート変換すると、海岸線の合致度は改善されたが、赤丸の点の残差は大きくなった](https://sk-lb.net/wp-content/uploads/2022/03/60275ab58ebd7cd921d15fb49998721b-2-1024x616.png)
今度は、ID:3の点のチェックを外して、もう一度ヘルマート変換してみます。その結果が下図です。やはり海岸線は良く合致しました。ID:3の対応関係が適切でなかったようです。念のためID:3のチェックは外したまま線形変換を試してみましたが、ヘルマート変換の方が良い結果でした。
![ID:3のチェックを外してヘルマート変換すると、海岸線はよく合致した](https://sk-lb.net/wp-content/uploads/2022/03/9d831d187199270f191b3999ca596311-2-1024x607.png)
ここまでできれば、あとは新しいポイントシェープファイルを作って調査地点上にポイントを置いていけば、GISデータ化できますよね。
多項式でジオリファレンスを実行する
ちなみに、変換タイプには多項式という選択肢もあります。下図は多項式2を選び、ID:3にはチェックをつけた状態で変換実行したものです。すると、対応点はほぼピッタリ合致していますが、海岸線は大きく歪んでしまいました。多項式2は適していなかったようです。
![多項式2で変換すると大きく歪んでしまった](https://sk-lb.net/wp-content/uploads/2022/03/a402c696bf493a873c765923653c07e6-1024x615.png)
![すだくん](https://sk-lb.net/wp-content/uploads/2022/02/sudakun-150x150.png)
初心者の方ほど、対応点をたくさん作って、高次の多項式でピッタリ合わせようとすることが多いかな。でも、対応関係が確実な3,4個の対応点だけに絞って、線形変換かヘルマート変換までにしておく方が結果が良いことが多いよ。
![かわのさん](https://sk-lb.net/wp-content/uploads/2022/02/kawanosan-150x150.png)
手書きの地図じゃなくて投影座標系の地図をスキャンした画像のように歪みが少ないものなら、対応点は2点にしてヘルマート変換するだけでピッタリになることが多いわね。QGIS 3.28のユーザーガイドに、どんな場合にどの変換を使うのが良いか書いてあるわ。
ブラウザパネルでヘルマート変換した画像ファイルのレイヤのプロパティを調べると、座標参照系が定義されており、領域も画像のピクセル値ではなくなっています。
![ジオリファレンス後の地図画像のプロパティ](https://sk-lb.net/wp-content/uploads/2022/03/7ecbec8b200a97f5b85a8a31ece4115c.png)
生成されたtifファイルには座標系が埋め込まれていますので、今後はジオリファレンスすることなく正しい位置に表示することができます。
今回は以上です。Have fun!
![](https://sk-lb.net/wp-content/uploads/2022/01/スライド2-320x180.png)
コメント