Ride with GPSの仕様と、標高の精度が良いルートを作成する方法
Ride with GPS(RWGPS)の仕様をソースコードとネットワークを流れるデータから解析し、その結果から現状で最も標高を精度良くルートを作成できるであろう方法を記した。
※以下すべて2022年6月6日時点での情報です
RWGPSの仕様
RWGPSの標高取得、橋トンネル補正に関する動作をネットワークデータとソースコードから調査したところ、以下のような挙動をすることが分かった。
- アメリカなど一部地域を除き、デフォルトで使われるDEM(デジタル標高モデル)は90mメッシュである(Grade and Elevation - Ride With GPS HelpRide With GPS Help)。これは使用する地図(Google系かOSM系か)に依らない。
- 橋トンネルデータの取得に関する挙動は使用する地図によって若干異なり、以下の通りである。なお、舗装データの取得に関しても同様である。
- OSM系の地図(RWGPS、OSM、OSM Cycleなど)の場合:
- 経路探索は自前(RWGPS)のサーバを呼び出して行い、RWGPSサーバはOSMデータを利用した経路探索を行う。
- OSMでは、道路に付随するデータとして「橋やトンネルかどうか」「舗装されているかどうか」などの情報を持っており(例えば道路の縁が黒実線になっている所が橋)、経路情報として緯度経度の他に「橋またはトンネルか」という情報も一緒にサーバから返される。
- そのため道路が重なっていても橋・トンネルかどうかは正しく判定される。
- Google系の地図(Map、Terrain、Satellite)の場合:
- 経路探索にはGoogleのDirections APIを利用する。
- GoogleのDirections APIは緯度経度しか返さないため、改めてRWGPSサーバに「この緯度経度の位置は橋またはトンネルか」を尋ねる。
- このRWGPSサーバはOSMのデータを使って、「入力として与えられた緯度経度に最も近い位置にある道路は橋またはトンネルか」で判定している。
- したがって、「トンネルの上に登山道がある場合」「橋の下に別の道路が通っている場合」などは「トンネルではない」と判定されてしまう。その他、OSMで道路の位置がGoogleとずれている場合も正しく判定できない場合がある(これは舗装路・未舗装路の判定も同じ)。
- OSM系の地図(RWGPS、OSM、OSM Cycleなど)の場合:
- 橋トンネル補正機能では「橋またはトンネルの開始地点から20m手前の地点(20m手前までに別の橋トンネルがある場合はその地点まで)」から「橋またはトンネルの開始地点から20m先の地点(20m先までに別の橋トンネルがある場合はその地点まで)」までの標高を、勾配が一定(直線)になるように補正する。
- RWGPSが表示する獲得標高の数値は、独自の平滑化処理を行われた後の数値である。そのため、同じデータをカシミール3Dに読み込ませても、獲得標高の数値は一致しない。
- 平滑化後の値は斜度の計算にも用いられている。
- 平滑化処理は
DJFilter
という名前の関数で行われているが、出典・詳細は不明。距離当たりの獲得標高(+/-)が多いほど強く平滑化処理が効くようになっている。
各地図の特徴
RWGPSで使われるOSM系の地図とGoogle系の地図の特徴を比較すると、以下のようになる。
- OSM系の地図:
- 航空写真やGPSログから有志の人の手で入力されたデータであるため、道路の位置の精度が良くない地域がある(特に精度の良い航空写真を得られず、GPSの精度も落ちる山間部)。
- 「RWGPS」はOSMとは表示方法が違うだけである(参考)が、データの更新に最大3ヶ月程度のラグがあるもよう。
- Googleの地図:
- 以前はゼンリンの地図を使用していたが、2019年に航空写真やユーザの移動履歴などから自動生成する地図に切り替えている。
- 航空写真の切れ目でずれている箇所がある。
- 航空写真の撮影や、地図生成アルゴリズムの改良は頻繁に行われているようで、数ヶ月経過すると同じ道路を通るルートでも微妙に緯度経度が異なることがある。
- 作成したルートのポイント数はOSM系に比べて増える傾向にある。
- Directions APIはGoogleが把握している通行止め情報をリアルタイムに反映する。冬期通行止めの道路を通るルートを冬のうちに引こうと思っても引けない。
できる限り標高の精度良くルートを引く方法
以上のRWGPSの仕様および各地図の特徴を考慮すると、標高の精度良くルートを引く方法は以下となる。
- 日本国内であれば、拙作の「RWGPS地理院標高」を使用して、国土地理院の5m/10mメッシュデータを使用する(手前味噌)。
- 市街地ではGoogle系、OSM系どちらの地図を利用しても大差なし。
- 山間部(つづら折り区間)では航空写真を表示し、Google系とOSM系でより航空写真に合う方の地図を使用する。概ねGoogle系の地図のほうが精度が良いことが多いが、たまにずれている。また航空写真も必ずしもオルソ補正が正しく行われているとは限らない点にも注意が必要。
- Google系の地図を使って橋・トンネルの補正が正しく行われない区間では、トンネル出口の少し外側にコントロールポイントを追加し、トンネル区間部だけOSM系の地図に切り替えるとよい(後述)。
- 長期的には、OSMのマッパーになって自分で地図を作成するのが精度向上につながる(参考: OpenStreetMap Japan | 自由な地図をみんなの手で/The Free Wiki World Map)。
実例
笹子峠の前後でトンネル補正をより正しく行わせる例。
- まずGoogle Mapsを使用してルートを引く。笹子トンネルの上にある登山道でトンネルが切れている判定されてしまう。
- マップを「OSM」に切り替えて、右上の「Click Action」を「Control Point」に変更。
- トンネルの前後2箇所で、Google MapsのルートとOSMの道路が重なる点をクリックしてコントロールポイントを設置する。
- マップを「OSM」のまま、トンネル区間でルートをドラッグし、OSMを用いた経路に修正すると、橋トンネル補正が正しく行われる。