GPX と GeoJSON、軌跡データはどちらがハイキングに向くか
GPX と GeoJSON は、突き詰めれば両方とも座標のリストにたどり着くが、そもそも答えようとしている問いが違う。GPX は GPS の記録そのもの——トラック、標高、各点が記録された時刻——を表すために作られた形式だ。GeoJSON は地図上のあらゆる形——ハイキングルートも、建物の輪郭も、国境線も——を、同じ一握りのジオメトリ型だけで表すために作られている。この目的の違いは紙の上では小さく見えるが、記録したハイキングを実際に両者の間で移そうとすると、思いのほかつまずきやすい。
それぞれが何のために作られているか
GPX は GPS トラックのためだけに作られている
GPX には、この用途のためだけに作られた固定の構造がある。点を並べたトラックで、各点は緯度・経度、たいてい標高、タイムスタンプを持ち、単独のウェイポイントも追加できる。この形式に含まれるどの項目も、GPS の記録に必要だから存在している。設定すべきことも、汎用的な部分も何もない。
GeoJSON はあらゆる地図データのために作られている
GeoJSON は、地図上の形——点、線、多角形——をプレーンな JSON として表す汎用の方法で、まさに何か特定の種類のデータに縛られていないからこそ、Web 地図や GIS ソフトウェアのいたるところで使われている。ハイキングルートは「LineString」になるが、建物の外形も、湖の輪郭も、国境線も、まったく同じ構造で表される。この柔軟さこそ、十数種類もの異なる地物を載せる Web 地図にとっての魅力そのものだ。記録した一回のハイキングにとっては、これはつまり、この形式には「トラック」というものが何であるかという組み込みの概念がそもそも存在しないということになる。ハイキングは、GeoJSON が扱える数ある形のうちのひとつの線にすぎない。
GeoJSON に持っていくとハイキングから何が失われるか
GeoJSON には時刻専用のフィールドがそもそも存在しない。GPX のトラックポイントは当然のようにタイムスタンプを持つが、GeoJSON の座標はただの数値——経度、緯度、任意で標高——であり、形式そのものが他に何かを付け加えることはない。タイムスタンプを残したい変換ツールは、どこかにそれを押し込む場所を自分で発明するしかなく、たいていはフィーチャーの自由形式な "properties" オブジェクトの中に配列として詰め込む。これは標準というより苦肉の策で、同じファイルを読む別のツールがその配列の存在を知っている保証も、意味を理解できる保証もない。
標高はもう少しきれいに残る。各座標の経度・緯度に続く 3 つ目の任意の数値として持てるからだ。ただしこの並び順そのものがよくある落とし穴になる。GeoJSON はつねに経度を緯度より先に書く。これは人が口に出して座標を言うときの順序とは逆で、GPX が自身の属性で使う順序とも逆だ。この入れ替えを間違えた変換は、派手に失敗するわけではない。ルートが地球上のまったく別の場所に描かれたり、本来あるべき向きから逆さまになったりするだけだ。
ハイキングではなぜこの違いが効いてくるか
Strava、Garmin Connect、Komoot、Gaia GPS、CalTopo のようなハイキング・サイクリング向けプラットフォームは GPX を前提に組み立てられている。タイムスタンプがそのまま残ったトラックを必要としているからだ——移動時間もペースも、歩いた道のりの再生も、どこを通ったかだけでなく各点がいつ記録されたかを知っていて初めて成り立つ。こうしたプラットフォームに GeoJSON ファイルを渡すと、うまくいっても記録したハイキングを記録たらしめていたタイミング情報が抜け落ちたまま、ルートの形だけが取り込まれる。最悪の場合、そもそも受け付けてもらえない。
GeoJSON の本拠地はそれとは別の場所にある。Web 地図、GIS ソフトウェア、ひとつの活動として単独で存在するのではなく、他の種類の地理データと並んで置かれる必要がある場面だ。Web サイト上のカスタム地図、trails を敷地境界と重ねて表示する QGIS のプロジェクト、GitHub のリポジトリでそのままプレビューされるルート——どれも GeoJSON をネイティブに読み、そもそも GPX のタイムスタンプに特に用はない。
並べて比べる
- 目的: GPX は GPS トラック専用に作られている。GeoJSON は地図上のあらゆる形を表す汎用形式。
- タイムスタンプ: GPX は各点に持つのが基本項目。GeoJSON には時刻専用のフィールドがそもそも存在しない。
- 座標の順序: GPX は属性の中で緯度を経度より先に書く。GeoJSON はつねに経度を緯度より先に書く——ルートの位置がずれたり入れ替わったりする、よくある原因のひとつ。
- 由来: GPX は GPS データ専用として 2002 年に公開された、特定の企業に属さないオープンな形式。GeoJSON は後になって Web 地図・GIS の標準として整備された。
- 対応状況: GPX はハイキング・サイクリング・地図系プラットフォームのほぼすべてがネイティブに読める。GeoJSON は Web 地図と GIS ツールがネイティブに読み、アクティビティ中心のフィットネス系プラットフォームでの対応はより限られる。
- 向いている場面: GPX はタイミング・ペース・再生をそのまま残したい記録済みのハイキング向け。GeoJSON はカスタム Web 地図に表示したり、他の GIS レイヤーと合わせて分析したりするルート向け。
相互変換
GPX から GeoJSON への変換はよくある、対応も広い手順で、GPSBabel のようなツールや、いくつもの無料ブラウザ変換ツールが一度の操作でこなしてくれ、ルートの形はそのまま残る。ただしその後どうなるかはツール次第だ。タイムスタンプをそのまま黙って落とすものもあれば、properties オブジェクトの中に詰め込むものもあり、受け取る側のツールがそこを見にいくとは限らない。タイミング情報が後の用途で重要なら、出力結果は確かめておく価値がある。
逆方向、GeoJSON から GPX への変換は、座標そのものについてはきれいに済む。ただし変換ツールが戻せるタイムスタンプは、そもそも GeoJSON のどこかに保存されていたものに限られる。タイミング情報を一度も持っていなかった GeoJSON ファイル——GeoJSON はそれを必須にしていないので、大半がこれに当たる——は、タイムスタンプが一つもない GPX トラックに変換される。地図の上では正しい線だが、移動時間やペースを求めるプラットフォームにとっては、ほとんど扱いようがないものになる。
TrailCam が書き出す形式
TrailCam は GPS でルートを記録し、1 本のルートも履歴全体も GPX 1.1、あるいは CSV のサマリーとして書き出す。GeoJSON は書き出さない。ハイキングにとって、GPX は「描いた線」ではなく「記録」たらしめている部分——各点に付いたタイムスタンプ——をそのまま残すために作られた形式だ。それがあるからこそ移動時間もペースも獲得標高もそもそも計算でき、Strava、Garmin Connect、Komoot もこのファイルを何も失わずに読める。書き出しは任意の TrailCam Pro の機能で、アプリ自体は無料でダウンロードできる。
よくある質問
- GeoJSON は GPX よりハイキングに向いていますか?
- 記録したハイキングをそのまま残す用途では向きません。GeoJSON には時刻専用のフィールドがなく、変換ツールが独自の方法でわざわざ保存しない限り、移動時間・ペース・獲得標高の計算に使うタイミング情報が失われます。GPX はそのタイミングを形式の核となる部分として持っています。
- GeoJSON に変換したらルートが違う場所に表示されるのはなぜですか?
- 多くの場合、経度と緯度の順序の取り違えが原因です。GeoJSON はつねに経度を緯度より先に書きますが、GPX 自身の属性は逆の順序です。変換ツールや自作のスクリプトがこの入れ替えを間違えると、エラーで止まるのではなく、ルートが地球上のまったく別の場所に描かれてしまいます。
- TrailCam は GeoJSON を書き出せますか?
- いいえ。TrailCam が書き出すのは GPX 1.1 か CSV のサマリーで、どちらも各点にタイムスタンプが残ります。これは Strava、Garmin Connect、Komoot がいずれも前提としている情報で、歩いた道のりの再生もこれに支えられています。
自分のルートを記録する
TrailCam は iPhone 用の GPS ルート記録アプリです。動画・写真・音声メモを撮ったその地点に紐づけて保存し、GPX 1.1 または CSV で書き出せます。ダウンロードは無料です。