見出し画像

自転車向け「周遊ルート機能」の開発秘話

こんにちは。
ナビタイムジャパンで『自転車NAVITIME』のiOSアプリ開発を担当している日本縦断チャリダーと、経路探索エンジンの開発を担当している、こーhey!です。
今回はこの2名で『自転車NAVITIME』の「周遊ルート機能」についてお話します。


「周遊ルート機能」とは

当社のアプリ『自転車NAVITIME』で使える機能で、地図上で走りたいエリアを選んで、走りたい距離を指定すると、自動で周回ルートを作成する機能です。
昨年10月にiOS版を先行してリリースした際にプレスリリースを配信しましたが、今年1月にAndroid版でもリリースしました。

開発に至った背景

自転車は単なる移動手段としてではなく、健康、趣味、散策目的で利用されることも多いです。つまり「特定の目的地に向かいたいわけではないが、自転車には乗りたい」というニーズが一定数存在しています。

従来の『自転車NAVITIME』の機能は、基本的にユーザーが目的地を設定することが前提となっている機能が多く、上記のニーズに完全には対応できていませんでした。

これらのニーズに対応し、『自転車NAVITIME』が提供できる価値の範囲をさらに広げたいということが、「周遊ルート」の開発に至った主な理由です。
また当社のウォーキングアプリである『ALKOO(あるこう) by NAVITIME』で「散歩ルート」という機能が既にリリースされていました。この機能を自転車にも応用できたら、さらに良い価値提供ができるだろうと考えたことも、きっかけの1つでした。

どのような機能が求められているか

特に目的地もなくサイクリングに出発したくなったとき、皆さんはどのようなことを準備しますか? 道に迷わず快適にサイクリングをしたいのであれば、事前のルート計画は必要になると思います。
では、事前のルート計画を行うためにはどのような作業が必要になるでしょうか?

  • どのくらいの距離を走るのかを決める

  • 大雑把にどの方向に向かうかを決める(大体4~8方角くらい候補があると思います)

  • 具体的にどの道を通るか決める

  • 通る場所が決まったら、地図系のアプリにそのルートを設定する

上記のような、 調べたり、考えたり、選んだり、手を動かしたりすることが必要になりそうです。
日常的にサイクリングを楽しんでいる中級者・上級者にとっては、上記は大したことではないかもしれませんが、慣れていない初心者にとってはハードルになってしまう可能性もあります。
そこで、上記のようなことを楽に実施できる機能があれば、サイクリング初心者にとって大きな価値になりそうです。
以上のような背景を踏まえて、今回の機能開発では、

  • 同じ道をなるべく通らないように、出発地から一周して戻ってくるルートが出せる

  • 距離を指定することができる

  • 方角が程よく分散された複数本のルートが出せる

  • 出力されるルートは毎回変化する

を主な要件にしました。

経路探索エンジンでの実現方法

基本的なロジックについて

基本的なロジックは前述した「散歩ルート」と同じものを使っています。
「到達圏探索(※)」を用いて〇〇kmで行って帰ってこられる範囲を計算し、その範囲内からランダムに経由地を選び、それらの経由地をつないで周遊ルートを作っています。

※ ある地点から特定の条件(距離や時間)で到達できる範囲を求める機能

「散歩ルート」ついての詳細については、以下の記事もご参照ください。

自転車に向けた改良について

今回開発した「周遊ルート」は、「散歩ルート」の仕組みをそのまま転用しているわけではなく、『自転車NAVITIME』向けに以下のように改良しています。

  • 「散歩ルート」は1本のルートを出しているが、「周遊ルート」では複数本(本稿執筆時点では4本)のルートを同時に出せる

  • それらのルートは、ランダム性や各ルートの品質を維持しつつ、方角が適度に分散されている(同じ方角のルートばかり出ない)

