テクノロジー

2019.12.10

地図上の位置情報を扱うには? Geohashの応用と「災害マップ」機能の裏側

Yahoo! JAPAN Advent Calendar 2019の10日目の記事です。一覧はこちら(外部リンク)

トップ画像

こんにちは、天気・災害サービスの担当をしているエンジニアの松尾です。今回は2019年10月11日にYahoo!防災速報アプリに追加した新機能「災害マップ」について開発の裏側をご紹介します。 こちらの機能は、近年の多発する災害に対して自分の身に危険が迫る前に、ユーザーに周囲の危険を知ってもらい、備えや避難の判断材料に活用してもらうために提供しました。
(本機能は約1カ月の期間限定で提供しており、2019年12月時点では提供しておりません。今後は、機能提供期間中の利用状況をもとに、順次機能追加する予定です。)

Yahoo!防災速報アプリについて

Yahoo!防災速報アプリでは、緊急地震速報や豪雨予報をはじめ、15種類のさまざまな情報をプッシュ通知でいち早くおしらせします。 アプリ画面上で、現在地や登録した地域ごとに、最新の災害情報のほか、災害の種類ごとの避難場所を確認できます。

Yahoo!防災速報アプリの機能説明画像

災害から1人でも多くの人を助けるために

発災前から発災後に渡って渦中のユーザーに対して、災害時の行動を支援する判断材料の提供と自助共助が機能する場づくりを目的として、私たちは災害マップを開発しました。

災害マップではユーザー自身が現在地の状況を投稿し、周辺ユーザーと共有することで、より迅速な避難行動を促すことができます。 また、ユーザーの現在地および設定した地域の災害状況の投稿が一定数を超え、所定の条件を満たした場合に異常を知らせるプッシュ通知がユーザーに届き、迫りくる危険を比較的早い段階で察知できます。

投稿画面と異常感知通知画面

ユーザー投稿から周囲の身の危険を知る

災害マップの一番の特徴は地図上に表示された「気象庁発表情報(土砂災害や洪水の危険度)」 x 「ユーザー投稿」の組み合わせで自分の身の周りの状況をより具体的に知れることです。

土砂災害や洪水の危険を知らせる、避難情報や大雨危険度といった情報は市区町村などの広いエリアに発令されるため、山間部では危険が迫っているが街の中心部ではそこまで危険はないという状況が発生することがあります。 そういった状況に対して、ユーザーからの投稿情報を地図上にプロットした表現で情報を補強することで、周辺のより具体的な状況をユーザーへ届けることができます。 これにより、ユーザーの避難行動などの判断材料として利活用いただけます。

また、今回はユーザーからの投稿を受け付ける機能があるため、Abuse(ユーザーの不正投稿やいたずら・デマ)対策に関しても配慮しました。発災間近や発災中を知らせる通知との連携を前提にしていたり、現在地連動を有効にしているユーザーのみが投稿できるようにするなど、適切な利用者による適切なシーンでの投稿であればAbuseは多くは発生しない、という仮説のもとで仕様を工夫して決定していきました。

ユーザー投稿を元に異常感知情報をプッシュ通知する新しい試み

開発で最も注力したことは、「異常感知情報」のプッシュ通知の仕組みを考えることでした。 既存の災害情報は気象庁や各自治体などが発表した情報を外部の情報提供会社から受け取り、対象地域に配信しています。

一方で、災害マップの異常感知情報では、不特定多数のユーザーから投稿を集め、その投稿を元に所定の条件を満たすとその近隣のユーザーへプッシュ通知を配信します。 そのため、どういった条件の場合にどの地域に通知を配信すべきかを自分たちで考えて仕組みを作る必要があり、天気・災害サービスでは初の試みでした。

プッシュ通知が配信される条件は、「地図上の一定の範囲内」で「身の回りに異常を感じるという投稿数がある閾値」を超えた場合に「所定の対象地域」に配信するとしました。

エリアを分割して位置情報を扱えるGeohash

そこで、上記の要件と相性が良いGeohashに着目しました。

