【第4回】防災DX・建設コンサル向け:Ollama × MCP × GISで「土砂災害解析AIアシスタント」を作ってみる
クローズドなネットワークで動く、防災DX・建設コンサル向けAI-GISエージェント実装
本記事は「ローカルLLM × MCP × GIS」によるAI-GIS基盤構築シリーズの第4回です。
- 第1回:OllamaでローカルLLMを動かす
- 第2回:GIS MCP Serverを作る
- 第3回:Open WebUIからGIS MCP Serverへ接続する
- 第4回:土砂災害解析AIアシスタントへ拡張する ← 本記事
今回は、これまで作成したローカルAI-GIS基盤を、防災・砂防・建設コンサル・自治体DX向けの「土砂災害解析AIアシスタント」へ拡張します。
この記事で作るもの
今回作るのは、土砂災害解析の実務を支援するAIアシスタントです。
ただし、最初に重要な前提があります。
本記事で作るAIは、
土砂災害の発生を断定するAI
ではありません。
目指すのは、
既存のGISデータやDEMを使い、
危険箇所の一次スクリーニング、
避難所・設備・人口等との重ね合わせ、
結果の説明資料作成を支援するAI
です。
防災・砂防・インフラ分野では、AIの出力をそのまま判断材料にしてはいけません。
AIは支援役です。
最終判断は、必ず専門技術者・行政担当者・関係機関が行う前提で設計します。
なぜ土砂災害解析AIアシスタントなのか
日本では、台風、線状降水帯、集中豪雨、地震などにより、土砂災害リスクへの対応が重要です。
自治体や建設コンサルの現場では、以下のような作業が発生します。
- 土砂災害警戒区域の確認
- 避難所との位置関係確認
- 施設・設備台帳との重ね合わせ
- DEMから傾斜量を作成
- 危険斜面候補の抽出
- 点検優先順位の作成
- 地図・CSV・報告書の作成
これらはGISで実行できます。
しかし、作業には専門知識が必要です。
そこで、AI-GISエージェントを使って、
自然言語で依頼
↓
必要なGIS処理をAIが判断
↓
MCP Toolで解析実行
↓
結果を地図・CSV・説明文で返す
↓
技術者が確認
という流れを作ります。
重要:これは「予測AI」ではなく「解析支援AI」
土砂災害分野でAIというと、つい「危険度を予測するAI」を想像しがちです。
しかし、いきなり予測AIを作るのは危険です。
理由は以下です。
- 災害発生データの整備が難しい
- 降雨、地質、地形、植生、土地利用など多くの要因が関係する
- 説明責任が必要
- 誤判定の影響が大きい
- 防災判断には行政・専門機関の責任がある
そのため、本記事では予測モデルではなく、
GIS処理を標準化し、
解析候補を抽出し、
説明資料を作るAIアシスタント
として設計します。
全体構成
第1回〜第3回で構築した構成に、土砂災害解析用のTool群を追加します。
土砂災害解析AIアシスタントの役割
AIアシスタントの役割は、以下です。
| 役割 | 内容 |
|---|---|
| 依頼理解 | 利用者の自然言語を解釈 |
| 処理計画 | 必要なGIS処理を順番に並べる |
| Tool選択 | MCP Toolを選ぶ |
| 解析実行 | Python GIS処理を呼び出す |
| 結果整理 | CSV・GeoJSON・要約文を作る |
| 注意喚起 | 限界・確認事項を明記 |
| 報告書補助 | 技術者向け説明文を作る |
想定する利用シーン
1. 自治体
市内の土砂災害警戒区域から500m以内にある避難所を抽出してください。
結果をCSVとGeoJSONで出力し、注意点を説明してください。
2. 建設コンサル
DEMから30度以上の斜面を抽出し、土砂災害警戒区域と重なる箇所を一覧化してください。
3. インフラ管理
設備台帳と土砂災害警戒区域を重ねて、影響を受ける可能性がある設備を優先度順に出してください。
4. 防災計画
土砂災害警戒区域、避難所、人口メッシュを重ねて、避難計画上の確認対象地区を抽出してください。
データ構成
今回想定するデータは以下です。
gis-mcp-server/
├── data/
│ ├── input/
│ │ ├── landslide_area.geojson
│ │ ├── shelters.geojson
│ │ ├── facilities.geojson
│ │ ├── population_mesh.geojson
│ │ └── dem.tif
│ └── output/
| ファイル | 内容 |
|---|---|
landslide_area.geojson |
土砂災害警戒区域ポリゴン |
shelters.geojson |
避難所ポイント |
facilities.geojson |
設備台帳・施設ポイント |
population_mesh.geojson |
人口メッシュ |
dem.tif |
数値標高モデル |
利用する主なMCP Tool
第2回で作成した汎用Toolに加えて、土砂災害向けToolを追加します。
汎用GIS Tool
| Tool名 | 内容 |
|---|---|
read_vector_info |
ベクタデータ確認 |
read_raster_info |
ラスタデータ確認 |
buffer_geometry |
バッファ作成 |
spatial_join |
空間結合 |
calculate_area |
面積計算 |
zonal_statistics |
ゾーン統計 |
土砂災害向けTool
| Tool名 | 内容 |
|---|---|
extract_shelters_near_landslide_area |
警戒区域周辺の避難所抽出 |
extract_facilities_in_landslide_area |
影響設備の抽出 |
calculate_slope_from_dem |
DEMから傾斜量を作成 |
extract_steep_slope_cells |
急傾斜セルの抽出 |
landslide_screening_summary |
一次スクリーニング結果の集約 |
generate_landslide_report_md |
Markdownレポート生成 |
処理フロー1:警戒区域周辺の避難所抽出
最初のデモとして分かりやすいのは、土砂災害警戒区域と避難所の重ね合わせです。
利用者の依頼例です。
土砂災害警戒区域から500m以内にある避難所を抽出してください。
結果はCSVとGeoJSONで出力し、注意点も説明してください。
AIは内部的に以下のToolを呼びます。
read_vector_info
↓
buffer_geometry
↓
spatial_join
↓
generate_landslide_report_md
処理フロー2:設備台帳との重ね合わせ
インフラ・道路・鉄道・電力・通信分野では、設備台帳との重ね合わせが有効です。
依頼例です。
設備台帳と土砂災害警戒区域を重ねて、影響を受ける可能性がある設備を抽出してください。
重要度が高い設備から優先点検リストにしてください。
処理フロー3:DEMから急傾斜地候補を抽出
建設コンサルや砂防分野では、DEMから斜面条件を抽出する処理が重要です。
依頼例です。
DEMから傾斜角30度以上の斜面を抽出し、土砂災害警戒区域と重なる場所を一覧化してください。
実装方針
今回の実装では、土砂災害解析に必要な処理をMCP Toolとして追加します。
ただし、すべてを高度化しすぎないことが大切です。
最初のPoCでは、以下のように分けます。
| 段階 | 実装内容 |
|---|---|
| PoC | 既存データの重ね合わせ、バッファ、CSV出力 |
| 実証 | DEM傾斜量、ゾーン統計、優先度付け |
| 本番 | ログ、権限管理、正式データ連携、監査 |
| 高度化 | 降雨情報、土壌雨量指数、時系列解析、QGIS連携 |
app/server.py にToolを追加する
第2回の GIS MCP Server に、以下のToolを追加します。
事前に利用するimport
第2回の server.py に以下が入っている前提です。
import os
from pathlib import Path
from typing import Any
import geopandas as gpd
import numpy as np
import pandas as pd
import rasterio
from rasterio.mask import mask
from shapely.geometry import mapping
from mcp.server.fastmcp import FastMCP
また、第2回で作成した以下の補助関数を使います。
_resolve_under_data(path: str, must_exist: bool = True) -> Path
_output_path(output_name: str) -> Path
Tool 1:土砂災害警戒区域周辺の避難所抽出
@mcp.tool()
def extract_shelters_near_landslide_area(
landslide_path: str,
shelters_path: str,
output_geojson_name: str,
output_csv_name: str,
distance_m: float = 500,
target_crs: str = "EPSG:6677",
) -> dict:
"""
土砂災害警戒区域から指定距離内にある避難所を抽出する。
注意:
distance_m はメートル単位。
距離計算のため、target_crs に対象地域に適した投影座標系を指定する。
"""
landslide_file = _resolve_under_data(landslide_path)
shelters_file = _resolve_under_data(shelters_path)
out_geojson = _output_path(output_geojson_name)
out_csv = _output_path(output_csv_name)
landslide = gpd.read_file(landslide_file)
shelters = gpd.read_file(shelters_file)
if landslide.crs is None or shelters.crs is None:
raise ValueError("入力データにCRSがありません。")
# 距離計算用CRSへ変換
landslide_work = landslide.to_crs(target_crs)
shelters_work = shelters.to_crs(target_crs)
# 警戒区域から指定距離のバッファを作成
buffer_gdf = landslide_work.copy()
buffer_gdf["geometry"] = buffer_gdf.geometry.buffer(distance_m)
# 避難所とバッファを空間結合
joined = gpd.sjoin(
shelters_work,
buffer_gdf[["geometry"]],
how="inner",
predicate="intersects",
)
# 重複を除去
joined = joined.drop_duplicates()
# 元CRSへ戻す
result = joined.to_crs(shelters.crs)
# GeoJSON出力
result.to_file(out_geojson, driver="GeoJSON")
# CSV出力
df = result.drop(columns="geometry", errors="ignore")
df.to_csv(out_csv, index=False, encoding="utf-8-sig")
return {
"message": "警戒区域周辺の避難所を抽出しました。",
"distance_m": distance_m,
"target_crs": target_crs,
"landslide_path": str(landslide_file),
"shelters_path": str(shelters_file),
"output_geojson": str(out_geojson),
"output_csv": str(out_csv),
"shelter_count": int(len(result)),
}
Tool 2:設備台帳と警戒区域の重ね合わせ
@mcp.tool()
def extract_facilities_in_landslide_area(
facilities_path: str,
landslide_path: str,
output_geojson_name: str,
output_csv_name: str,
predicate: str = "intersects",
) -> dict:
"""
設備台帳と土砂災害警戒区域を重ね合わせ、
影響を受ける可能性がある設備を抽出する。
"""
facilities_file = _resolve_under_data(facilities_path)
landslide_file = _resolve_under_data(landslide_path)
out_geojson = _output_path(output_geojson_name)
out_csv = _output_path(output_csv_name)
facilities = gpd.read_file(facilities_file)
landslide = gpd.read_file(landslide_file)
if facilities.crs is None or landslide.crs is None:
raise ValueError("入力データにCRSがありません。")
if facilities.crs != landslide.crs:
landslide = landslide.to_crs(facilities.crs)
joined = gpd.sjoin(
facilities,
landslide,
how="inner",
predicate=predicate,
)
joined.to_file(out_geojson, driver="GeoJSON")
df = joined.drop(columns="geometry", errors="ignore")
df.to_csv(out_csv, index=False, encoding="utf-8-sig")
return {
"message": "警戒区域内または重なる設備を抽出しました。",
"facilities_path": str(facilities_file),
"landslide_path": str(landslide_file),
"output_geojson": str(out_geojson),
"output_csv": str(out_csv),
"facility_count": int(len(joined)),
}
Tool 3:DEMから傾斜量を作成する
以下は、簡易的な傾斜量計算の例です。
本格運用では、SAGA GIS、GRASS GIS、WhiteboxTools、QGIS Processing、専門的な地形解析ライブラリの利用を検討してください。
@mcp.tool()
def calculate_slope_from_dem(
dem_path: str,
output_tif_name: str,
) -> dict:
"""
DEMから簡易的な傾斜量ラスタを作成する。
注意:
本実装はPoC用の簡易実装。
実務利用では地形解析手法、解像度、NoData処理、投影座標系を確認すること。
"""
dem_file = _resolve_under_data(dem_path)
out_tif = _output_path(output_tif_name)
with rasterio.open(dem_file) as src:
dem = src.read(1).astype("float64")
profile = src.profile.copy()
transform = src.transform
nodata = src.nodata
if nodata is not None:
dem = np.where(dem == nodata, np.nan, dem)
xres = abs(transform.a)
yres = abs(transform.e)
gy, gx = np.gradient(dem, yres, xres)
slope_rad = np.arctan(np.sqrt(gx**2 + gy**2))
slope_deg = np.degrees(slope_rad)
out_nodata = nodata if nodata is not None else -9999
slope_deg = np.where(np.isfinite(slope_deg), slope_deg, out_nodata)
profile.update(
dtype=rasterio.float32,
count=1,
nodata=out_nodata,
)
with rasterio.open(out_tif, "w", **profile) as dst:
dst.write(slope_deg.astype("float32"), 1)
return {
"message": "DEMから傾斜量ラスタを作成しました。",
"dem_path": str(dem_file),
"output_tif": str(out_tif),
}
Tool 4:急傾斜セルを抽出する
@mcp.tool()
def extract_steep_slope_cells(
slope_tif_path: str,
output_tif_name: str,
threshold_deg: float = 30.0,
) -> dict:
"""
傾斜量ラスタから、指定角度以上のセルを抽出する。
"""
slope_file = _resolve_under_data(slope_tif_path)
out_tif = _output_path(output_tif_name)
with rasterio.open(slope_file) as src:
slope = src.read(1)
profile = src.profile.copy()
nodata = src.nodata
if nodata is not None:
valid = slope != nodata
else:
valid = np.isfinite(slope)
steep = np.where((slope >= threshold_deg) & valid, 1, 0).astype("uint8")
profile.update(
dtype=rasterio.uint8,
count=1,
nodata=0,
)
with rasterio.open(out_tif, "w", **profile) as dst:
dst.write(steep, 1)
return {
"message": "急傾斜セルを抽出しました。",
"slope_tif": str(slope_file),
"output_tif": str(out_tif),
"threshold_deg": threshold_deg,
}
Tool 5:スクリーニング結果のMarkdownレポート生成
Qiitaや提案資料として見せるなら、GIS処理結果だけでなく説明文が重要です。
@mcp.tool()
def generate_landslide_report_md(
title: str,
output_md_name: str,
summary: str,
input_data: list[str],
output_data: list[str],
notes: list[str],
) -> dict:
"""
土砂災害解析支援のMarkdownレポートを作成する。
"""
out_md = _output_path(output_md_name)
lines = []
lines.append(f"# {title}")
lines.append("")
lines.append("## 解析概要")
lines.append("")
lines.append(summary)
lines.append("")
lines.append("## 使用データ")
lines.append("")
for item in input_data:
lines.append(f"- {item}")
lines.append("")
lines.append("## 出力データ")
lines.append("")
for item in output_data:
lines.append(f"- {item}")
lines.append("")
lines.append("## 注意事項")
lines.append("")
for item in notes:
lines.append(f"- {item}")
lines.append("")
lines.append("## 技術者確認欄")
lines.append("")
lines.append("- [ ] 入力データの更新日を確認した")
lines.append("- [ ] 座標系を確認した")
lines.append("- [ ] 出力結果をGIS上で確認した")
lines.append("- [ ] 公的判断に使う場合は正式資料と照合した")
lines.append("")
out_md.write_text("\n".join(lines), encoding="utf-8")
return {
"message": "Markdownレポートを作成しました。",
"output_md": str(out_md),
}
Open WebUIで使うシステムプロンプト例
土砂災害解析AIアシスタントでは、AIに役割と制約を明確に与えることが重要です。
以下はシステムプロンプト例です。
あなたは土砂災害解析を支援するAI-GISアシスタントです。
あなたの役割は、利用者の自然言語による依頼を理解し、
利用可能なGIS MCP Toolを適切に選択して、
GISデータの確認、バッファ作成、空間結合、DEM解析、
CSV/GeoJSON出力、結果説明を支援することです。
重要な制約:
- あなたは土砂災害の発生を断定してはいけません。
- AIの結果を公式判断として扱ってはいけません。
- 出力結果は一次スクリーニングまたは確認支援として説明してください。
- 最終判断は専門技術者または行政担当者が行う必要があります。
- 距離や面積の処理では座標系を確認してください。
- CRSが不明な場合は処理を続行せず、確認を促してください。
- 入力データの作成年、更新日、出典が不明な場合は注意点として明記してください。
- 結果説明では、使用データ、処理手順、出力ファイル、限界を簡潔にまとめてください。
デモシナリオ1:避難所抽出
利用者の入力
/data/input/landslide_area.geojson と /data/input/shelters.geojson を使って、
土砂災害警戒区域から500m以内にある避難所を抽出してください。
結果は GeoJSON と CSV で出力し、注意点も説明してください。
AIの処理計画
1. 土砂災害警戒区域データの内容を確認する
2. 避難所データの内容を確認する
3. 距離計算のため投影座標系へ変換する
4. 警戒区域から500mバッファを作成する
5. 避難所ポイントとバッファを空間結合する
6. 結果をGeoJSONとCSVで出力する
7. 注意点を日本語で説明する
出力例
/data/output/shelters_near_landslide_500m.geojson
/data/output/shelters_near_landslide_500m.csv
/data/output/shelters_near_landslide_report.md
AIの説明例
土砂災害警戒区域から500m以内に位置する避難所を抽出しました。
抽出結果はGeoJSONおよびCSVとして保存しています。
注意点:
- 距離判定は指定した投影座標系で行っています。
- 入力データの更新日や正式指定状況は別途確認してください。
- 本結果は一次スクリーニングであり、避難所の安全性を保証するものではありません。
デモシナリオ2:設備影響抽出
利用者の入力
設備台帳 /data/input/facilities.geojson と
土砂災害警戒区域 /data/input/landslide_area.geojson を重ねて、
影響を受ける可能性がある設備を一覧化してください。
出力例
/data/output/facilities_in_landslide_area.geojson
/data/output/facilities_in_landslide_area.csv
営業資料での説明
設備位置と災害危険区域を重ね合わせることで、
災害時に影響を受ける可能性がある設備を抽出できます。
これにより、点検計画やBCP対策の優先順位付けを支援できます。
デモシナリオ3:DEMから急傾斜地候補を抽出
利用者の入力
/data/input/dem.tif から傾斜量を計算し、
30度以上の急傾斜セルを抽出してください。
処理手順
1. DEMのCRS、解像度、NoDataを確認
2. DEMから傾斜量を計算
3. 30度以上のセルを抽出
4. 結果をGeoTIFFとして出力
5. 注意点を説明
出力例
/data/output/slope_deg.tif
/data/output/steep_slope_30deg.tif
注意点
この処理は簡易スクリーニングです。
実務では以下を確認する必要があります。
- DEMの解像度
- 補間方法
- NoData処理
- 地形解析手法
- 水文解析条件
- 現地状況
- 既存指定区域との整合
AI-GISアシスタントの画面イメージ
Open WebUI上では、利用者は次のように入力します。
この地域で、土砂災害警戒区域から500m以内にある避難所を抽出してください。
AIはMCP Toolを呼び出して処理し、以下のように返します。
処理が完了しました。
出力ファイル:
- /data/output/shelters_near_landslide_500m.geojson
- /data/output/shelters_near_landslide_500m.csv
概要:
- 対象避難所数: 18件
- 使用した処理: 500mバッファ作成、空間結合
- 注意点: 本結果は一次スクリーニングです。正式判断には最新の指定区域資料と照合してください。
仕事につなげるための見せ方
Qiitaでバズる記事にするには、技術だけでは弱いです。
以下のように「業務課題」から入ると刺さりやすくなります。
自治体や建設コンサルの現場では、GIS作業が属人化しやすく、
災害時ほど迅速な集計・抽出・説明資料作成が求められます。
そこで、Ollama + MCP + GISを使い、
クローズドなネットワーク内で動作する土砂災害解析AIアシスタントを構築します。
そして、できることを明確にします。
できること:
- 土砂災害警戒区域の内容確認
- 避難所との重ね合わせ
- 設備台帳との重ね合わせ
- DEMから傾斜量を作成
- 急傾斜地候補を抽出
- CSV / GeoJSON / Markdownレポートを出力
- AIが結果を日本語で要約
PoC提案メニュー
PoC 1:避難所リスク確認AI
| 項目 | 内容 |
|---|---|
| 対象 | 土砂災害警戒区域、避難所 |
| 処理 | 500m圏、空間結合 |
| 出力 | 対象避難所一覧、GeoJSON |
| 効果 | 防災担当者が確認対象を把握しやすい |
PoC 2:インフラ設備影響抽出AI
| 項目 | 内容 |
|---|---|
| 対象 | 設備台帳、土砂災害警戒区域 |
| 処理 | 空間結合、優先度付け |
| 出力 | 影響設備一覧 |
| 効果 | 点検計画・BCP検討に活用 |
PoC 3:DEM急傾斜地スクリーニングAI
| 項目 | 内容 |
|---|---|
| 対象 | DEM |
| 処理 | 傾斜量計算、閾値抽出 |
| 出力 | 急傾斜候補ラスタ |
| 効果 | 現地確認候補の抽出 |
PoC 4:防災レポート自動生成AI
| 項目 | 内容 |
|---|---|
| 対象 | GIS解析結果 |
| 処理 | Markdownレポート作成 |
| 出力 | 技術者確認用レポート |
| 効果 | 報告書作成の初動を短縮 |
導入構成案
小規模PoC構成
特徴:
- 1台のPCで検証
- サンプルデータでPoC
- 導入ハードルが低い
部署内ネットワーク構成
特徴:
- 複数利用者で共有
- GISデータをNASで管理
- 部署内PoCに向いている
クローズドなネットワーク構成
特徴:
- 外部送信を抑制
- 庁内データを内部処理
- 自治体・インフラ用途向け
運用設計で必ず考えること
1. データ更新
土砂災害警戒区域などのデータは、指定や解除により更新される可能性があります。
そのため、AIの結果には必ず以下を含めます。
- 使用データ名
- 更新日
- 出典
- 処理日時
- 注意事項
2. CRS管理
距離・面積・傾斜量を扱う場合、座標系が重要です。
特に以下を確認します。
- EPSG:4326のまま距離計算していないか
- 平面直角座標系が対象地域に合っているか
- DEMとベクタデータのCRSが一致しているか
- ラスタ解像度が目的に適しているか
3. 結果の承認フロー
AIが出した結果をそのまま成果品にしないことが重要です。
4. ログと監査
防災・インフラ用途ではログが重要です。
| ログ項目 | 内容 |
|---|---|
| 実行日時 | いつ処理したか |
| 利用者 | 誰が依頼したか |
| 入力データ | 何を使ったか |
| Tool名 | どの処理をしたか |
| パラメータ | 距離・閾値・CRSなど |
| 出力ファイル | 何を出力したか |
| 結果件数 | 何件抽出したか |
| エラー | 問題があったか |
AIの回答に必ず含めたい注意文
防災系AIでは、AIの説明に以下のような注意文を入れると安全です。
本結果はGISデータに基づく一次スクリーニング結果です。
土砂災害の発生可能性や避難所の安全性を保証するものではありません。
正式な判断には、最新の指定区域資料、自治体資料、現地状況、気象情報、専門技術者の確認が必要です。
よくある失敗
1. AIに危険度を断定させる
悪い例:
この避難所は安全です。
良い例:
この避難所は警戒区域から500m以内に位置するため、確認対象として抽出されました。
安全性の判断には、最新資料と現地確認が必要です。
2. 座標系を確認しない
悪い例:
EPSG:4326のまま500mバッファを作成
良い例:
対象地域に適した投影座標系へ変換して距離計算
3. データ更新日を見ない
土砂災害警戒区域や避難所データは更新される可能性があります。
古いデータを使った解析は、誤解を招く可能性があります。
4. 結果を地図で確認しない
CSVだけでは位置関係を確認しづらいです。
必ずGeoJSONやQGISで地図確認できるようにします。
第4回のまとめ
本記事では、これまで作ったローカルAI-GIS基盤を、土砂災害解析AIアシスタントへ拡張しました。
ポイントは以下です。
本記事のポイント
- 土砂災害解析AIは「予測AI」ではなく「解析支援AI」として設計する
- AIに災害リスクを断定させない
- LLMは意図理解、処理計画、説明を担当する
- GIS処理はGeoPandas、Rasterio、GDALなどが厳密に実行する
- MCP Toolとして業務処理を定義する
- 避難所抽出、設備影響抽出、DEM傾斜解析に展開できる
- CSV、GeoJSON、Markdownレポートを出力できる
- 最終判断は必ず技術者が行う
- クローズドなネットワークでも活用しやすい
今後の発展
今後は以下へ発展できます。
1. QGIS連携
QGIS ProcessingをMCP Tool化し、QGISの処理アルゴリズムをAIから呼び出す。
2. 降雨情報との連携
気象庁データや土壌雨量指数などを取り込み、時系列の確認支援を行う。
3. シミュレーション解析
土砂災害に関するシミュレーションを予測事項として取り込んで確認支援を行う。
3. 点群データ解析
航空レーザー測量や点群データから地形変化を把握する。
4. 報告書自動生成
解析結果から、Word、Markdown、PDFの報告書を生成する。
5. 業務ワークフロー化
依頼、解析、承認、出力、保管までをワークフロー化する。
おわりに
AI-GISの本質は、AIが専門家を置き換えることではありません。
専門家が持つ知識を、再現性のある処理として整理し、より多くの人が安全に活用できるようにすることです。
土砂災害解析AIアシスタントは、災害リスクを断定するAIではなく、GISデータの確認、重ね合わせ、一次抽出、説明資料作成を支援する業務ツールです。
クローズドなネットワーク内で動くAI-GIS基盤は、自治体、防災、建設コンサル、インフラ管理の現場で、今後重要な選択肢になると考えています。
参考リンク
-
国土数値情報 土砂災害警戒区域データ
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-A33-v2_0.html -
気象庁 土砂キキクル
https://www.jma.go.jp/jma/kishou/know/bosai/doshakeikai.html -
MCP Python SDK
https://github.com/modelcontextprotocol/python-sdk -
Open WebUI MCP Documentation
https://docs.openwebui.com/features/extensibility/mcp/ -
Ollama API Documentation
https://docs.ollama.com/api/chat -
GDAL Documentation
https://gdal.org/ -
Rasterio Documentation
https://rasterio.readthedocs.io/