GPX でハルヒルを分析!

突然ですが、斜度 10% と聞いて、皆さんはどのように思いますか?

峠道や高速道路などでも、傾斜の注意喚起として看板を見かけることがある「斜度」という指標ですが、その名のとおり道路の勾配を示すものとしてよく使われます。例として挙げた「斜度 10%」は、水平に 100m 進んだ時に、10m 上がる(水平の 10% 分、上がった)程度の勾配であることが分かります。

話は少しそれますが、自転車乗りの方々はこの「斜度」という指標をすごく気にします。なにせ自分の力で前に進まなければならないわけですから、どの程度の勾配なのかは、どれだけ辛い思いをしなければならないのかに直結してくるためです。

道の高低を示す地図として、よく断面図が使われますが、自転車乗りが知りたい情報には、断面図以外に斜度も含まれているのです。

そこで、去る 5 月 19、20 日に群馬県高崎市で開催された、第 6 回 榛名山ヒルクライム in 高崎に参加してきた際に取得した GPX ファイルをもとに、ArcGIS Desktop を使用して斜度を計算してみました!

計算した斜度の情報は、ストーリーマップ ジャーナルとして、ハルヒルの要所とともに紹介させていただいております。

トップ画

※画像のクリックでアプリケーションが開きます。

このブログでは、高さ情報を持った GPX ファイルから ArcGIS Desktop のジオプロセシング ツールを駆使して、ラインのセグメントごとの高度の上昇量をもったデータを作り出してみたいと思います。

GPX ファイルをポイント データに変換
まずは [GPX → フィーチャ] ツールを使用して、GPX ファイルを ArcGIS で利用可能なフィーチャ
クラス(ポイント)に変換します。

gpx_フィーチャ

ポイント データをラインに変換

続いて、[ポイント → ライン] ツールを使用して、ライン データに変換します。

ポイント_ライン

ポイント データを使ってラインを分割
先ほどの手順で作成されたライン データは 1 本のラインとして作成されてしまっていますので、[ポイントでラインを分割] ツールを使用して、頂点ごとに分割します。

※このツールの実行には ArcGIS Desktop の Advanced ライセンスが必要です。
Advanced ライセンスをお持ちでない場合は、ArcMap 向けにご用意しております、[ジオメトリ変換ツール] をご利用ください(ESRIジャパン サポートサイトへのログインが必要です)。

ポイントでラインを分割

ライン データを投影変換

GPX データの座標系は WGS 1984 で作成されますが、この座標系では距離の計測を正確に行うことができません。

今回は群馬県高崎市と地域が限定されているので、[投影変換] ツールを使用して、平面直角座標系 第 9 系と設定します。

投影変換

座標系を変更したことによって、ライン データの長さを示している Shape_Length フィールドの値が、メートル単位のものに計算されます。元々の GPX データの持っている高さ情報の単位もメートルなので、ようやく目的としている「斜度」の計算に近づいてきました。

投影変換_結果

ライン データに GPX のポイント データを空間結合

上の画像を見てお気づきの方もいらっしゃると思いますが、これまでつくってきたライン データは GPX のポイントの頂点ごとに分けたラインに過ぎません。
そのため、もともとの GPX が持っていた高さ情報は抜け落ちてしまっています。そこで [空間結合] ツールを使用して、GPX の高さ情報をライン データに付与します。

空間結合

空間結合されたライン データの統合

空間結合されたライン データは以下のように作られています。

空間結合_結果

先ほど行った空間結合では [1 対多の結合] として結合したため、同じ場所を示すライン データであっても、2 本以上に増えてしまっています。

なぜ、2 本以上に増えてしまっているのかですが、現在は「始点のポイントの属性が結合されたライン」と「終点のポイントの属性が結合されたライン」として新たにデータが作られたためです。「斜度」の計測をするには、ラインの長さはもちろんのこと、どのくらい上昇したのかも計算できなくてはなりませんので、[1 対多の結合] を選択しておりました。
しかし、同一のラインを 2 本以上残しておく必要はありませんので、[ディゾルブ] ツールを使用して
始点、終点の高さ情報を保持しつつ、ラインを統合してしまいます。

ディゾルブ

斜度を計算

長い道のりでしたが、ようやく斜度を計算できるデータを作りあげることができました。

空間結合_結果

2 つの「Elevation」(始点と終点の高度)と「Shape_Length」(長さ)から、[フィールド演算] を使用して、斜度を計算します。

フィールド演算

斜度のフィールド(Inclination)を追加し、フィールド演算を実行します。
始点と終点の高度が同じ場合(上昇量が 0 の場合)、斜度を計算する際の除算ができないので、Python の条件分岐を使用して切り分けています。

後は、適宜シンボルの設定をしたら完成です!

完成

いかがでしたでしょうか?
GPX ファイルはスマート フォンやタブレット端末等でも作成することができる、身近なファイルです。ArcGIS Desktop のジオプロセシング ツールと組み合わせることで、様々な活用法が考えられますので、ぜひ皆さんも試してみてください。

■関連リンク