このプロジェクトについて
Floodcast-Gurugramは、インドのグルグラム(グルガオン)向けのシビックテック洪水予測ウェブアプリです。一般的な気象アプリや浸水しやすい場所のリストでは答えられない、「現在の降雨予測に基づき、特定のルートが今後数時間以内に浸水するか、具体的にいつ浸水が始まり、いつ解消されるか」という限定的な問いに答えるために開発されました。単なるリスクスコアではなく、常に判定に時間枠を付随させて提示します。
機能
- 時間枠付きリスク:1時間ごとのリアルタイム降雨量を、登録された73箇所の浸水地点それぞれと比較し、IMD(インド気象局)スタイルの警告帯と明確な開始・解消時間を併用して、いつ浸水し、いつ解消されるかを算出します。
- ルート判定:2つの地名を解決し、その直線距離の1.5kmバッファ内にあるホットスポットを特定します。アプリは、その中で最悪の地点と最悪の時間枠を報告します。
- 1時間ごとのタイムライン:ユーザーは予測を前方へスクラブし、その時間におけるマップ、判定、レジスタの再読み込みを確認できます。
- 降雨シミュレーター:グルグラムは一年の大半が乾燥しているため、ユーザーは20、35、または55mm/hrの場合に何が起こるかを問い、ライブ判定と同じエンジンを通じてレジスタの反応を確認できます。
- 市民報告:カメラ写真、精度付きのGPS座標、および観測された水深を報告できます。報告はまずデバイスに保存され、モデレーションを経てから公開されます。
- CPCB National AQI:ベンダー提供の1-5指数ではなく、24時間の汚染物質平均から算出されるインドの0-500スケールを表示します。
データの出所(プロバナンス)は製品機能として扱われています。登録された73地点のうち、39地点はソースが明確です(MCGのゾーン1ホットスポットリストに記載された4地点、2022年から2025年の2つ以上の独立したニュースレポートに繰り返し登場した26地点、今シーズンの公式な機関ソースによる9地点)。残りの24地点は「妥当だが未確認のウォッチリスト」として記載され、10地点はMCGの公式な36地点数値を維持するためのプレースホルダーとして再構成されています。READMEには、レジスタを拡張したことで元の36地点に比べて平均的な信頼度が低下したことが明記されており、アプリ内の「What's real」タブで階層を公開し、マップ上のマーカーの色で確実性をエンコードしています。73行すべてに「未検証の座標」フラグが付いており、スクリプトがOpenStreetMapと照合してレポートを作成しますが、データを編集することはありません。ルートマッチングは、ターンバイターン方式ではなく直線コリドーマッチングであることが明示されており、すべてのルート回答に記載されています。
学習ループ
互いに500m以内にある報告地点は1つの場所として扱われます。2つの別々の日にわたって3件の報告があった場所は、独立した浸水地点として昇格しますが、これらは研究済みの73行には統合されません。ある地点の測定しきい値は、1mm/hr以上の雨を伴い、別々の2日間で「膝丈(knee-deep)」以上の浸水が確認された後にのみ公開されます。公開される数値は、その場所で浸水が確認された中で最も少ない降雨量です。Open-Meteoが、承認された各報告の前に降った降雨量を提供します。報告数、キャリブレーションペア、観測しきい値は、データベーストリガーによってのみ書き込み可能であり、カラム権限によって制御されているため、モデレーターが手動で数値を入力することはできません。
アーキテクチャとスタック
本アプリは静的サイトです。React 19とTypeScriptを使用し、Vite (rolldown) でビルドされ、Leafletでレンダリングされます。インストール可能なオフラインファーストのPWAとして提供され、静的ホスティングにデプロイされています。ホットスポットレジスタ(62KBの静的行)はバンドルに組み込まれているため、ネットワークリクエスト前にマップとリストがレンダリングされます。スコアリングはこれらの行に対する純粋な算術演算であり、デバイス上で実行されます。常に稼働している唯一のコールはOpen-Meteoであり、APIキー不要でクロスオリジンアクセスが可能なため、訪問者のIPから直接呼び出されます。Nominatimは、レジスタにない場所のフォールバックとしてのみ使用されます。Supabaseはオプションであり、なくても予測ツールは完全に動作し、報告はデバイスに保持されます。READMEには、以前のFastAPIコンテナ版ではコールドスタートに42.7秒かかり、予測コールが恒久的にレート制限されていたため、全クライアント側設計に変更した経緯が記載されています。合計バンドルサイズはgzip圧縮後で約160KBです。
データパイプライン
学習済みモデルは使用していません。固定シードを持つ4つの決定論的なPythonジェネレーターが、段階的にレジスタを構築します(MCGの構造に固定された36行 → 64行 → 73行)。その後、アプリが配信するJSONを出力するエクスポートステップと整合性チェックが行われます。継続的インテグレーション(CI)により、プッシュごとに全段階が再生成され、出力がコミット内容と異なる場合は失敗します。コントリビューターはCSVではなくジェネレーターを編集するように指示されています。集水域の特定のため、GMDAが公開した排水ネットワーク(4,701のストリームセグメント、10の流域)を取得しましたが、このデータは意図的にリスクスコアから除外されており、テストによってこれが強制されています。特筆すべき点として、READMEには「集水域のサイズの中央値は深刻度階層と相関しない」という否定的な結果が報告され、公開されています。正解となる洪水ログが存在しないため、全体的な精度数値は主張していません。代わりに、応答曲線(10mm/hrでは浸水なし、20mm/hrで最悪の10箇所のチョーク(交差点)が浸水、35mm/hrで73地点中44地点に到達、55mm/hrの持続的な雨でレジスタ全域がカバー)と、53%のソース提供率を報告しています。
ユーザーへの注意点
すべての座標はジオコーディングされた位置ではなく近似的な配置です。しきい値は当初、測定値ではなく深刻度階層による工学的推定値として始まり、市民からの証拠が蓄積されるにつれて置き換えられます。ルート分析は実際の道路ではなく直線コリドーを使用しています。また、レジスタの一部にソースがあるものの、政府の公式データセットではありません。プロジェクトには、ライブデモ、MITライセンス、および専用のプロバナンスドキュメントが付属しています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.