見出し画像

猛暑対策「日陰ルート」機能をリリースしました!

こんにちは。
『ALKOO by NAVITIME』の開発担当ミネラルポン酢、経路探索エンジンの開発担当のれおンゴ、TeraClimberです。

今回は、ウォーキング/散歩用スマホアプリ『ALKOO by NAVITIME』にてリリースいたしました「日陰ルート機能」について、機能が追加された経緯と、開発背景についてお話しします。


「日陰ルート」機能とは

今回追加された「日陰ルート」を一言で説明すると、現在地から目的地まで日陰を優先した徒歩経路を表示する機能です。

また、『ALKOO by NAVITIME』のルート検索では最大5本のルートが表示されますが、それぞれのルートに占める日陰率(日陰をどのくらい通るか)も確認できるため、ユーザーの選択の幅が広がります。
本機能は、無料で日本全国で利用できます。

使い方

4ステップで現在地からの日陰ルートを表示することができます!

日陰ルートの使い方

なお、「日陰ルート」の表示は日の出から日没までとなります。
ご利用に関する詳細は、以下のリンクをご確認ください。

開発背景

2022年6月末から日本列島は大変な猛暑に見舞われました。
熱中症による救急搬送者は増え、東京では猛暑日の観測回数が過去最高に記録されております。

2022年の猛暑を物語るデータ

しかし移動するには外に出ることは避けられないというところで、少しでも熱中症のリスクを下げて移動できないかを当社で考えました。
そこでビルの日陰に着目し、2022年7月末に地図上でリアルタイムの日陰を確認できる「日陰マップ」機能をリリースいたしました。
この日陰マップの反響は大きく多数のメディアから取材を受け、利用者が増加いたしました。

これを受けて、当社のコア技術である経路探索と組み合わせ日陰を優先する経路を表示できれば、より快適に移動できると考え、この日陰ルートの開発に至りました。

実現方法

日陰マップの描画ロジックを経路探索に落とし込む

日陰の計算方法には様々方法があると思いますが、日陰マップの描画ロジックに合わせる方針を取りました。これにはユーザーが実際にアプリを通して見ている日陰に合わせたルートを出すという狙いがあります。
また、今春から本格的に開発を開始しており、既存の資産を活用し、スピーディーに開発を進めることができました。

左画面:緑の線が日陰ルート。写真と見比べると明らかに日陰を通っているのがわかる。

日陰を優先するルートを実装するためには、日陰を経路探索上で評価可能な情報に落とし込む必要があります。
経路探索上で評価可能な情報に落とし込むために、経路探索ネットワーク上のリンクと日陰の描画ポリゴンを重ね合わせ、各リンクに対しての日陰率を計算することにしました。
日陰率の算出には、ノード間の座標を50cm間隔で線形補間し、各点に対して日陰かどうかを判定し、日陰となる辺の割合を求めるという素朴な方法を採用しました。点ではなく辺の割合としたのは、順方向のリンクと逆方向のリンクとで日陰率が一致する仕様にするためです。

日陰率の計算方法: この例では日陰率は40%になる

経路探索中に日陰を計算するのは難しい

このロジックでもって日陰マップの日陰ポリゴン描画を経路探索に落とし込みたいわけですが、これを経路探索中に行うのは困難です。
具体的には、計算処理があまりにも重いため、真面目に計算していては常識的な時間内にルートが計算できないという問題が発生します。
当社の経路探索アルゴリズムはダイクストラ法をベースとしており多くのリンクを拡散するため、計算量オーダーが大きい場所で重い計算処理はなるべくしたくありません。

1日の各時刻の日陰率を事前に計算

この問題を回避するために、経路探索ネットワークデータに紐づく日陰率のデータとして事前に計算しておくことにしました。
各リンクに事前に日陰率を計算した結果を用意しておけば、経路探索中にはデータ読み込み+アクセスの計算コストだけで済むため、都度日陰率を計算するよりも計算量が抑えられます。

データ作成の苦しみ

