自転車向けのコースプロファイルに欠かせないのは、なんと言ってもアップダウンの情報。どの程度の登りがどのくらいあるかで難易度は全く違うので、自分の足にあったプランも立てにくくなります。
実は以前から標高プロファイルを表示する機能は実現できていたのですが、標高データはOpenStreetMapのデータには含まれておらず、別に入手したデータをその使用許諾条件に従って使うことになるため、個人的な利用にとどめていました。
というのも、フリーの標高データとしてメジャーなSRTM(Shuttle Radar Topology Mission: NASAのジェット推進室のサイトで配布)よりも、若干使用条件の厳しい国土地理院の数値地図の方がきれいにできてしまったので、つい公開するよりも自分にとってうれしい方を選択してしまった(笑)という次第。
しかし、前回の記事でOSRMに標高の考慮を入れることができることがわかったこともあり、再度SRTMと数値地図の再評価をしながら、記憶を辿って手順を整理し直すことにしました。
以前、標高データを使って行ったのは以下の2つ。
- OSRM で探索したルートに標高情報を追加する
- 地図に等高線と陰影をつける
今回は主に前者にフォーカスします。
標高情報データの入手
試してみた標高データは以下。
- 国土地理院数値地図標高10mメッシュ:基盤地図情報ダウンロードサイトから取得可能(ダウンロードにはアカウント登録が必要)
- SRTM3:3秒角(約90m)メッシュ。ここからダウンロード可能。
- SRTM30:30秒角(約900m)メッシュ。ここからダウンロード可能。
- SRTM 250m: 予めGeoTIFF化してあるもの。恐らくここからダウンロードしてきた。
データの選択は、メッシュサイズが細かいほど精度が高くなるが、データサイズは大きくなるというところでの兼ね合いになります。それぞれのデータを比較してみます(富士山付近)。各データともそれぞれデータ形式が違うのですが、扱いやすいようにGeoTIFFに変換(手順は後述)。
ここで気になるのは、SRTM3のところどころデータの欠落です。これだと等高線を作成したときにかなり気になるノイズとして現れてしまいます。さすがに日本のデータに関しては国土地理院地図は優秀です。
範囲とデータ型が若干異なるのですが、国土地理院10mメッシュで20GB, SRTM3で1.1GB, SRTM30, SRTM250は200MB程度になっています(SRTM30は配布されているメッシュの都合上かなり広範囲なので、必要部分を切りだせば100MB以下になると思います)。
【覚書1】 国土地理院数値地図標高XML形式→GeoTIFF変換方法
ここからツールを入手して、QGISプラグイン上もしくはコマンドラインで変換。
$ fgddem.py [-replace_nodata_by_zero][-out_dir output_directory] src_files
【覚書2】 SRTM3(.hgt)→GeoTIFF変換方法
$ gdal_translate -of Gtiff -a_srs EPSG:4326 E100N40.DEM E100N40.tif
【覚書3】 SRTM30(.DEM)→GeoTIFF変換方法
$ gdal_translate -of Gtiff -a_srs EPSG:4326 E100N40.DEM E100N40.tif
同一ディレクトリに、*.HDR, *.PRJ, *.STXファイルが必要っぽい。
OSRMのルート探索結果に標高情報を追加する
以前の記事で紹介した planner は、leafletと呼ばれるjavascriptライブラリを使っています。そこで使えるプラグインがないか探してみると、バッチリ Leafet.Elevation というのがありました。
ルート情報のGeoJSONの各ポイントの位置情報を(緯度、経度、高度)としたものを与えてあげれば、標高プロファイルを作成してくれます。問題は、OSRMが標高データを返せるようにはなっていないこと。なので、一旦OSRMから受け取った情報に標高を付加して返してくれるWebAPIを作成しました。この実現に先ほど紹介した標高データを使うわけです。
使うデータとしてSRTM30は荒らすぎるので、1) 国土地理院、2) SRTM3、3) SRTM250mで小田原〜箱根ルートのルートプロファイルを比較してみました。
国土地理院数値地図データを使いたくなる理由が納得いただけたと思います。ただ、当初はSRTM3は先に述べたデータ抜けで使い物にならないと判断していましたが、等高線と違ってルート探索は道路のある部分のデータ以外は不要なので、十分使い物になることに気づきました。
なので、この機会に公開しているplannerにSRTM3を使った標高表示機能を追加しました。修正後のソースもgithubで公開しています。
地図に等高線と陰影をつける
一旦、GeoTIFFファイルができてしまえば、等高線や陰影図の作成はGDALのコマンドの組み合わせでできますが、なんか記憶が曖昧なので改めて整理することにします。こんな感じの地図がご家庭でお気軽(でもないけど)に作れます。
TODO
- OSRM で直接高度情報を返せるようにする
- 累積標高の計算・表示