ヤマレコなら、もっと自由に冒険できる

Yamareco

HOME > ヤマノート > 地理院地図の道路データから登山ルートのgpxファイルを作成する方法(QGISを使用)
更新日:2024年08月16日 訪問者数:1370
ジャンル共通 IT
地理院地図の道路データから登山ルートのgpxファイルを作成する方法(QGISを使用)
fiftynine
 QGIS の v.3.28 から地理院地図ベクトルタイルレイヤーからの地物の選択が可能になり、道路データのコピーペーストが容易にできるようになったので、これを利用して登山ルートのgpxファイルを作成する方法を考えました。
 らくルートを使用すれば登山ルートのgpxファイルは簡単にできますが、あえてこの方法を使う意味としては、たとえば
1)らくルートでルート化されていないが地理院地図には登山道が描かれている(実際に歩けるとは限りませんが)
2)らくルートでルート化されているが地理院地図の登山道とはズレがあり、みんなの足跡を見ると地理院地図の登山道の方に集中しているのでそっちを使いたい(細かいことを気にする人向け)
というような場合に、地理院地図の登山道をデジタイズする手間が省けるということです。
 そもそも QGIS とは?という方は、ネットにかなり情報があるので、検索してみてください。以下の説明はマック版の QGIS 3.28.8 を使用してのものです。ウィンドウズ版はインターフェイスが若干異なるかもしれません。不完全なところのある作業手順なので、実施される場合はまず短いルートで試してみて、要領を掴んでから長いルートを作成するのがよろしいかと思います。
1.作業用QGISプロジェクトの準備
 ・プロジェクトは既存のものでも新規に作成してもよい。CRS は WGS84/Pseudo-Mercator。
 ・タイルデータの追加(ブラウザで接続した後、プロジェクトに追加する)
   地理院ベクトルタイル:Vector Tiles で接続し、シンポロトジで「レイヤ = road」だけにする
   ラスタの地理院地図(背景地図用):XYZ Tiles で接続
 ・仮置き場レイヤの作成(道路データのペースト先)
   レイヤ>レイヤを作成>新規一時スクラッチレイヤ
   ジオメトリ型はラインストリング、CRS は WGS84/Pseudo-Mercator
 ・ラフトレース
   道路データコピーペースト時の補助として、想定ルートを大まかにトレースしておく
2.道路ポリラインのコピーペースト
 地理院ベクトルタイルの道路データは非常に多数の道路ポリラインから構成されている。一つ一つの道路ポリラインは、2つの頂点を結んだだけの極めて短いものから、100以上の頂点からなる長いものまで様々である。この中から想定ルート上のポリラインを選択してコピーし、仮置き場レイヤにペーストする。「地物を選択」ツールで一つ一つコピーペーストすることもできるが、ある程度長いルートになると、「ポリゴンによる地物選択」ツールで想定ルートを取り囲んでコピーペーストして、不要なポリラインを削除する方が能率的である。
 地理院ベクトルタイルの道路データセットは、ズームレベル14以下、ズームレベル15〜17、ズームレベル18でそれぞれ異なるものであり、次の一本化の作業で相互に接続しないことが多い。徒歩道はズームレベル15以上でのみ表示される。ズームレベル18は登山用としては大縮尺すぎる。このため、コピーペースト作業はズームレベル15〜17で行った方が良い。
 QGIS自体にはズームレベルを表示する機能はないが、これを行なってくれる Zoom Level というプラグインがある。また、この3つのズームレベルで背景の地理院地図が異なる。なお、ツールバーの拡大・縮小ツールやマップの下の「縮尺」を使うとズームレベルが変わるが、マップの下の「拡大」の方はズームレベルを変えないまま拡大・縮小できる。
 立体交差の道路は平面上で交差して見えても接続していないので、そこではルートは繋がらない。道路データだけ見ていると、これを忘れることがあるので注意。山の中でもたまに立体交差がある。
