追記)2023/10/30 0:25
コイツを投稿後に、少し画面や機能を追加・修正したのでそれについて書きました。
長い前フリ
なんだか最近クマが出没したというニュースを頻繁に目にしますが、地元の人以外はクマがどのあたりに出没したかさっぱりわからないなぁなんて考えていました。
そこで、時代はオープンデータだって政府筋も騒いでいる昨今、さぞ立派な使いやすいデータが公開されているんだろうといろいろ探したんですが、これが見つからない。
私と同じような考えでいろいろと動いていたらしい朝日新聞のデジタルチームの報告がnoteに掲載されていました。
この投稿を読むと、情報としてはいろいろと公開されてはいるものの、目撃、被害、駆除などの場所が「だいだいこのあたり」的な文字だけでの住所地番情報のみで、それを地図にプロットするなど利用しようものならば特に地元民以外はなんだかよくわかないので正確ではない可能性が高いため、位置情報の特定からやらなければならない。それって非常に手間がかかってしまうという苦労が綴られています。
そんななか、データを探しまくった結果、なんと京都府がクマ目撃等の情報として位置情報(緯度経度)も含めたものをオープンデータとして公開されているのを発見しました。
エクセルファイルというのがちょっと残念な気もしますが、ヘンに編集した印刷用エクセルではないのがありがたい。
で、ダウンロードしたエクセルをGoogle Clabo上でpandasに取り込んで、ちょっとゴニョゴニョしたあとにfoliumで地図上にプロットしてみました。
登録されているデータ件数は2009年から2018年までの10年間で10,225件でした。一年間で約1,000件の目撃、捕獲その他の報告がされているわけで、これを見ただけで最近騒がれ始めただけじゃなく、これまでも多くの目撃情報があったことがわかります。ただしクマと遭遇して人間が被害にあった事故や都市部の近くで目撃される機会が少なかったからあまり話題にならなかっただけなんでしょう。
で、10,255件は多すぎるので、2018年分だけ取り出して地図上のプロットしたのが下に貼ったイメージです。
(この地図では国土交通省が公開している行政区分データを元に、京都府を青っぽく色付けしてますが、本当は市町村を色分けするなりすればもっとわかりやすかったんでしょうが、めんどくさかったのでfoliumデフォルトの青色そのままです。話は変わりますが、色付けして区分をはっきりさせると京都府ってこんな形だったんだって初めて知りました。勉強になるなぁ)
foliumは作成した地図データをhtmlファイルとして保存出来ます。それをブラウザで表示すれば、 Google Mapと同じく拡大したり縮小したり移動したりが自由自在で、今回の地図にはデータにあった報告内容もpopupとして表示されるようにしていますので、以下Google Strageにfoliumが吐き出した素のhtmlファイルを保存してますので、クリックすればそれを確認することが出来ますよ。
こういったように位置情報をもったデータが公開されれば、市井のわたしのようなヒマ人が勝手にデータを使って地図上にプロットして公開したりして、それがもっと発展してすごくカッチョいいサービスになったりする可能性もあるわけです。
いずれのせよ位置情報が付与されたデータが少ないってことは事実で、なぜそれが出来ていないかってのを勝手に想像してみました。
ここからが本題
仕事柄 自治体に出入りする機会があるので前に一度クマやシカ、イノシシなどを捕獲したときの報告情報をデータとして管理したいという要望を耳にしていろいろと話を聞いた経験がありますが、いちばんのネックは場所の特定なんですね。仕留めた害獣に対しては報奨金(っていうんかな?)が出る場合があるので、役場に電話で連絡が来て担当職員が軽トラで現地に行って捕獲した動物を受け取るなどやってたりしますが、その場合にはまだ職員による場所の特定は出来るのでしょうが、目撃情報や被害情報などを電話だけで受けた場合には「〇〇町周辺」などという記録だけで詳しい位置情報は取得出来ず、またできたとしてもそれをデータとしてどうやって記録するかというのが(PCなど扱いなれない職員の方々にとって)難しい課題としてありました。いちどGoogle Mapで対象の位置をクリックすると緯度経度が表示されるんで、そいつをエクセルなどにコピペしてみてくださいなどと言ったこともあるけれど、めんどくさくてあれはだめですね。
じゃあ何丁目何番地の住所表示情報を登録しとけば、あとからその情報から位置情報を逆引きができるじゃないかって考えもしましたが、イノシシやシカ、クマなどは山の中や広い畑や田んぼのあたりに出没しがちなので、そんな場所をピンポイントで指定できる住所表示情報はないのでこれまた却下です。
そんなこんなで「なんとかならんかなー」と考えてた私ですが、仕事がヒマな時期にちょっくらPythonの勉強も兼ねて自分でそれっぽいものをつくってみるかと決心し、cssやjavascriptなど全くのシロートが見様見真似でクマ発見報告情報を記録するためのサービスをつくってみました。
その名は「WatchOut4BEARS」
探してみると同じ名前(つづりの4がforとなってる違いがあったものの)のサービスは見つかりましたが、あまり活用されてなさっぽいので、とりあえずスルーしてます。
管理者用(自治体職員向け)と報告用(住民向け)の二種類の画面をつくってます。
デザインはいろんなソースを切り貼りした手作りで、とりあえず分かればいいというのがポリシーとなってます。
サイトへアクセス直後の報告用画面がこれです。
利用場面を想像すれば一般にスマホからアクセスされるわけで、そうなると一般的に思い出されるのはアプリですが、それにすると事前にダウンロードしてインストールなどの準備が必要であり、それをするほど用意周到でクマに対する意識が高いヒトは少ないだろうし、かといって緊急時にいちいちアプリをダウンロードしてなどという手間はかけられない。ということで、突然出くわした状況で(比較的)簡単にアクセス出来るようブラウザからの利用としました。(その他、javaやSwiftが扱えないとか、アプリ審査にはカネや時間がかかってめんどくさいなども大きな理由でした)
ログイン機能がないことはいたずら防止という観点では激弱なのですが、事前にユーザ登録を必要とすると、それがめんどくさかったり、ピクニックや登山途中で予想外の場所で突然目撃したりした場合にはこのサービスを使って報告してもらえなさそうなので、現在はログイン不要としています。
「ほうこく」ボタンを押すと出てくるのが次の画面です。
ブラウザから位置情報取得をアプリ起動のときのみとかその都度確認などとしている場合には「許可しますか?」というメッセージが出てきて、許可したあとに出てくる画面です。なお同じ端末でもブラウザによって位置情報利用不可設定の場合には画面がピクリとも動かいないので、その点については改善点ですね。また位置情報取得に時間がかかる場合もあり、その間は動いているのかクリックしてなかったのかと心配になるので、そういった部分のUIも今後の改善点だと思ってます。
画面表示時にスマホの位置情報から自動的に住所情報を(内部的には緯度経度情報も)取得して画面に表示します。もし今いる所から離れた場所で目撃したなど報告場所を変更したい場合には「場所を修正する」ボタンを押せば、画面に呼び出されたGoogleMap上で目的の場所をクリックすると場所の変更も出来ます。
報告日時は現在時刻でこちらも変更することができます。
緊急時にとりあえず報告を挙げられるよう、状況と写真はなしでも登録可としています。
右上のハンバーガーメニューをクリックすると目撃情報一覧とそれらがプロットされた地図を見ることができます。GoogleMapのAPIを利用していますが、自分のいる場所とクマ目撃情報の報告場所の関連性(近いのか遠いのか)の確認がちょっと分かりづらいので、その点については今後の課題ですね。ってか、それがいちばん大切な機能な気もしますけれど。
追記)これについては先頭のリンク先の投稿にある通り、とりあえず機能実装したりしてます。
利用イメージとしては、山道を歩いていると時々見かけるクマ出没注意の看板のすみっこにアクセス先のQRコードを貼り付けたり、クマ注意のチラシに同じくQRコードを印刷して、そこからスマホでアクセスするって感じです。
なお、これまで説明してきたものを「住民向け」と書きましたが、最初に書いた通りイノシシなどを仕留めた住民からの報告で現地へ職員が到着した際、職員自身が記録用として登録するという使い方もありです。本来はその姿や足跡、糞、体毛、爪の研ぎあと、作物の被害などの痕跡を写真を残せるように、画像データ添付機能も付けていますが、職員が使う場合には現場の証拠写真としても使えるんじゃないかなって思ってます。(画像はアップロード時間を短縮する目的で、ちょっとっちいさめサイズにしてからGoogle Strageへ保存してます)
(写真画像のQRコードとその説明文は合成です。実際にあるものではありません)
つぎに管理者用画面はこちら
管理者用画面では報告の一覧を確認することができます。PCからの利用を前提にした画面です。
住民から電話などで報告があった場合には、住民報告用と同じ機能の画面から目撃情報を登録することもできます。(デザインは同じテンプレートなので間延びした感じでイマイチだけど)この時は報告を受けた住所情報を入力することでGoogle Map APIから位置情報を取得することが出来るようにしています。
管理者画面では登楼された画像データを参照することもできますが、今現在機能ではダウンロードができません。一覧の右端にある画像イメージをクリックすると画像が拡大されるので、そいつを右クリック&保存でなんとかしてください。
住所記載部分をクリックすると、それぞれの報告場所の地図と状況報告の内容が(一覧にも出てますが)表示されます。
なおマスタメンテ機能ではDjangoが提供しているadmin機能画面が表示され、DB直接の修正や削除などはそれでやることにして、メンテ用画面は作ってません。
とりあえず まとめ
GoogleMapのマイマップ機能を利用すれば、位置情報をもったCSVデータを読み込ませるだけで、地図上に位置情報をプロット出来るので、それだけでも十分な機能ですが、そのためにはやはり位置情報の取得(登録)が必須となります。
(私がつくったサービスに登録したデータをCSVファイルとしてダウンロード後、GoogleMapのマイマップに読み込ませて作ってみた地図です。位置情報さえあれば簡単に作れます)
今回つくってみたサービスでは地図はとりあえずわかりやすく表示するということを目的にシロートが探り探りつくったので、とりあえずこんなもんですが、データ取得の仕組みとしてはそれなりにいい感じな出来ではないかと思っとります。
ただし前にも書いた通り、いたずら防止などの抑止力は激弱なので、それはこれからの改善点だと思っとります。
結論
ともかく、獣害などのオープンデータは位置情報をもったものとして公開していただければ、私より賢い多くの人々が寄ってたかっていい感じのサービスを立ち上げられるに違いなく、それこそがオープンデータを推進している目的ではないでしょうか。
個人情報もほぼ関係ないし、やれば出来るはず。
構築環境
- Web公開環境
- PythonAnywhere.com
- (元々はHerokuで動かしてたものを、Heroku有料化に伴い移行しました)
- 開発言語
- バックエンド:Python3(WEBフレームワークはDjango)
- フロントエンド:HTML, Javascript, CSSはBootstrapを利用
- 利用サービス
- Google Map (地図表示、住所情報取得 API利用)
- Google Cloud Strage (static fileの保存先)
- データベース
- MySQL(PythonAnywhere提供サービス)