【実習編】~画像を地図に重ねたい:ジオリファレンス~
I. はじめに
古地図や絵図、イラストマップ、スキャンした地図、PDF や png で公開されたハザードマップなどをGISデータと重ね合わせたい。そのようなときに使用する機能がジオリファレンスです。ジオリファレンスとは、位置情報をもたない画像データをGISデータと照らし合わせ、位置情報を付与する手法・作業のことです。日本語では幾何補正とも呼ばれます。
単に重ねるだけならPhotoshopやIllustratorなどでも可能です。ジオリファレンスの利点は、重ねた画像ファイルに位置情報を埋め込み、GISデータとして出力できるところにあります。
今回は、QGISでジオリファレンスを行ってみましょう。
II. ジオリファレンス機能の準備
QGISにはジオリファレンス機能が備わっていますが、初期状態ではメニューにありません(※1)。まずは、ジオリファレンス機能を表示させましょう。
※1 QGIS Ver3.14.0 以降では、初期状態からメニューバーの「ラスタ」にジオリファレンサが追加されています。以下の操作は不要なのでIII. へ進みましょう。
メニューバーの「プラグイン」から「プラグインの管理とインストール」を開き、「GDALジオリファレンサ」にチェックを入れます。
すると、メニューバーの「ラスタ」にジオリファレンサが追加されます。これをクリックし、新しくジオリファレンサウィンドウを開きましょう。
III. 方法1:座標値を指定してジオリファレンス
ジオリファレンスの方法には、1. 画像に直接座標値を指定する方法と、2. 地図を見て対応関係を手作業で指定して座標値を得る方法があります。
まずは簡単な前者の方法を行ってみましょう。
座標値を指定する方法は、画像の幾つかの場所の座標値があらかじめ特定できている場合に利用できます。例えば、次の画像を見てみましょう。
これは、国土数値情報で公開されている土地利用図の画像です。この地図の四隅を見ると、緯度・経度が60進法(度分秒)で書かれていることが確認できます。つまり、土地利用図をベースマップに重ねたいと思ったら、この座標値を使ってジオリファレンスを行うことができます。
土地利用図は下記のリンクからダウンロードできます。このnoteでは、浜松の土地利用分類図(第1期)を使用しています。
それでは、QGISでジオリファレンスを行ってみましょう。ジオリファレンサのメニューバーから「ラスタを開く」を選択し、ジオリファレンスしたい画像ファイルを指定します。
なお、PDFファイルではジオリファレンスできないので、画像形式(jpg、png、tiffなど)に変換しておきます(※2)。
※2 PDF形式でもジオリファレンサに読み込むことはできますが、ジオリファレンスを実行できません。PDFから画像形式への変換方法として、Adobe Acrobatによる書き出しやスナップショット機能、PDFをアップロードするとjpgに変換されるウェブサービスなどがあります。
虫眼鏡ツールで地図の左上を拡大したら、[ 点の追加 ] アイコンに変更し地図の角をクリックしてみましょう。
すると、座標値の入力ボックスが開くので、画像に書かれた座標値をボックスに入力します。値は「137°29′49″2」と度分秒の形式で書かれているので、入力は「137 29 49.2」となります(※3)。緯度はY/北に、経度はX/東に入力し、[ OK ] をクリックします。
※3 2002年以前に作られた地図の場合、四隅に書かれた座標値が日本測地系に基づいた値の可能性があります。その場合、世界測地系の座標値に変換してから、入力ボックスに値を入力しましょう。変換には、国土地理院の変換サービス(→ リンク)などが便利です。
同様にして、残り3つの角についても「クリック」→「座標値の入力」を行います。座標値を指定すると、ウィンドウ下の「GCPテーブル」に、指定した情報が追加されていきます。GCP(Global Control Point)とは、画像上のピクセル座標値と実世界上の座標値との対応関係を示した参照点のことです。下図では、変換元XYがピクセル座標値(原点は左上)、変換先XYが対応する実世界の座標値であり、入力した座標値が10進数で示されています。
四隅にGCPを設置できたら、[ 歯車アイコン ] をクリックして変換の設定を行います。設定ウィンドウでは、下図の赤枠で示した設定について確認しましょう。「変換タイプ」では様々なタイプを選択できますが、今回は線形を選びます。「リサンプリング法」は、デフォルトの「最近傍」で問題ありません。変換先SRSではEPSG:4612(JGD2000地理座標系)を選択しています(※4)。これは、GCPの指定に経緯度値を使用していること、画像右の摘要に「経緯度の基準は世界測地系」とあること、背景地図が平成20年修正であること、の3点から決めています。
※4 SRSとは空間参照系(Spatial Reference System)のこと。意味としては座標参照系(CRS)と同じと思って問題ありません。
設定が完了したら、[ ジオリファレンスの開始 ] ボタンをクリックします。すると、ジオリファレンスが実行され、GeoTIFFが出力されます。また、「完了時にQGISロードする」にチェックを入れていれば、画像がQGISのレイヤに追加されます。
しかし、このままでは正しい位置に合わせることができたか分かりません。そこで、GISデータをレイヤに追加して確かめてみましょう。
普通は、ベースマップに行政区域データなどのベクトルデータを用意して、ジオリファレンスの結果を確認します。しかし、ここでは手抜きをして、地理院地図のタイルレイヤを追加して結果を確認します。
下図では、ジオリファレンスした画像を不透明度70%にして地理院地図(淡色)と重ねています。海岸線や河川の位置などをそれぞれ見比べてみましょう。ピッタリではないかもしれませんが、ほぼ正確な場所に画像を合わせることができています。
下図では2か所で確認していますが、実際には満遍なく色々な場所で位置関係を確認しましょう。
IV. 方法2:ベースマップと見比べてジオリファレンス
次は、ジオリファレンスしたい画像に座標値の記載がない場合です。この場合、画像とは別にGISデータを用意し、地図上の目印となる地点を探して画像とGISデータの対応関係を結んでいくことでジオリファレンスします。
下図は、今回使う画像ファイルです。これは、浜松城公園に設置されている江戸時代の浜松城の様子を描いた解説板を撮影したものです。これをジオリファレンスしてみましょう。
この図は北を下にして描かれた地図になっています。このままではジオリファレンスがやりにくいので、画像を回転し北を上にした画像を用意してQGISに取り込みます。
画像ファイルをジオリファレンサで読み込みましょう。また、QGIS本体の方では地理院地図のタイルレイヤを追加しておきます(※5)。座標参照系はEPSG:6676(平面直角第8系)に変更しています。
※5 本来ならベースマップにベクトルデータ(今回の例なら基盤地図情報)を用意すべきですが、ここでも手抜きで地理院地図を利用しています。
いよいよ、手動で行うジオリファレンスです。まず、画像から目印となりそうな特徴的な場所を見つけましょう。現在の地図と対応させるので、目印は堀や城などではなく、背景図の交差点や建物などを選ぶ方が良いです。下図では、浜松城の北にある東西に長い建物(ホテル)を目印としました。目印を決めたら、[ 点の追加 ] アイコンをアクティブにして、その建物のカドの部分をクリックして、GCPの場所を決めます。
画像上をクリックすると、「地図座標の入力」ウィンドウが開きます。ここまではIII章の手順と同じです。しかし、今回は入力すべき座標値が分かりません。そこで、[ 地図キャンバスから ] をクリックし、画像上でクリックした場所と同じ場所を、地理院地図を読み込んでおいたキャンバス上から探します。
[ 地図キャンバスから ] をクリックすると、カーソルが「+」状態になります。この状態でキャンバス上をクリックすると、その場所の座標値がボックスの中に入力されます。下図で、座標値が変な数字の羅列になっているのは、この値が上で変更した平面直角第8系の座標値だからです。
地図を移動させたい場合は、右クリックするとカーソルが手のひらに変わります。もう一度右クリックすると、十字に戻ります。
[ OK ] をクリックすると、GCPが確定し画像上に赤点で表示されます。
もう1か所やってみましょう。次は画像の一番下、大通りの中央分離帯に注目してみます。地図の端で分離帯が細くなっているので、そこでクリックしてGCPを設置します。
「地図座標の入力」ウィンドウで [ 地図キャンバスから ] をクリックし、キャンバス上から同じ場所を探しましょう。GCPを設置すると、GCPテーブルに2つ目の情報が追加されます。
このような作業を繰り返して、GCPを増やしていきます。ジオリファレンス処理が適切に行われるためには、GCPは最低でも4地点必要になります。また、GCPの場所はある地点に集中させず、広域に散らばって配置させる方が良いです。
下図では7地点にGCPを設置しました。GCPは4地点以上は必要ですが、多すぎても精度が良くなるわけではありません。扱う画像にも依りますが、6~10地点ほど設置すれば十分でしょう(※6)。
※6 GCPの必要個数は、変換方法によって異なり、複雑な変換方法ほどGCPを多く必要とします。また、同じ変換方法でも、ジオリファレンスを行う画像の状態によって少ないGCPでも高い精度で位置合わせを行えるものもあれば、多くのGCPを置かないとGISデータと重ならないものもあります。一般に、現代の地図をベースとして描かれた歪みの少ない画像なら少ないGCPでフィットします。一方、絵図やイラストマップのように場所によって縮尺が歪み、距離が正確でない画像では、GCPを増やして位置を合わせます。
GCPが設置できたら、[ 歯車アイコン ] をクリックして変換の設定を行います。「変換タイプ」は線形(または多項式1)、「リサンプリング法」は最近傍を選択します。変換先SRSでは地図キャンバスの座標参照系と同じものを選択します。ここでは、EPSG:6676(平面直角座標系第8系)を選びました。
座標参照系を正しく設定しておくと、設置したGCPに対して下図のような残差の評価が算出されます。残差とは、他のGCPの位置関係に対してそのGCPの場所が妥当な場所に設置されているかを表す目安です。ジオリファレンスによる画像変換の精度とも言えます。残差は、0に近いほど良く、逆に値が大きいほど精度が悪いことを意味します。全てのGCPで残差が一桁であることが望ましいですが、一桁にならないことも多いです。また、残差が少ないことと、正確な位置合わせができていることとは別モノです。残差はGCPの配置バランスを見ているだけです。
下図では、残差がかなり高いことが分かります。特に、ID6の残差が315.9となっており、場所の設定に誤りが疑われます。なお、1つでも誤ったGCPがあると、それにつられて全体の残差の値が高くなります。したがって、GCPを見直すときは、残差の1番高いものから順に行います。
ID6のGCPについて、ジオリファレンサと地図キャンバスでそれぞれ場所の対応を確認します。すると、確かに地図キャンバス上で指定した地点に誤りがあったようです。このようにGCPの設定にミスがあった場合は、ポイントを削除したり移転したりして修正します。
ツールバーの [ ポイントの削除 ] ボタンをクリックし、GCP上でクリックすると、そのGCPを削除できます。ID6のGCPを削除したことで、残差が全体的に小さくなり精度が改善されました。今回はこれでジオリファレンスを実行します。
ツールバーの [ ジオリファレンスの開始 ] ボタンをクリックします。ジオリファレンスが実行され、画像がQGISのレイヤに追加されました。
下図は、ジオリファレンスされた画像を不透明度70%で透過させて重ねたものです(※7)。設定どおり、浜松城付近に画像が配置されました。しかし、細かく見ていくと、全体的に画像が南側(下)にずれているようですね。
ジオリファレンスの結果に満足できないときは、ジオリファレンサに戻りGCPの追加や削除を行って画像を出力し直します。また、変換方法を多項式1(アフィン変換)やシンプレートスプラインなどに変更するのも一手です(※8)。ただし、どれほど頑張っても完全にぴったりと重なることはまずありません。ほどほどのところで切り上げるのが良いでしょう。
これで、写真に撮った画像を地図に重ねることができました。この画像から堀や土塁などをトレースしてポリゴンデータを作成すれば、空間分析に利用できるかもしれません。ジオリファレンスは、地図データのデジタル化の第一歩でもあります。
※7 ベースマップとジオリファレンスした画像を重ね合わせるときは、画像を透過するか、シンボロジで混合モードを「乗算」にすると重なりを比較しやすくなります。
※8 多項式1は、「アフィン変換」と呼ばれる手法を用いて幾何補正します。アフィン変換は、画像の水平・垂直移動、拡大・縮小、せん断、回転などの変形の組み合わせです。これらの変形は、数学的には行列操作で行えることから線形変換、一次変換とも呼ばれます。多項式2、多項式3やシンプレートスプラインなどは、アフィン変換の変形に加えて曲線的な変形が加えられます。複雑な変形手法ほど、GCP周りではフィッティング精度が高まります。しかし、その反動で別の場所にありえない歪みが生じることもあります。したがって、一般には「線形」や「アフィン変換」あたりにしておくのが無難です。
V. おわりに
ジオリファレンスは、アナログデータをGISデータ化するために必要な機能です。「資料のデジタル化」の一環として、紙地図のスキャニングが行われていますが、スキャンしただけではGISデータとは言えません。位置情報を持たせることで初めてGISで利用可能なデータになります。
最近は、古地図を現在の地図と重ねたり並べたりして眺めることができるアプリやサービスがたくさんあります。しかし、そこで使われている古地図は、元は紙であり位置情報を持ったGISデータではありません。誰かが1枚1枚ジオリファレンスを行い、位置合わせを行ったことで、今、アプリとして楽しめるようになっています(※9)。
※9 アプリ開発のためには、ジオリファレンスだけでなく、紙地図のデジタル化(スキャニング)、見やすくするための加工(色調補正など)、配信用データへの変換(タイル化)、使用許諾の取得(謄本交付)など様々な工程が考えられます。
記事の内容でもそれ以外でも、地理やGISに関して疑問な点があれば、可能な限りお答えしたいと思います。