単にルートを複数本出すだけであれば、既存のロジックを複数回実行すれば良いのですが、これでは同じようなルートばかり出てしまう可能性があります。
ユーザーによっては「この方角は坂道が多いから避けたい」や「この方角には何度も行ったことがあるから、別の方角に行きたい」という場合もあるため、方角についてはある程度選択肢に幅を持たせておく必要がありました。

方角を分散させるだけであれば、候補となる経由地の選び方を調整してあげることで実現は可能でした。しかし、単純に方角の分散だけを考慮すれば済む話ではないという問題もありました。
例えば、海や山に面している場所で方角のバリエーションを出そうとすると、海や山の方角のルートは潰れてしまいます。これは「周遊ルート」として許容できません。

海岸沿いで潰れてしまうルート

したがって上記のような地形の場合は、山や海の方角の潰れたルートは出さずに、品質を保てる方角の範囲内で複数のルートを出せるようにする必要がありました。
今回の開発では、ルートの評価を工夫することでこの問題に対応しました。「散歩ルート」では、単体のルートの品質(形状や距離など)のみを考慮した評価で十分だったのですが、今回の「周遊ルート」ではそれに加えて「複数本のルートの方角がどの程度分散しているのか」という新たな軸を加えました。

既存の評価軸:単体のルートの品質
今回新たに追加した評価軸:各ルートの方角の均等さ

しかし、各ルートの品質を重視することで方角の分散が満たせない、もしくはその逆のようなケースも存在しました。

各ルートの品質を重視した結果、方角が偏ってしまう例
各ルートの方角の分散を重視した結果、品質が悪化する例

今回の開発では、これらのトレードオフに対するチューニングにもかなり力を注ぎました。

以上のような工夫の結果、品質はある程度維持した状態でルートの方角を分散させることができるようになり、当初問題になっていた海沿いのケースについても、なるべく潰れたルートを出さずに方角のバリエーションを出すことができました。(場所や指定距離によっては潰れたルートが出てしまうこともあります)

海から近い場所を出発地とした10kmの「周遊ルート」

このように、今回開発した「周遊ルート」は、既存の「散歩ルート」を活かしつつ、自転車ユーザーのニーズに特化した工夫が施されています。

使い方

そんな「周遊ルート機能」ですが、以下の4ステップでお使いいただけます。

「周遊ルート」の使い方
  1. ドロワーから「周遊ルート」を選択

  2. 周遊ルート作成画面で距離を設定

  3. 周遊ルート検索結果画面で最大4本のルートが見つかる

  4. 「このルートで走る」で走行開始

「周遊ルート」作成画面では、1km単位での距離の指定のほか、表示されている円の中心を現在地からずらすことで任意の場所をルートの開始地点に設定でき、また車通りの多い道を回避するかどうかの設定もON/OFFさせることが可能です。
「周遊ルート」検索結果画面では、最大4本のルートが表示され、ルートの形状はもちろん距離や獲得標高に加え、高低差グラフもご確認いただけます。
また、検索するたびに違ったルートを得られるため、一度検索したことのある条件や場所でも新しい周遊ルートと出会うことができるかもしれません。
これにより、「新しいルートを開拓したい」「前回よりも長距離を走りたい」といったニーズに応え、より気軽かつ飽きずにサイクリングをお楽しみいただける一助となればと考えています。ポタリング、トレーニングなどにお役立てください。

今後の展望

今後の開発では、

  • 「周遊ルート」の音声案内を伴うナビゲーション

  • 検索可能な上限距離の引き上げ

  • 出力されるルートの方角の指定

などの機能拡張を検討しています。
これからもみなさんのサイクリングのお供として使っていただけるよう努めて参りますので、よろしくお願いいたします。
『自転車NAVITIME』の公式X(旧Twitter)アカウント(@navitimebicycle)では新機能のリリースやお知らせなどを更新しています。ぜひこちらもご覧ください。

▼アプリダウンロードはこちらから
iOS / Android