はじめに
2019FOSS4G Advent Calendarにて、北海道内15箇所にポケモンマンホールが設置されるので最適経路を計算してみたという記事を投稿しましたが、当時は若くネットワーク解析というものを良く知らなかったため、マンホールの所在地を直線で結ぶ自家用ヘリ所有者以外お断りツアー案を紹介してしまいました。いえ、道民たるもの当然自家用ヘリを持っているはずなので問題ありませんが、試される大地を自家用車で移動する勇者のために自家用車版のツアー案を、QGISと国土地理院のベクトルタイルを利用して紹介したいと思います。
必要な材料
- マンホールの位置データ:15箇所
- 道路の線データ:北海道全域
※いずれも同じCRSである必要があります、今回はEPSG:3857です。
マンホールの位置データは前回の記事で既に作成済です。では道路の線データが必要です。さて基盤地図情報のデータでも使いましょうか…。
道路の線データについて
基盤地図情報で公開されている道路データはいわゆる道路境界線で、歩道と車道の境目に線を引いたデータです。
画像で示すと以下のとおりです。
一方で、ネットワーク解析に必要な道路データは以下のようないわゆる道路中心線です。
道路境界線は必ずしもルートを示さないため、ネットワーク解析に適さない事は以下の画像から明らかです。
(点A→点Bの経路を探索しようとしても、線分が繋がっていないのでたどり着けない)
道路中心線データは、オープンデータではこれまで存在しませんでした。がしかし、以前に好評を頂いた記事国土地理院のベクトルタイルから道路中心線をぶっこ抜いた話で紹介したとおり、国土地理院が提供実験を行っているベクトルタイルに道路中心線が含まれています。
このデータ、高ズームのデータは関東圏のみが提供されていましたが、2020年3月19日、ついに全国版が公開開始されました。
ベクトルタイル提供実験のリポジトリによれば、タイルデータは以下のURLだそう。
https://cyberjapandata.gsi.go.jp/xyz/experimental_bvmap_tmp/{z}/{x}/{y}.pbf
前述の記事の手順で、北海道エリアのデータを表示してみると…。
はい、ちゃんと高精度のベクトルタイルデータが北海道エリアでも提供されている事がわかります。
じゃあ記事の手順で道路中心線ぶっこ抜き、ディゾルブによりマルチパートにしておきましょう。
下ごしらえが終わったマンホールの位置データと道路データを表示したのが以下の画像です。
これで材料は揃いました。
GRASSによるネットワーク解析
QGISにプリインストールされているGRASSというライブラリを仕様して、巡回セールスマン問題の近似解を求めます。
プロセッシングツールボックス→GRASS→Vector→v.net.salesmanを実行します。
線の入力レイヤにはネットワークを示す線データ、ここではディゾルブ後の道路中心線データを選択。
中央の点レイヤにはマンホールの位置データを選択。
点に繋ぐかどうかの閾値とは、点と線の距離をどこまで許容するかというパラメータです(点群が線分に必ずしも交差しないため)。点間の距離も十分なので、ここはテキトーに10,000mとします。
実行結果が以下です。
総走行距離1,886.368km
前回のオール直線経路図と比べて圧倒的に現実に沿った結果となりました。
ズームレベルを上げれば、細かな市道やらを含んだかなり精密なデータも得られますが、この程度の密度の(主要道が網羅されている)データで今回の分析には十分と考えます。
終わりに
https://github.com/Kanahiro/-pokefuta_analyzer/blob/master/pokefuta_hokkaido_route.geojson
今回の解析結果は上記のとおりGitHubに保存してあります(GitHubが3857を表示してくれない都合上4326に変換してあります)。
数人で車で大移動する分には新型ウイルスのリスクも低そうですし、今年のゴールデンウィークの予定は決まりですね!
ガソリンも安くなってポケモンマンホール巡礼にはもってこいではないでしょうか、どなたか実行してレポートしてください。以上です。
※本記事で仕様したデータの出典
国土地理院
© MapTiler © OpenStreetMap contributors