From fbb068ec702338d609c1ca6eddbdb9f182d8f211 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 24 Aug 2026 11:37:16 +0800
Subject: [PATCH] feat: extend local GeoAI capability workflows

---
 capabilities/07-risk-rule-engine/README.md |   69 ++++++++++++++++++++++++++++++++--
 1 files changed, 65 insertions(+), 4 deletions(-)

diff --git a/capabilities/07-risk-rule-engine/README.md b/capabilities/07-risk-rule-engine/README.md
index f22d6db..bf41698 100644
--- a/capabilities/07-risk-rule-engine/README.md
+++ b/capabilities/07-risk-rule-engine/README.md
@@ -1,6 +1,67 @@
-# Risk Rule Engine
+# 空间规则与风险评分
 
-- 输入:空间对象、属性、时间和可配置规则。
-- 输出:风险等级、命中原因和事件建议。
-- 首个 Demo:10 条可解释规则,支持结果回放。
+## 能力边界
 
+- 分类:C,产品/服务能力。
+- `geoai-py` 角色:可作为上游检测、分割或量测工作流的栅格/矢量成果来源;本 Demo 不调用 `geoai-py`,也不把规则或评分描述为它的内置 API。
+- 实现:GeoPandas、Shapely 和 Rasterio 在 CPU 上对空间对象执行可配置规则、计算风险分数并输出可复核的栅格与矢量成果。
+
+## 可运行 Demo
+
+输入必须是带有效 CRS 的三个文件:
+
+1. `observations.geojson`:待评分要素,必须有唯一的 `object_id` 和数值 `confidence` 字段。
+2. `zones.geojson`:风险分区,必须有 `zone_type` 字段。
+3. `rules.json`:规则、等级阈值和分数上限。
+
+输入 CRS 可以不同,分区会仅在内存中对齐到观测对象 CRS;无 CRS、地理坐标 CRS 或无法转换的输入会失败,避免把经纬度面积误作米制面积。首个 Demo 使用 EPSG:3857 的合成可追溯案例;它只验证流程逻辑,不代表现场风险精度。
+
+```powershell
+$py = .\.venvs\07-risk-rule-engine\Scripts\python.exe
+& $py .\capabilities\07-risk-rule-engine\generate_validation_inputs.py --output .\shared\data\raw\07-risk-rule-engine\validation-20260820
+& $py .\capabilities\07-risk-rule-engine\run_risk_rule_engine.py --observations .\shared\data\raw\07-risk-rule-engine\validation-20260820\normal\observations.geojson --zones .\shared\data\raw\07-risk-rule-engine\validation-20260820\normal\zones.geojson --rules .\shared\data\raw\07-risk-rule-engine\validation-20260820\normal\rules.json --output .\shared\outputs\07-risk-rule-engine\validation-normal-20260820
+```
+
+输出目录不可复用,避免覆盖历史结果:
+
+- `risk_score.tif`:风险分区及观测对象得分的单波段 GeoTIFF。
+- `risk_preview.png`:同一栅格的颜色预览,供人工视觉检查。
+- `risk_scores.geojson`:每个对象的分值、等级、命中规则、贡献及建议。
+- `risk_scores.csv`、`risk_summary.json` 与 `run_metadata.json`:可机读明细、汇总与运行证据。
+
+## 规则格式
+
+规则支持 `zone_intersection` 与 `attribute_threshold` 两类。分区规则以 `zone_type` 匹配,属性规则目前支持数值 `lt` / `lte` / `gt` / `gte` 比较。对象总分为全部命中规则分数之和,再按 `score_cap` 截断;等级阈值默认是 `medium=30`、`high=60`、`critical=85`。同一对象的每个命中规则都保留在输出中,不会被合并隐藏。
+
+## 验收集
+
+`generate_validation_inputs.py` 生成以下合成输入:
+
+| 样本 | 目的 | 可复核预期 |
+| --- | --- | --- |
+| `normal` | 无分区、普通关注分区、限制分区 | 0、25、90 分,分别验证无命中、单规则和重叠分区。 |
+| `difficult` | 分区边界、低置信度、分数上限 | 边界点命中两个分区得 90;低置信度限制区对象在 100 分上限截断;区外低置信度对象得 20。 |
+
+```powershell
+& $py -m unittest discover -s .\capabilities\07-risk-rule-engine\tests -v
+& $py -m pip check
+```
+
+## 本地实验控制台
+
+控制台页遵循“新建运行 → 案例库 → 结果工作区”。上传仅接收上述三份 `.geojson` / `.json` 文件,服务器生成新的运行 ID,并把源文件复制到 `shared/data/raw/07-risk-rule-engine/runs/<run-id>/`,处理副本放到 `shared/data/processed/07-risk-rule-engine/<run-id>/`,结果放到 `shared/outputs/07-risk-rule-engine/runs/<run-id>/`。它不访问无人机产品、帐号、产品 API 或数据库。
+
+```powershell
+Set-Location .\apps\workbench-console
+npm run build
+Set-Location ..\..
+py -3.12 .\scripts\serve_workbench_console.py --port 6187
+```
+
+打开 `http://127.0.0.1:6187`,进入“空间规则与风险评分”。
+
+## 限制与许可
+
+- 风险等级是规则产物,不是事件事实、执法结论或自动处置指令;规则参数和分区权威性需要业务方验证。
+- 合成验收集只验证分数、空间关系、输出合同和异常处理;尚无人工标注的真实风险案例,不能报告精度、召回率或生产可用性。
+- 本 Demo 没有模型权重。`geoai-py` 为 MIT(仅上游兼容定位);GeoPandas 为 BSD 3-Clause,Rasterio 为 BSD 3-Clause,Shapely 为 BSD 3-Clause。发布或商用前仍应按锁定版本核查全部间接依赖和输入数据许可。

--
Gitblit v1.9.3