Euviccです。
先日、ルートラボの後継たり得るサービス/スマホアプリを探すということで一本記事を書いてみました。
ちょっと手前味噌?で強引な結論の付け方ではありましたが、上記でワタクシは「せっかくだから、俺は
念のためと"ルートラボ 後継|代替"などをキーワードにしてGoogle検索をかけてみましたが、結果は(あくまで感覚で)
- Stravaルートビルダー ……約8割
- Ride with GPS ……約2割
- フットパス ……なし
でした──やっぱりね/(^o^)\ おおかたそんなところだろうと思っていました。……ふふふん、さすが俺様。目の付け所がシャープ違うのだよ( • ̀ω•́ )✧ドヤッ ←単に逆張りが好きな天邪鬼ってだけです(苦笑)
しかし前回の記事で自分でも書いていましたが、これら3種サービス/アプリの機能のキモであるオートルーティング 。これの精度ってどれが一番優れているのでしょう? Stravaの蓄積データとやらって、他のサービスと比べてどれだけアドバンテージがあるっていうの? 逆にノイズにならないの?🤔
答はカンタン。実際にルートを引いて比べてみればよいのです。え?力技じゃねーかって? ああそうだよ。それがどうした(なぜか逆ギレ) 地理的にある程度わかっている場所でルートを引かせてみれば、引かれたルートが走りやすいか否かなんて自分の経験からある程度わかってるし、推測もできます。……ということで、今回の記事は各サービスに同じ始点/終点でオートルーティングさせてみて
- 各サービス毎の引くルートに応じた向き/不向き
- 総合的に最も優れているサービスはどれか?
を比較検証⇒決定しちゃおうという、なかなかアグレッシブな企画なのであります(`・ω・´)キリッ
対決開始!!!
前提条件について
まず、評価に使うサービス/アプリには以下のものを使用します。オプションでそれ以外のものも余力があったら使うかもしれません。
- Stravaルートビルダー(β) for desktop
- Ride with GPS(以下RWGPSと略記します)
- フットパス・ルートメーカー
手法はpoint to point、つまり始点をクリック/タップし、終点をクリック/タップするものとします。また探索モードは原則「自転車(またはサイクリング)」を設定します。仕様その他の問題でどうしても自転車向けにルートが引けない場合に限り、経路探索の目的(≒距離)に応じて徒歩か自動車のいずれかを設定するものとします。
では、始めましょう。
Round.1 一般道(短距離)
ルート作成結果
- Strava
- Ride with GPS
- フットパス
並べて比較
こうなります。
Stravaが敢えて一度山手通りに出ているのは、そちらの方がよく使われている≒通りやすいと蓄積された走行ログから判断したのでしょうか。一方でRWGPSの方は大きな幹線道路を避ける傾向にあるようです。池袋まではなるべく線路沿い、その先は都電沿いで……王子駅を抜けている模様。裏道系チョイスにしても「それはどうなの?」という感じがします。フットパスは──ちょっとクネクネ曲がりすぎです。これでは寧ろ走りにくいと思われます。
Round.2 サイクリングロード
ルート説明
荒川メインのサイクリストとしては定番のルートです。そもそも荒サイを通ってくれるのか。そして何処で右岸から左岸に移るか?が見どころですね。
ルート作成結果
- Strava
- Ride with GPS
- フットパス
並べて比較
こうなります。
これは……フットパスの一人負けですかねえ(´・ω・`) ていうか何故そのルートを通るのか😞 サイクリングロードを認識できていないのでしょうね(歎息) 一方で残りの2つは強い。特にStravaは徹頭徹尾荒サイを通るルートがきっちり引けています。できる限り右岸を走って清砂大橋で荒川を渡る定番のルートです。すごい。
Round.3 ロングライドはどうか
ルート説明
たかだか100km程度でロング呼ばわりってどうよ?と言われると心苦しいですが、そこは私の走れる最長距離が往復で200km程度なもので、経験上このルートが一番遠いのです。ご勘弁ください💦
ルート作成結果
- Strava
- Ride with GPS
- フットパス
並べて比較
さすがにルート全体を並べても比較にならないと思うので、だいたい同じぐらいの距離で分割して比べてみようと思います。
あらためて思うのですがStrava(モバイル版)のルート表示はわかりにくいですね😥 なぜその色をチョイスしたのか。都心部は青梅街道〜甲州街道で皇居の南を回り永代通りから湾岸(R357)へ抜けるチョイス。千葉国県に入ってもそのまま湾岸〜14号バイパスで蘇我の手前までズドンといって、そこから国道126号で東金へ。王道のコースだとは思うのですが……湾岸通るのはちょっと怖いかな。
RWGPSの方はというと、ひたすら幹線道から一本ズレた裏道を選ぶパターン。都内はできる限り真東に走り抜けようとする意図が見えます。荒川を四つ木橋で渡り14号旧道で江戸川を渡って千葉に入るのですが、それだったらそのまま14号走ってもよいのでは?🤔 船橋の先から津田沼〜千葉氏花見川区/若葉区に至るまではだいぶ面倒なルートを通ってますね。住宅街をクネクネと抜け過ぎてる感があります。で、御成街道に入ってからはほぼまっすぐ片貝漁港に向かって進んでいる感じ。獲得標高からするとなるべくアップダウンの少ないルートを選んでいるのでしょうか? 御成街道以降のルートはちょっとプロファイルを見たい気がします。
さてフットパスなのですが……言わせてもらいましょう。どうしてこうなった(^ω^#)ビキビキ そもそも何故、いきなり北東に進路をとりわざわざ荒川に出るのでしょうか? だったら荒サイ通ってよ、と言いたい😤 江戸川を渡ってから津田沼の先ぐらいまではRWGPSと似たルートですが問題はその先で、いきなり花見川サイクリングロードを遡上している……!!(°д°)ポカーン RWGPSと同様に御成街道に入りたい意図は読み取れるのですが、ならば何故街道に入ってちょっとのところで変な横道に入るのwww←勾配を避けるため、なのかな?
Round.4 林道を征く
ルート作成結果
- Strava
- Ride with GPS
- フットパス
並べて比較
こうなります。
……あれ?🧐 あれあれ?? この結果は……うん、全員アウトですね。そもそもの想定としては、国道140号で滝沢ダムの横を中津川大橋の手前まで進み右折して県道210号中津川三峰口停車場線へ。分岐で左に入って秩父市道大滝幹線17号つまり中津川林道に突入し、立体交差を通って三国峠に至る想定でした。しかしながら、ルートを引かせてみた結果はどれも中津川林道立体交差を通っていません。Stravaもフットパスも、枝沢の滝から登山道に突き進みそのまま尾根道を走破しています。それはおかしいでしょ💢 いっそRWGPSの方が潔いですね。そもそも滝沢ダム方面に行かないw あ〜でもちょっと待って。じゃあ二瀬ダム方面から雁坂トンネルを抜ける気──違う。秩父往還の旧道を登って栃本広場に至り、そこからは──あぁもう!
それにしても。モードは「自転車」に指定してあるのに、何故自転車で通れそうにない*2登山道へと突き進むのか? そもそもお話にならないのはもちろんですが、逆に興味深いですね? 何を根拠としてそのルートを選んだのかマジで知りたいものです。
どうしてこうなったのか考えてみる
なかなか面白い、そして大方の下馬評通り?の結果になったかと思います。やはりStravaっょぃ。そしてフットパスのトンデモ具合は予想以上でしたね😅 くそ、フットパス……信じてたのに(泣)←年間課金しちゃった人柱er(自嘲)
この時点で「使える/使えない」を断じてしまうのはカンタンですが、一応エンジニアの端くれとしてそれで済ませちゃあ面白くない。門外漢ではあれど門外漢なりに、どうしてこうなったのかを少しでも分析してみたいと思います。
そもそも経路探索(ルーティグ)とは何ぞや?
ズバッと答を書いちゃいますw ググって結果のTOPに出てきたサイトから(公的機関ではなく私企業ですけど)。
経路探索とは、出発地点から目的地まで目的に応じた経路を計算することです。
もひとつズバリと言ってしまえば、経路探索というものは数学的には重み付き有向グラフの最短経路探索を行う計算処理そのものです。ここでいう「重み」はもうちょっとわかりやすく言い換えると「コスト」になります。ある経路を通るのに必要な負担の量を数値化したものといえます。
じゃあ、コストってなんだろう?
ある地点Aから出発してBに行く時、A〜B間の距離そのものがまずコストになります。この現実世界におけるコストは他にもたくさんありますが、この日記は主に自転車ネタなのでやはり自転車を中心に考えると、
- 距離
- 交差点/信号の有無&数
- 道路の広さ
- 舗装の有無および品質
- 勾配
- 車の交通量
- 天候(特に風向きと強さ)
なんてあたりが思いつくコストでしょうか。距離が長くてもサイクリングロードなら信号のストップ&ゴーがない分一定速度で巡航できます。勾配つまり坂は上りなら当然速度が下がりますし、下りなら速くなりますが一方で事故のリスクなどは上がります。道路が広くて舗装状況が良ければ走りやすいですが、その一方で車が多い道(国道とか?)なら事故のリスクが上がる──といった具合です。
地理情報に加えて、上記のような位置に関連するさまざまなデータを持ち、活用できる仕組みを地理情報システム(Geographic Information System: GIS)といいます。たいそうな名前ですが、実のところGISという名前を知らなくても、GISは今のご時世ほぼ誰でも使っています。みんな大好きGoogleマップだって情報テンコ盛りのGISそのものですよ😉
最短経路を算出するアルゴリズムというものは、数学的なモデルに限っていえば随分昔から既に知られています。ダイクストラ法とか
実世界(特に商用)の経路探索手法は恐らくもっと複雑且つ高度な計算を行なっているはずです。そういえば先日こんなニュースがありましたよね。
経路探索にGPU!? と当初は思いましたが、GPUはグラフィック処理=膨大な数値演算を高速に行うためCPUの代わりに演算を請け負う存在です。そう捉えるとこういう手法は自然だと思われます。経路探索って最悪の場合総当たりです。そこから最適化によってどれだけ計算量を減らせたとしても最後は物理で殴る=単純な計算能力がモノを言うと思われるので。行列の演算になるはずなので並列処理が必須と思われます。あと最近なら、経路の算出にAIを使っているサービスなんてのも出てきてよい感じがします(もうあるかも)。
あ、そうだ忘れてた。自転車NAVITIMEは私のiPhoneにもインストールしてあるのでした。試してみましょう。試すルートはもちろん三峰口駅前〜(中津川林道)〜三国峠です。
なんてこった。一発ですよ(°д°)ポカーン ちゃんと中津川林道立体交差を経由して三国峠に至るルートがバッチリ引けている……!! ていうかこのスクショ使って大丈夫かな(汗 クレームついたら消すことにします((((;゚Д゚)))))))
キモは背後で持つ情報の種類/量×コスト計算速度ではないか?
最短経路を算出するためには先述したようなコストの情報が不可欠です。それも多ければ多いほど、最短経路の計算精度は向上するはずです。単純に距離の長いルートAと短いルートBがあるとき、それだけの情報しかなければ当然Bを採るでしょう。しかしBは実は未舗装の農道だったとしたらどうでしょう? 自転車で通るのはちょっと骨が折れるかも。いやそもそも通れるのでしょうか──?
ただし、そうやって付加情報が増えれば当然計算は重くなります。膨大な量のデータを高速に検索抽出できるデータベースと、取り出した情報を高速に処理できる(≒なるべく計算量が少ない)エンジン、そして
話がとっ散らかってきたので本題に戻します。今回のルート引き対決でStravaが全体的に強かった理由、それはやっぱり他のサービスよりも情報を多く持っていたからってことなのでしょう。なんといってもStravaには何百万……何千万、いや下手すりゃ億単位の走行ログがサーバに蓄えられています。実際そのデータからよく使われている道を濃い色付けで示した地図──ヒートマップを作ることができ、Stravaはそのデータを公開しているのです。実はこのヒートマップ、あまり倍率(縮尺)が高くないデータであれば誰でも画像として取得することができます。こんな感じに。
東京都23区をメインにしたグローバルヒートマップ*3です。荒川があからさまに明るいですね😎 その次に江戸川とか多摩川、その次に幹線道とかかな。こうやって見ると、比較①でStravaだけ敢えて山手通りに出た理由がわかる気がします。使われる頻度が高い≒走りやすいからみんなに人気がある、と近似してコスト計算に加味しているのではないか?と推測できそうです。
一方で、中津川林道をちゃんと通れなかった問題はこれでは解決できないですね。奇しくもフットパスとStravaは全く同じルートを引いていました。つまり秩父の山奥ではStravaの強みである走行ログの蓄積情報が全然ない→それ以外のコスト情報は同じなのではないか?
なんかちょっと面白くなってきた
ここまで書いてると、なんとなく思えてきます。経路探索サービスを自分で作ることはできないか?無謀な挑戦のようにも思えますが実は意外とそうでもない。世の中にはスゴイ人たちがたくさんいて、そういう方々はオープンソースで経路探索エンジンを作って公開してたりします。その中のひとつがOpen Source Routing Machine略してOSRMです。
project-osrm.org
github.com
Open Source Routing Machine - Wikipedia
残念ながら情報は全て英語ですがそんな難しいもんでもない。↑のリンクの通りソースはgithubで公開されていますので、誰でも入手して自前で経路探索サービスを作ることができます。使用する地図はこれまたオープンソースのOpenStreetMapなのでお金はかかりません\(^o^)/ ……ただし地図のデータをダウンロードするとストレージの容量はおもくそ食います💦 日本全体だと1GBを超えるのでダウンロードには覚悟がいりますね😅 まかり間違っても携帯のネットワークなどではやらない方がいいでしょう。パケ死しますきっとw
……と、ここから先はこのエントリで書こうとしている話からだいぶ離れていきそうなので、一旦これぐらいで止めようと思います。まだ私もOSRMを自分のPCにインストールし終えた程度ですし、localhostで動かして仕組みをもう少し調べてから、別エントリで書こうかな〜、書けるかな〜💦 どれぐらいしたら完成するでしょうか(´ω`) 技術ネタは最後までやり切れるほど根気が続いた試しがないので、ちょっと……いや大幅に自信がありません(苦笑) 期待しないでお待ちくださ──あ、いや待たなくていいですからね全然!(何
結論: やっぱりStravaは強い……が
話を今回のテーマである「オートルーティング対決」に戻ります。結果としてはほぼStravaの勝利と言ってしまってよいのかな〜、と思います。当初の3サービスに限定せずお金に糸目をつけなければ自転車NAVITIMEの方がもっと強い(それどころか最強??)可能性が十二分にありますがw
Stravaのログが少ないor全然無いエリアだったらどうでしょう? 三峰口駅〜三国峠ルートの例のように、Stravaでもさほどアドバンテージはないかもしれません。それに、始点と終点だけの指定でルート引きを全面的に任せるのにはやはり不安が残ります。その辺はかつての(まだあるけど)ルートラボだってそうだったし、一発ドンピシャでルートを引いてくれるサービスは(少なくとも無料or低価格だと)そうそう無いと思った方がよいのかも。適切な中継ポイントを置いてあげればある程度は回避できるので、結局は自分である程度地図と見比べながら「ここにコンビニがあるからここで休憩して──」みたいに分割してルーティングしていくのが良いと思われます。
そう考えると、カーナビのルーティング能力って凄まじいですよね(°д°;;) 基本、始点(≒現在位置)と終点(≒目的地)の2点しか指定しないじゃないですか? もちろんそもそも歴史の長さが違うし、歴史が長ければ蓄積されている情報量が
書き始めてあらためて思いましたが、この地図とルーティングの話は本当に奥が深いです。安易に手を出したことを後悔するぐらいに😅 まあでも乗りかかった船です。自転車ネタに絡めてやってる人もあまり多くない?ようなので、もう2,3歩踏み込んでみてもいいかな?と思っています。それとね……これだけは言わせてほしい。
最後にフットパスに期待して年間課金してしまった私の心の叫びを書き遺して、本日は筆を置きたいと思います(今日2回目の更新だけど)。ではまた!👋