QGIS の v.3.28 から地理院地図ベクトルタイルレイヤーからの地物の選択が可能になり、道路データのコピーペーストが容易にできるようになったので、これを利用して登山ルートのgpxファイルを作成する方法を考えました。
らくルートを使用すれば登山ルートのgpxファイルは簡単にできますが、あえてこの方法を使う意味としては、たとえば
1)らくルートでルート化されていないが地理院地図には登山道が描かれている(実際に歩けるとは限りませんが)
2)らくルートでルート化されているが地理院地図の登山道とはズレがあり、みんなの足跡を見ると地理院地図の登山道の方に集中しているのでそっちを使いたい(細かいことを気にする人向け)
というような場合に、地理院地図の登山道をデジタイズする手間が省けるということです。
そもそも QGIS とは?という方は、ネットにかなり情報があるので、検索してみてください。以下の説明はマック版の QGIS 3.28.8 を使用してのものです。ウィンドウズ版はインターフェイスが若干異なるかもしれません。不完全なところのある作業手順なので、実施される場合はまず短いルートで試してみて、要領を掴んでから長いルートを作成するのがよろしいかと思います。
らくルートを使用すれば登山ルートのgpxファイルは簡単にできますが、あえてこの方法を使う意味としては、たとえば
1)らくルートでルート化されていないが地理院地図には登山道が描かれている(実際に歩けるとは限りませんが)
2)らくルートでルート化されているが地理院地図の登山道とはズレがあり、みんなの足跡を見ると地理院地図の登山道の方に集中しているのでそっちを使いたい(細かいことを気にする人向け)
というような場合に、地理院地図の登山道をデジタイズする手間が省けるということです。
そもそも QGIS とは?という方は、ネットにかなり情報があるので、検索してみてください。以下の説明はマック版の QGIS 3.28.8 を使用してのものです。ウィンドウズ版はインターフェイスが若干異なるかもしれません。不完全なところのある作業手順なので、実施される場合はまず短いルートで試してみて、要領を掴んでから長いルートを作成するのがよろしいかと思います。
1.作業用QGISプロジェクトの準備
・プロジェクトは既存のものでも新規に作成してもよい。CRS は WGS84/Pseudo-Mercator。
・タイルデータの追加(ブラウザで接続した後、プロジェクトに追加する)
・地理院ベクトルタイル:https://cyberjapandata.gsi.go.jp/xyz/experimental_bvmap/{z}/{x}/{y}.pbf
Vector Tiles で接続し、シンポロトジでラベルの Lines をチェックし, レイヤを road とする
・ラスタの地理院地図(背景地図用):https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png
XYZ Tiles で接続する
(上記2つの URL はコピーペースト用であり、リンクはない)
・仮置き場レイヤの作成(道路データのペースト先)
レイヤ>レイヤを作成>新規一時スクラッチレイヤ
ジオメトリ型はラインストリング、CRS は WGS84/Pseudo-Mercator
・ラフトレース
道路データコピーペースト時の補助として、想定ルートを大まかにトレースしておく
・タイルデータの追加(ブラウザで接続した後、プロジェクトに追加する)
・地理院ベクトルタイル:https://cyberjapandata.gsi.go.jp/xyz/experimental_bvmap/{z}/{x}/{y}.pbf
Vector Tiles で接続し、シンポロトジでラベルの Lines をチェックし, レイヤを road とする
・ラスタの地理院地図(背景地図用):https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png
XYZ Tiles で接続する
(上記2つの URL はコピーペースト用であり、リンクはない)
・仮置き場レイヤの作成(道路データのペースト先)
レイヤ>レイヤを作成>新規一時スクラッチレイヤ
ジオメトリ型はラインストリング、CRS は WGS84/Pseudo-Mercator
・ラフトレース
道路データコピーペースト時の補助として、想定ルートを大まかにトレースしておく
2.道路ポリラインのコピーペースト
地理院ベクトルタイルの道路データは非常に多数の道路ポリラインから構成されている。一つ一つの道路ポリラインは、2つの頂点を結んだだけの極めて短いものから、100以上の頂点からなる長いものまで様々である。この中から想定ルート上のポリラインを選択してコピーし、仮置き場レイヤにペーストする。「地物を選択」ツールで一つ一つコピーペーストすることもできるが、ある程度長いルートになると、「ポリゴンによる地物選択」ツールで想定ルートを取り囲んでコピーペーストして、不要なポリラインを削除する方が能率的である。
地理院ベクトルタイルの道路データセットは、ズームレベル14以下、ズームレベル15〜17、ズームレベル18でそれぞれ異なるものであり、次の一本化の作業で相互に接続しないことが多い。徒歩道はズームレベル15以上でのみ表示される。ズームレベル18は登山用としては大縮尺すぎる。このため、コピーペースト作業はズームレベル15〜17で行った方が良い。
QGIS自体にはズームレベルを表示する機能はないが、これを行なってくれる Zoom Level というプラグインがある。また、この3つのズームレベルで背景の地理院地図が異なる。なお、ツールバーの拡大・縮小ツールやマップの下の「縮尺」を使うとズームレベルが変わるが、マップの下の「拡大」の方はズームレベルを変えないまま拡大・縮小できる。
立体交差の道路は平面上で交差して見えても接続していないので、そこではルートは繋がらない。道路データだけ見ていると、これを忘れることがあるので注意。山の中でもたまに立体交差がある。
地理院ベクトルタイルの道路データセットは、ズームレベル14以下、ズームレベル15〜17、ズームレベル18でそれぞれ異なるものであり、次の一本化の作業で相互に接続しないことが多い。徒歩道はズームレベル15以上でのみ表示される。ズームレベル18は登山用としては大縮尺すぎる。このため、コピーペースト作業はズームレベル15〜17で行った方が良い。
QGIS自体にはズームレベルを表示する機能はないが、これを行なってくれる Zoom Level というプラグインがある。また、この3つのズームレベルで背景の地理院地図が異なる。なお、ツールバーの拡大・縮小ツールやマップの下の「縮尺」を使うとズームレベルが変わるが、マップの下の「拡大」の方はズームレベルを変えないまま拡大・縮小できる。
立体交差の道路は平面上で交差して見えても接続していないので、そこではルートは繋がらない。道路データだけ見ていると、これを忘れることがあるので注意。山の中でもたまに立体交差がある。
3.道路ポリラインの一本化
2の作業が終わると画面上では一本のルートができたように見えるが、実際は多数の道路ポリラインの集まりに過ぎず、一本のgpxファイルとして出力するにはまだ作業が必要である。
多数のポリラインを一本の線にするには、全体について一旦「頂点を抽出」した後、「点を線に変換」すればよい。しかし、これをそのまま実行すると、大抵はぐしゃぐしゃの線ができてしまう。その原因は以下の3点にある。
・道路ポリラインにはデジタイズ時に番号が付いており、想定ルートでの順番とは一致しない。
・道路ポリラインデータにはかなりの重複がある。
・道路ポリラインには方向性があり(線を構成する点に番号がついている)、想定ルートの方向と逆のものも多数ある。
QGISのベーシックな機能で一つ一つ解消することが可能ではあるが(6.付記 に記載)、かなり手間がかかり、あまり人に薦められるものではない。ところが「ネットワーク解析>最短経路(指定始点から指定終点)」を使用すれば全部が簡単確実にできてしまうことがわかったので、基本的にこの方法をお薦めする。
ただし最短経路計算のためには、ルートの始点から終点までポリラインが完全につながっている必要がある。このため、道路データのコピーペーストの際には「ポリゴンによる地物選択」ツールを使用して、抜け落ちのないようにする。想定ルートと交差するポリラインについては、想定ルートをショートカットするルートを作るもの以外は削除する必要はない。
最短経路計算では、ルート上で始点と終点をクリックして指定して、実行する。これですんなり最短経路ができれば作業は終わりである。しかし、「始点から終点への経路がありません」というメッセージが出て終了することが、残念ながらしばしばある。これは想定ルート上にギャップがあることを意味している。ギャップにはいくつかのタイプがある。
タイプ1のギャップ:地理院ベクトルタイルのデータの不備と思われるもの。これはさらに2種類ある。
タイプ1Aのギャップ:デジタイズ時のミスと思われる、ある程度拡大すれば目で見て確認できるレベルのギャップ。例えば、基の地理院地図の破線道同士の交点の直前で、破線の隙間がデジタイズの端になってしまってギャップができているとか、破線道が幅のある車道の端で止まっていて中心線に届いていないとかいうようなものである。これはかなり稀である。
タイプ1Bのギャップ:最大限まで拡大しても目視できないレベルの微小なギャップ。元々か、あるいは後から何らかの原因で端点の座標値が微妙に変わってしまったかで、QGISが許容するより大きなギャップになっているものと思われる。これが結構多い。
タイプ2のギャップ:作業者のミスあるいは思い込みによるもの。これにも2種類ある。
タイプ2Aのギャップ:地理院ベクトルタイルからのコピーペースト時に漏れたか、不要と思って削除してしまったもの。これも時々ある。
タイプ2Bのギャップ:もともと地理院地図に道路が描かれていない箇所に、作業者が道路があると思い込んでいる場合。たとえば、寺社の境内、公園、私有地を通らせていただくというような所で、実際は通れるのだが、地形図を良く見ると道路は記入されていないというケースが該当する。市街地のルートではこれがありがちである。
ギャップに対する対応策は以下の通り。
1)まず、最短経路計算時のトポロジ許容値(接続しているとみなす点間距離)を1mにして最短経路計算を行う。これで最短経路が作成されれば、どこかにタイプ1m以下のギャップがあったものと考えて、終了する(ヒマならその場所を探してもいいけれども)。ダメな場合は、これより大きいギャップがあるはずだが、目視で探すのは大変なので、以下の方法でその位置を突き止める。
2)終点を経路の中間付近(ポイントX)に変更して、最短経路計算をやり直す。トポロジ許容値は1mにしておく。これで最短経路が作成されれば、ギャップはポイントXより後にある。最短経路が作成されなければ、ギャップはポイントXより前にある。この作業を繰り返して、ギャップの位置を特定する。ギャップは一箇所とは限らない。
3)地理院ベクトルタイルとオーバーレイしてみて、ギャップがタイプ2Aであれば、抜け落ちた区間をコピーペーストしなおせば良い。そうでない場合は、ギャップをつなぐ線の地物を自分で描いて追加する。ギャップはゼロにはできないが、なるべく小さくする。トポロジ許容値をこれよりわずかに大きくして、最短経路計算をやり直す。トポロジ許容値を大きくし過ぎると、想定外のショートカットができてしまうので、注意が必要。
多数のポリラインを一本の線にするには、全体について一旦「頂点を抽出」した後、「点を線に変換」すればよい。しかし、これをそのまま実行すると、大抵はぐしゃぐしゃの線ができてしまう。その原因は以下の3点にある。
・道路ポリラインにはデジタイズ時に番号が付いており、想定ルートでの順番とは一致しない。
・道路ポリラインデータにはかなりの重複がある。
・道路ポリラインには方向性があり(線を構成する点に番号がついている)、想定ルートの方向と逆のものも多数ある。
QGISのベーシックな機能で一つ一つ解消することが可能ではあるが(6.付記 に記載)、かなり手間がかかり、あまり人に薦められるものではない。ところが「ネットワーク解析>最短経路(指定始点から指定終点)」を使用すれば全部が簡単確実にできてしまうことがわかったので、基本的にこの方法をお薦めする。
ただし最短経路計算のためには、ルートの始点から終点までポリラインが完全につながっている必要がある。このため、道路データのコピーペーストの際には「ポリゴンによる地物選択」ツールを使用して、抜け落ちのないようにする。想定ルートと交差するポリラインについては、想定ルートをショートカットするルートを作るもの以外は削除する必要はない。
最短経路計算では、ルート上で始点と終点をクリックして指定して、実行する。これですんなり最短経路ができれば作業は終わりである。しかし、「始点から終点への経路がありません」というメッセージが出て終了することが、残念ながらしばしばある。これは想定ルート上にギャップがあることを意味している。ギャップにはいくつかのタイプがある。
タイプ1のギャップ:地理院ベクトルタイルのデータの不備と思われるもの。これはさらに2種類ある。
タイプ1Aのギャップ:デジタイズ時のミスと思われる、ある程度拡大すれば目で見て確認できるレベルのギャップ。例えば、基の地理院地図の破線道同士の交点の直前で、破線の隙間がデジタイズの端になってしまってギャップができているとか、破線道が幅のある車道の端で止まっていて中心線に届いていないとかいうようなものである。これはかなり稀である。
タイプ1Bのギャップ:最大限まで拡大しても目視できないレベルの微小なギャップ。元々か、あるいは後から何らかの原因で端点の座標値が微妙に変わってしまったかで、QGISが許容するより大きなギャップになっているものと思われる。これが結構多い。
タイプ2のギャップ:作業者のミスあるいは思い込みによるもの。これにも2種類ある。
タイプ2Aのギャップ:地理院ベクトルタイルからのコピーペースト時に漏れたか、不要と思って削除してしまったもの。これも時々ある。
タイプ2Bのギャップ:もともと地理院地図に道路が描かれていない箇所に、作業者が道路があると思い込んでいる場合。たとえば、寺社の境内、公園、私有地を通らせていただくというような所で、実際は通れるのだが、地形図を良く見ると道路は記入されていないというケースが該当する。市街地のルートではこれがありがちである。
ギャップに対する対応策は以下の通り。
1)まず、最短経路計算時のトポロジ許容値(接続しているとみなす点間距離)を1mにして最短経路計算を行う。これで最短経路が作成されれば、どこかにタイプ1m以下のギャップがあったものと考えて、終了する(ヒマならその場所を探してもいいけれども)。ダメな場合は、これより大きいギャップがあるはずだが、目視で探すのは大変なので、以下の方法でその位置を突き止める。
2)終点を経路の中間付近(ポイントX)に変更して、最短経路計算をやり直す。トポロジ許容値は1mにしておく。これで最短経路が作成されれば、ギャップはポイントXより後にある。最短経路が作成されなければ、ギャップはポイントXより前にある。この作業を繰り返して、ギャップの位置を特定する。ギャップは一箇所とは限らない。
3)地理院ベクトルタイルとオーバーレイしてみて、ギャップがタイプ2Aであれば、抜け落ちた区間をコピーペーストしなおせば良い。そうでない場合は、ギャップをつなぐ線の地物を自分で描いて追加する。ギャップはゼロにはできないが、なるべく小さくする。トポロジ許容値をこれよりわずかに大きくして、最短経路計算をやり直す。トポロジ許容値を大きくし過ぎると、想定外のショートカットができてしまうので、注意が必要。
4.標高データの取得
以上で作成したのは登山ルートの平面データ(緯度経度)である。このままでも、次項の方法でgpxファイルとして保存して、たとえばヤマレコアプリの山行計画作成に使用することができる(ルート作成>GPSログを登録>ファイルを選択)。標高値はヤマレコアプリが国土地理院のDEM(数値標高モデル)データから取得してくれる。しかし、これを出力することはできない。標高値を加えたgpxファイルを作成するには、標高を付加する作業が必要になる。この作業はQGISでも行えるが、登山用のPC・スマホのアプリやウェブサービスで行う方が簡単である。
注意すべきこととして、国土地理院のDEMには測量方法の違いによりDEM10B、DEM5A等の種類がある。また、データの提供形式として、基盤地図情報と標高タイルの2通りがあり、格子の形状が異なっている。さらに標高タイルには、格子サイズの異なる多数のデータセット(ズームレベルで表示される)がある。これのどの組み合わせを使用して標高値を取得するかによって、同一地点に対して異なった標高値が得られる。特に、高い樹木に覆われた地点や地表面の傾斜の大きい地点では、10m以上の差が生じることもある。標高値取得にどのDEMを使用するかは、各アプリで決まっている(複数の選択肢を提供するアプリもある)。
標高値の付加を行えるアプリと使用するDEMの例をいくつか示す。
・GPXエディタ(ウェブアプリ):DEM5A標高タイルz15(ない場合はDEM10B標高タイルz14)
・ヤマケイオンライン(ウェブアプリ):DEM10B基盤地図情報(標高値のないデータは受け付けないので、QGIS「ベクタジオメトリ>z値を設定」で何らかの値をセットしておく)
・カシミール3D(ウィンドウズ):DEM5A標高タイルから作成(三次元的にスムージング?)したスーパー地形セット。ルートを表示している地図の縮尺に応じて、標高タイルのズームレベルも変わる(最高でz15)
・TrailNote(マック):DEM5A標高タイルz14 / DEM10B標高タイルz14 からユーザーが選択
・Geographica(iOS/アンドロイド):DEM10B標高タイルz14(小数点以下切捨)
・スーパー地形(iOS/アンドロイド):DEM5A標高タイルz14(ない場合はDEM10B標高タイルz14)
標高値取得をQGIS上で行う場合は、以下の手順による。
1)DEMデータの準備
<基盤地図情報を使用する場合>
・国土地理院の基盤地図情報ダウンロードページから、DEM5AあるいはDEM10Bのxmlファイルをダウンロードする。
・QGISのプラグインである Quick_DEM_for_JP を使用して、xmlファイルをgeotiffファイルに変換する。CRSは WGS84/Pseudo-Mercator とする。
・できたgeotiffファイルをQGISにドラッグ&ドロップして、ラスタレイヤとしてロードする。
<標高タイルを使用する場合>
QGISのプラグインである ElevationTile4JP を使用して、データのダウンロードとgeotiff変換を行う。
・ズームレベル:14以下から選択する(登山用としては14だろう)
・DEM5AがあればDEM5A、ない場合はDEM10Bが自動的に選択される
・CRS:WGS84/Pseudo-Mercator を選択
・領域:キャンバスにルート全体を表示した状態で「キャンバスの領域」を選択すれば十分である
・できたgeotiffファイルは自動的にロードされる
2)「ベクタジオメトリ>ドレープ(ラスタ値をZ値に代入)」を使用して、標高値を付加する
注意すべきこととして、国土地理院のDEMには測量方法の違いによりDEM10B、DEM5A等の種類がある。また、データの提供形式として、基盤地図情報と標高タイルの2通りがあり、格子の形状が異なっている。さらに標高タイルには、格子サイズの異なる多数のデータセット(ズームレベルで表示される)がある。これのどの組み合わせを使用して標高値を取得するかによって、同一地点に対して異なった標高値が得られる。特に、高い樹木に覆われた地点や地表面の傾斜の大きい地点では、10m以上の差が生じることもある。標高値取得にどのDEMを使用するかは、各アプリで決まっている(複数の選択肢を提供するアプリもある)。
標高値の付加を行えるアプリと使用するDEMの例をいくつか示す。
・GPXエディタ(ウェブアプリ):DEM5A標高タイルz15(ない場合はDEM10B標高タイルz14)
・ヤマケイオンライン(ウェブアプリ):DEM10B基盤地図情報(標高値のないデータは受け付けないので、QGIS「ベクタジオメトリ>z値を設定」で何らかの値をセットしておく)
・カシミール3D(ウィンドウズ):DEM5A標高タイルから作成(三次元的にスムージング?)したスーパー地形セット。ルートを表示している地図の縮尺に応じて、標高タイルのズームレベルも変わる(最高でz15)
・TrailNote(マック):DEM5A標高タイルz14 / DEM10B標高タイルz14 からユーザーが選択
・Geographica(iOS/アンドロイド):DEM10B標高タイルz14(小数点以下切捨)
・スーパー地形(iOS/アンドロイド):DEM5A標高タイルz14(ない場合はDEM10B標高タイルz14)
標高値取得をQGIS上で行う場合は、以下の手順による。
1)DEMデータの準備
<基盤地図情報を使用する場合>
・国土地理院の基盤地図情報ダウンロードページから、DEM5AあるいはDEM10Bのxmlファイルをダウンロードする。
・QGISのプラグインである Quick_DEM_for_JP を使用して、xmlファイルをgeotiffファイルに変換する。CRSは WGS84/Pseudo-Mercator とする。
・できたgeotiffファイルをQGISにドラッグ&ドロップして、ラスタレイヤとしてロードする。
<標高タイルを使用する場合>
QGISのプラグインである ElevationTile4JP を使用して、データのダウンロードとgeotiff変換を行う。
・ズームレベル:14以下から選択する(登山用としては14だろう)
・DEM5AがあればDEM5A、ない場合はDEM10Bが自動的に選択される
・CRS:WGS84/Pseudo-Mercator を選択
・領域:キャンバスにルート全体を表示した状態で「キャンバスの領域」を選択すれば十分である
・できたgeotiffファイルは自動的にロードされる
2)「ベクタジオメトリ>ドレープ(ラスタ値をZ値に代入)」を使用して、標高値を付加する
5.ルートの保存
「エクスポート>新規ファイルに地物を保存」で gpxファイルとして保存する。
GPX_USE_EXTENSIONS=YES
FORCE_GPX_TRACK=YES
なお、道路が複雑に交錯している場合は、作成したgpxファイルが意図したルートを選択できているかどうか、ラスタの地理院地図上に表示して良く確認する必要がある。
GPX_USE_EXTENSIONS=YES
FORCE_GPX_TRACK=YES
なお、道路が複雑に交錯している場合は、作成したgpxファイルが意図したルートを選択できているかどうか、ラスタの地理院地図上に表示して良く確認する必要がある。
6.付記:最短経路計算を使用しない方法
最短経路計算がどうしてもうまく行かない場合、あるいは道路データの中身を見てみたい場合は、以下の方法がある。
1)想定ルート上の道路ポリラインをコピーペーストで一つのレイヤに集める
2)道路ポリライン内の方向(デジタイズされた際の頂点の順番)をルートの進行方向に揃える:「レイヤのプロパティ>シンポロトジ」で線の向きを示す矢印を表示させ、「線の向きを反転」ツールで方向を揃える。
3)道路ポリラインに通し番号をつける:属性テーブルに新しいフィールドを加え、想定ルート上の始点から順に道路ポリラインをクリックして、該当の行に通し番号を振る。この過程で道路ポリラインの重複を見つけたら、「地物を分割 -> 選択物を削除」を行う。
4)頂点を抽出する:ベクタジオメトリ>頂点を抽出
5)点を線に変換する:ベクタ作成>点を線に変換(オプションの「式による並べ替え」で、3で振った番号を使う)
1)想定ルート上の道路ポリラインをコピーペーストで一つのレイヤに集める
2)道路ポリライン内の方向(デジタイズされた際の頂点の順番)をルートの進行方向に揃える:「レイヤのプロパティ>シンポロトジ」で線の向きを示す矢印を表示させ、「線の向きを反転」ツールで方向を揃える。
3)道路ポリラインに通し番号をつける:属性テーブルに新しいフィールドを加え、想定ルート上の始点から順に道路ポリラインをクリックして、該当の行に通し番号を振る。この過程で道路ポリラインの重複を見つけたら、「地物を分割 -> 選択物を削除」を行う。
4)頂点を抽出する:ベクタジオメトリ>頂点を抽出
5)点を線に変換する:ベクタ作成>点を線に変換(オプションの「式による並べ替え」で、3で振った番号を使う)
お気に入りした人
人
拍手で応援
拍手した人
拍手
fiftynineさんの記事一覧
-
国土地理院の「ビッグデータを活用した登山道修正」の進行状況 34 更新日:2024年03月31日
-
地理院地図の道路データから登山ルートのgpxファイルを作成する方法(QGISを使用)2025/2/6修正 12 更新日:2025年02月06日
※この記事はヤマレコの「ヤマノート」機能を利用して作られています。
どなたでも、山に関する知識や技術などのノウハウを簡単に残して共有できます。
ぜひご協力ください!
コメントを編集
いいねした人
コメントを書く
ヤマレコにユーザー登録いただき、ログインしていただくことによって、コメントが書けるようになります。ヤマレコにユーザ登録する