この方法で日陰率をデータとして事前計算する場合、データの粒度に気を遣う必要があります。事前計算する時刻が増えれば増えるほどデータサイズやデータ作成コストが増えていきます。
例えば、1日の 6:00 ~ 18:00 で 1分ごとの日陰率を計算するとした場合、
(経路探索ネットワーク上の全リンク数)×(12時間)×(60分)個の日陰率を作成することになります。経路探索ネットワーク上のリンクが約 4000 万個ほどあるので、単純計算で約288億個の日陰率を計算しなければならないことになります。仮に1個の日陰率を1バイトとして表現した場合、この情報だけで約27GBになります。

しかも、日陰というものは1か月もすれば同じ時刻でもその形状は変化します。完全に1日分だけ計算して使い回すという手段も考えられましたが、ルート品質観点で懸念がありました。

(左図)2023/08/01 9:00(右図)2023/09/01 9:00

この問題をなんとかするためには、デイリーで1日分のデータ作成処理を運用する、複数日分のデータを事前に作成するといった手段が考えられますが、ここでは後者を選択しました。データ更新頻度による運用負荷の増加を抑えたかったのと、社内の別サービスによっては未来時刻の検索もしたいであろうと考えたためです。
また、1分単位のような細かい粒度でデータを作成するのは計算量的な問題で困難であったため、時間の粒度を色々と変えてみて、品質面・運用面でちょうど良い落としどころを探ることにしました。
最終的に1か月中の上旬・中旬・下旬で1日ずつで1時間ごとにデータを持ち、最も近い日付と時刻のデータを参照するという形に落ち着きました。データサイズも社内の他データと同程度の規模となり運用可能な範疇に収まりました。

以下はナビタイムジャパン周辺の日陰率のデータを可視化した結果です。
図中に建物は映っていませんが、午前中のデータなので建物の西側(図中左側)に面する道路の日陰率が総じて高くなっています。

2023/07/01 9:00 のナビタイムジャパン周辺の日陰データ

そして経路探索へ

データが作成できればあとは簡単で、経路探索のコスト評価関数に日陰率という評価軸を追加していくだけです。今回は日陰率の大きさを素朴にコストに変換するようにしました。日陰率が低ければ低いほどコストが上がる(=そのようなルートが出にくくなる)という仕組みです。
前述の通り、経路探索時にはデータを参照するだけの構成になっているので、最終的に完成した日陰ルートは他のルートと比べてもレスポンスタイムの劣化もほぼなく実現することができました。

実際にどのくらい日陰ルートが出るか

無事にサービスリリースされたので、ユーザーが実際に検索したログを用いて、日陰ルートがどのくらいアプリ上に出ているかについて調べてみました。以下の条件でログを集計しています。

  • 2023/08/08〜2023/08/21 の間にリクエストされたもの

  • 日陰ルートが表示される対象時刻 6:30〜17:30 にリクエストされたもの

「日陰ルート」と「距離が短いルート」の日陰率を比較して集計した結果

日陰率を比較した値が大きいほど「日陰ルート」の日陰率が「距離が短いルート」の日陰率よりも大きいことを示しています。赤い四角に囲まれたグループでは日陰ルートが表示されています。

「距離が短いルート」の方が日陰率が大きいケースは 「0未満」 に、経路の日陰率が全く変わらない場合には 「0」 のグループに該当します。これらの場合は「日陰ルート」が表示されません。

日陰ルートが表示される割合としては約64%で、「距離が短いルート」と比較して「日陰ルート」は日陰率が平均で約16%向上していることがわかりました。

今後の展開

散歩ルート機能などの他の機能にも表示させ、いろんな部分で利用していこうと考えております。
また、冬には日向を優先したルートを表示できるように対応を進めていこうと考えております。

まとめ

・「日陰ルート」とは、現在地から目的地まで日陰を優先した徒歩経路を表示する機能である
・すべてのルートに日陰率が表示されるため、選択の幅が広がる

ナビタイムジャパンが出した猛暑対策、日陰ルートを使ってみたいと思った方は是非以下から『ALKOO by NAVITIME』をダウンロードして利用してみてください!

『ALKOO(あるこう) by NAVITIME』について

『ALKOO by NAVITIME』 は「健康に興味がある」「歩くきっかけがほしい」「散歩に最適なコースが知りたい」方におすすめのウォーキングアプリです。日々の移動を自動で計測し、おすすめコースやランキング機能で散歩やウォーキングライフをお手伝いします。
歩数を決めるだけで散歩ルートを作成する機能も以前noteに記載致しましたので、ご興味がある方はぜひお読みください!