Geohashは、地図を格子状に分割し、その1区画を短い文字列で表現できるというものです。 例えば、東京駅周辺はGeohash6桁では「xn76ur」と表現されます。ちょうど下図の赤色で塗られている領域です。

これは緯度・経度から計算で求めることができるジオコーディング方式で、「xn76ur」は、緯度経度の座標を2進数にして、それぞれの値を交互に並べてBASE32でエンコードすることで表現されています。

Geohashは階層的なデータ構造になっており、任意の桁数で区画の範囲を表現できるので、桁数を大きくするとより狭域を表現でき、桁数を小さくするとより広域を表現できます。

Geohashの桁数と表現できる区画の範囲は下記の通りです。

Geohashの桁数 南北の距離 東西の距離
1 4,989,600.00m 4,050,000.00m
2 623,700.00m 1,012,500.00m
3 155,925.00m 126,562.50m
4 19,490.62m 31,640.62m
5 4,872.66m 3,955.08m
6 609.08m 988.77m
7 152.27m 123.60m
8 19.03m 30.90m
9 4.76m 3.86m
10 0.59m 0.97m

また、近隣の区画は似た文字列で表現できることから、あるGeohashの区画の隣の区画は簡単に計算で求めることができます。

災害マップでの配信対象エリアの決めかた

そのため、このGeohashを使って、区画を1つの単位としてユーザーの投稿を集計することとしました。そして、1区画内で所定の数の投稿が集まり、危険と判断された投稿が閾値を越えると、その区画はいつもと違う異常な状況が発生していると判定します。 ある区画を異常と判定したら、その区画から周囲の区画を計算し、プッシュ通知の対象とすることで、周囲のユーザーに対して危険を知らせることができる仕組みとしました。

今回は台風などの水害をターゲットとしてうまく機能するようにパラメータを設計しました。 一般的に避難や災害の備えをするのに2〜3時間が必要と言われているため、危険が迫るであろう地域をそこから逆算してプッシュ通知の対象としました。

そして、ユーザー投稿を集計する範囲は既存通知の想定開封率や人口分布図などを基に、さまざまなシミュレーションや検討を行い、投稿がもっとも適切に集まるであろう範囲を決定しました。 また、異常感知を判定する閾値も人口分布に応じて地域ごとにそれぞれ設定し、より柔軟な条件で判定できるように設計しました。

実際にユーザーに使われてわかったこと

当初は10月16日にリリースを予定していましたが、台風19号接近に伴い前倒しで10月11日にリリースしました。 頑張って前倒した甲斐もあり、各種メディアでも取り上げられたりSNS上でも話題になったり、想定以上のユーザーにご利用いただけました。

ユーザーの声を見ていると、「マップ上で周囲の状況や危険な場所を確認できてとても便利!」などおおむねポジティブな意見が多く、 ユーザーに活用いただいていたようで予定より早くリリースできて本当に良かったと思います。

また、想定以上の投稿数に対して不正投稿やいたずら投稿が非常に少なかったことは、利用シーンや機能設計によって、そうした投稿が自然抑制されるという立証になったとも思います。 台風19号のユーザー利用状況を検証した結果、投稿が多くなった場合の地図の見え方や、大雨危険度や避難情報以外の災害情報にも通知連携した方が適切なタイミングでユーザーに周辺状況の投稿を促せるのではないかといった、使い勝手の面や通知連携などさまざまな課題点・改善点が見えてきました。 今後はこれらの課題を解決し、ユーザーにとってさらに利用しやすいプロダクトに改善していきたいと考えています。

終わりに

最後までお読みいただきありがとうございました。 ヤフーでは他にも災害対策の技術的取り組みをしており、自然災害に負けない社会に向けてという記事で紹介していますので、よろしければご覧ください。

災害マップはこれからもアップデートを重ねて、災害時にユーザーの適切な避難行動の支援ができるように改善に努めてまいります。 また、今後もより安定したサービス稼働を目指していきたいと思います。


松尾 亮太朗

天気・災害サービス エンジニア

天気・災害サービスのバックエンドシステムの開発をしています。 今までYahoo!防災速報アプリのリニューアルや大雨危険度通知などのコンテンツの開発を担当。

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

関連記事

このページの先頭へ