3.道路ポリラインの一本化
 2の作業が終わると画面上では一本のルートができたように見えるが、実際は多数の道路ポリラインの集まりに過ぎず、一本のgpxファイルとして出力するにはまだ作業が必要である。
 多数のポリラインを一本の線にするには、全体について一旦「頂点を抽出」した後、「点を線に変換」すればよい。しかし、これをそのまま実行すると、大抵はぐしゃぐしゃの線ができてしまう。その原因は以下の3点にある。

 ・線には方向性があり(デジタイズ時の順番)、想定ルートの方向と逆のものも多数ある。
 ・道路ポリラインにはデジタイズ時に番号が付いており、想定ルートでの順番とは一致しない。
 ・道路ポリラインデータにはかなりの重複がある。

 QGISのベーシックな機能で一つ一つ解消することが可能ではあるが(6.付記 に記載)、かなり手間がかかり、あまり人に薦められるものではない。ところが「ネットワーク解析>最短経路(指定始点から指定終点)」を使用すれば全部が簡単確実にできてしまうことがわかったので、基本的にこの方法をお薦めする。
 ただし最短経路計算のためには、ルートの始点から終点までポリラインが完全につながっている必要がある。このため、道路データのコピーペーストの際には「ポリゴンによる地物選択」ツールを使用して、抜け落ちのないようにする。想定ルートと交差するポリラインについては、想定ルートをショートカットするルートを作るもの以外は削除する必要はない。
 最短経路計算を実施して「始点から終点への経路がありません。」というメッセージが出る時は、想定ルート上にギャップがあることを意味している。ある程度拡大表示してルート上を追跡すると、数十メートル程度以上のギャップであれば発見できる可能性が高い。それより小さいものについては、表示の拡大率を上げ過ぎると追跡の能率が落ちるので、最短経路の終点の位置を変えながら最短経路を計算し直すということを繰り返した方が良い。
 想定ルート上に道路データのギャップが生じる原因は2つある。

1)もともと地理院地図に道路が描かれていない箇所を想定ルートが通る場合
 たとえば、寺社の境内、公園、私有地などを通らせていただくというケース。この場合は、自分で補完する線を描いて、ギャップを埋めてやれば良い(「線の地物を追加」ツール)。

2)地理院ベクトルタイルのデータの不備と思われるもの
 不備の例としては、ラスター画像の破線道同士の交点の直前で、破線の隙間がデジタイズの端になってしまってギャップができているという例があった。破線道が幅のある車道の端で止まっていて、中心線に届いていないという例もあった。一方、最短経路計算の繰り返しでギャップの位置を特定したが、なぜそこがギャップなのか、どう拡大しても分からないこともある。いずれにしても、最短経路計算時のトポロジ許容値(接続しているとみなす点間距離)を大きくすれば解決できる。ただし、この値をあまり大きくすると意図しないショートカットができてしまう可能性があるので、注意が必要である。
4.標高データの取得
 以上で作成したのは登山ルートの平面データ(緯度経度)であり、標高値を加えたい場合はもう少し作業が必要になる。これをQGIS上で行う場合は、以下の手順による。

1)国土地理院の基盤地図情報ダウンロードページから、DEM5AあるいはDEM10Bのxmlファイルをダウンロードする
2)Quick_DEM_for_JP 等を使用して、xmlファイルをgeotiffファイルに変換する
3)geotiffファイルをQGISにドラッグ&ドロップして、ラスタレイヤとしてロードする
4)「ベクタジオメトリ>ドレープ(ラスタ値をZ値に代入)」を使用して、標高値を付加する

 johndoeさん作成の TrailNote(マック用のフリーソフト) を使用すれば、自分で標高データを準備する手間をかけずに標高値を取得できる。この場合は、標高タイルズームレベル14のDEM5AあるいはDEM10Bのどちらかを選択して使用することになる。
5.ルートの保存
 「エクスポート>新規ファイルに地物を保存」で gpxファイルとして保存する。
  GPX_USE_EXTENSIONS=YES
  FORCE_GPX_TRACK=YES

 なお、道路が複雑に交錯している場合は、作成したgpxファイルが意図したルートを選択できているかどうか、ラスタの地理院地図上に表示して良く確認する必要がある。
6.付記:最短経路計算を使用しない方法
 最短経路計算がどうしてもうまく行かない場合、あるいは道路データの中身を見てみたい場合は、以下の方法がある。
