TL;DR
GPS / GNSS デバイスとソフトウェアの間や、アプリケーションどうしで位置データをやり取りするためのデータフォーマット。XML をベースにしている。
仕組み
GPX は次の 3 種類のデータを持てる。
- ウェイポイント(Waypoint): 特定の地点の座標
- トラック(Track、軌跡): 実際に記録された移動経路
- ルート(Route): 目的地までの経路
主要な要素
ルート要素は <gpx> で、名前空間、バージョン、スキーマの情報を書く。この中に、ウェイポイント(<wpt>)、トラック(<trk>)、ルート(<rte>)を入れる。
<wpt> はウェイポイントを表す要素で、型は wptType である。緯度と経度を属性として持ち、要素の中に高度(<ele>)や時刻(<time>)を持つ。後述する <trkpt> と <rtept> も同じ wptType である。
<wpt lat="42.439227" lon="-71.119689">...</wpt><trk> はトラックを表す要素である。<trkseg> が 0 個以上のトラックポイント(<trkpt>)を順序付きで持ち、<trkpt> が 1 つのトラックポイントを表す。
<rte> はルートを表す要素で、複数のルートポイント(<rtept>)を順序付きで持つ。
<extensions> には独自の XML 要素を入れられる。Garmin などの GPS メーカーは、ここに住所、電話番号、温度、心拍といったデバイス独自の情報を記録している。
例
地図上に GPX のデータを表示するときは、GeoJSON に変換することが多い。TypeScript では次のライブラリが使える。
自分の理解
<extensions> は、Google Calendar API の Extended Props のようなものだと理解している。
いろいろなサイトが出力している GPX ファイルを見ると、経路は <trk> で表しているようだ(例: Google マップから GPX を作成)。