地元のハザードマップを作ってみた
きっかけ
市役所などが提供してくれているハザードマップっていえば、まずは紙ですね。回覧板などに挟まって回ってくるやつ。いろいろと情報てんこ盛りで熟読すべきなんだろうけど、ちょっと知りたいときに「あれどこ行った?」ってなったりする。
ならばインターネットで参照できればと思い検索してみると、都道府県や市役所などが公開しているハザードマップサイトはあるけど高機能すぎる。
なので、勉強がてらに簡単なやつを作ろうと思ってやってみますた。
やったこと
実は引用記事にある通り、pythonを勉強し始めた頃にちょっとばかし作ってみたことがあるから、そいつを流用すりゃいいやってんで、生成AIくんに相談しながら作りますた。
なお情報表示に必要なデータの作成などは上の記事に描いてあるはずなのでそちらを参照していただきたい。また今回追加した避難所データについては、市役所が印刷用PDFしか公開していなかったので、これまた生成AIくんに記載された避難所情報を抽出してもらい、最終的にはgeojson形式としてデータ化してもらいました。
ちなみにGeminiくんとチャッピーは途中までしか処理してくれず腹が立ちましたが、cloudeちゃんは最後までちゃんと仕事をしてくれて嬉しかったです。
以前はflaskで書いていたんだけど、Geminiくんに相談すると「そりゃヴァニラなコードでも書けまっせ」って言われたので、Geminiくんを始めとした生成AIのみんなが書いてくれたコードにいちゃもんを付けながらなんとか完成いたしました。
まあ生成AIくんたちにデータ整備も含めて90%位は作ってもらったので特に苦労はなかったんだけど、PDFからデータを起こしてCSVにしたあとのちょっと工夫した点は施設名しかない避難所情報から緯度経度の位置情報を取得するためにGoogle Map APIを使ったことと(単純な取得だと近くのバス停や地名自体に引っ張られて精度が低くかったので、精度を高める工夫をこれまた生成AIくんにお願いしてチューニングしてもらい、それなりの精度の位置情報が取得できましたが、「第一公民館」などという汎用性が高すぎる施設名の一部は、全然違うところにピンが立ったりしてます)、そこからgeojson形式に変更し(これまた生成AIだのみ)、そいつをヴァニラなコードに読み込ませて一件落着。
機能としては「土石流」「急傾斜地」「避難所」の各情報をチェックボックスで表示・非表示と切り替えられるいうくらいで、それ以外特になし。
leafletを利用しているので、そのままopen street mapの地図が表示されます。
避難所アイコンをクリックするとその施設の情報が表示されますが、この機能は実装したいとは思っていたものの具体的には考えていなかったのに、そいつを先読みして生成AIくんが実現してくれました。オマエはワシの心が読めたんか?って気分です。
まとめ
コード自体は生成AIが書いてくれるから大変さはないけど、データを準備することが大変だし重要。今回のポイントはsharpファイルをgeopandasを使って使いやすく加工するって部分っす。それは前に投稿した記事で書いてるので興味ある人はそちらを確認してください。ってか、今回はgeojson形式で処理してるんで、次のサイトからダウンロードするデータはgeojson形式としたほうが楽チンではないかって思います。
さいごに
趣味でウェブサービスをチョロチョロ作ったりしていますが、来年度の町内会長を拝命した折、前役員から「電子回覧板が流行っているらしいけど、ウチの町内会も導入できないかな?」て話がでたので、そのコンテンツの一つとして昔書いた古い(今見るとヒドイ)コードを掘り起こして作ってみました。
ちなみに本家の電子回覧板は個別にサービスを立ち上げるとメンテナンスの継続に期待できないので、他の事例を参考にして多くの人が既に馴染みのあるLINE公式アカウントを利用した電子掲示板をでっち上げましたが、それはまた別のお話。
一応今後ハザードマップ情報が追加された場合のことも考えて作っているので、データさえ整備されたらすぐ対応可。まあそれ以上に都道府県・自治体の皆様に置かれましては、すぐに使えるデータ(せめてCSVで)を公開してほしいなって思いますね。かつて仕事で様々な都道府県・市町村のオープンデータやDX推進担当部門の方々と話をした経験がありますが、DXといえば概ねその成果とそれを実現するためのツールにばかり目が行ってしまい、それを支えるべきデータには関心が薄いなと感じていました。
昨今の状況では、何をするにせよまずはデータを。データがあれば何でもできる、くらいの勢いでオープンデータ化を推し進めなきゃ、いつまで経っても前に進まないよなーなんて思います。
いじょう