1)想定ルート上の道路ポリラインをコピーペーストで一つのレイヤに集める
2)道路ポリライン内の方向(デジタイズされた際の頂点の順番)をルートの進行方向に揃える:「レイヤのプロパティ>シンポロトジ」で線の向きを示す矢印を表示させ、「線の向きを反転」ツールで方向を揃える。
3)道路ポリラインに通し番号をつける:属性テーブルに新しいフィールドを加え、想定ルート上の始点から順に道路ポリラインをクリックして、該当の行に通し番号を振る。この過程で道路ポリラインの重複を見つけたら、「地物を分割 -> 選択物を削除」を行う。
4)頂点を抽出する:ベクタジオメトリ>頂点を抽出
5)点を線に変換する:ベクタ作成>点を線に変換(オプションの「式による並べ替え」で、3で振った番号を使う)
お気に入りした人
拍手で応援
拍手した人
拍手

※この記事はヤマレコの「ヤマノート」機能を利用して作られています。
どなたでも、山に関する知識や技術などのノウハウを簡単に残して共有できます。 ぜひご協力ください!

詳しくはこちら

コメント

まだコメントはありません
プロフィール画像
ニッ にっこり シュン エッ!? ん? フフッ げらげら むぅ べー はー しくしく カーッ ふんふん ウィンク これだっ! 車 カメラ 鉛筆 消しゴム ビール 若葉マーク 音符 ハートマーク 電球/アイデア 星 パソコン メール 電話 晴れ 曇り時々晴れ 曇り 雨 雪 温泉 木 花 山 おにぎり 汗 電車 お酒 急ぐ 富士山 ピース/チョキ パンチ happy01 angry despair sad wobbly think confident coldsweats01 coldsweats02 pout gawk lovely bleah wink happy02 bearing catface crying weep delicious smile shock up down shine flair annoy sleepy sign01 sweat01 sweat02 dash note notes spa kissmark heart01 heart02 heart03 heart04 bomb punch good rock scissors paper ear eye sun cloud rain snow thunder typhoon sprinkle wave night dog cat chick penguin fish horse pig aries taurus gemini cancer leo virgo libra scorpius sagittarius capricornus aquarius pisces heart spade diamond club pc mobilephone mail phoneto mailto faxto telephone loveletter memo xmas clover tulip apple bud maple cherryblossom id key sharp one two three four five six seven eight nine zero copyright tm r-mark dollar yen free search new ok secret danger upwardright downwardleft downwardright upwardleft signaler toilet restaurant wheelchair house building postoffice hospital bank atm hotel school fuji 24hours gasstation parking empty full smoking nosmoking run baseball golf tennis soccer ski basketball motorsports cafe bar beer fastfood boutique hairsalon karaoke movie music art drama ticket camera bag book ribbon present birthday cake wine bread riceball japanesetea bottle noodle tv cd foot shoe t-shirt rouge ring crown bell slate clock newmoon moon1 moon2 moon3 train subway bullettrain car rvcar bus ship airplane bicycle yacht

コメントを書く

ヤマレコにユーザー登録いただき、ログインしていただくことによって、コメントが書けるようになります。
ヤマレコにユーザ登録する
Notice [PHP]: Undefined index: yr_viewmode in file /export/httpd/html/mainfile.php line 145
Notice [PHP]: Use of undefined constant _MI_YAMARECO_VOTE_NOTIFY - assumed '_MI_YAMARECO_VOTE_NOTIFY' in file /export/httpd/html/modules/yamanote/xoops_version.php line 81
Notice [PHP]: Use of undefined constant _MI_YAMARECO_VOTE_NOTIFYDSC - assumed '_MI_YAMARECO_VOTE_NOTIFYDSC' in file /export/httpd/html/modules/yamanote/xoops_version.php line 82
Notice [PHP]: Use of undefined constant _MI_YAMARECO_VC_TITLE - assumed '_MI_YAMARECO_VC_TITLE' in file /export/httpd/html/modules/yamanote/xoops_version.php line 89
Notice [PHP]: Use of undefined constant _MI_YAMARECO_VC_CAPTION - assumed '_MI_YAMARECO_VC_CAPTION' in file /export/httpd/html/modules/yamanote/xoops_version.php line 90
Notice [PHP]: Use of undefined constant _MI_YAMARECO_VC_DESC - assumed '_MI_YAMARECO_VC_DESC' in file /export/httpd/html/modules/yamanote/xoops_version.php line 91
Notice [PHP]: Use of undefined constant _MI_YAMARECO_VC_SUBJECT - assumed '_MI_YAMARECO_VC_SUBJECT' in file /export/httpd/html/modules/yamanote/xoops_version.php line 93
Warning [PHP]: array_multisort(): Argument #1 is expected to be an array or a sort flag in file /export/httpd/html/kernel/comment.php line 446