dppel/Emergency-Incident-Response-System
GitHub: dppel/Emergency-Incident-Response-System
一套专为断网环境设计的全栈紧急事件响应与 GIS 地图平台,通过自定义离线地理编码引擎和 WPF 桌面仪表板实现事件管理、地址解析与动态路径规划。
Stars: 0 | Forks: 0
# 紧急事件响应与 GIS 地图平台
这是一个现代化的全栈企业级事件管理系统,结合了 C# WPF 桌面控制室仪表板、健壮的 ASP.NET Core Web API,以及带有动态路径规划的自定义离线地理编码引擎。
专为外部互联网依赖(例如 Google Maps API)可能不可用或受限的高可靠性环境而开发。
## 🛠️ 技术栈与架构
```
graph TD
subgraph WPF Desktop Client
UI[WPF Control Room UI] --> Geocoder[Offline Geocoder Engine]
UI --> Map[GMap.NET Offline Tile Viewer]
end
subgraph Local Databases
Geocoder --> SQLite[(SQLite Geocoding DB)]
end
subgraph Server Backend
UI --> API[ASP.NET Core Web API]
API --> EF[Entity Framework Core]
EF --> PostgreSQL[(PostgreSQL DB)]
end
```
### **客户端(桌面端)**
* **框架:** .NET 10.0 WPF (C# / XAML)
* **GIS 引擎:** GMap.NET(集成了自定义的基于离线文件的切片提供程序)
* **本地存储:** SQLite(用于 5,000 多条街道和邮政编码的离线地理编码查找)
### **服务器(后端)**
* **Web 框架:** ASP.NET Core MVC (Web API)
* **数据库 ORM:** Entity Framework Core (EF Core),支持自动数据库迁移
* **主数据库:** PostgreSQL(用于集中存储用户和事件日志)
* **访问控制:** 基于角色的访问控制 (RBAC),包含三个权限级别:`Admin`、`Operator` 和 `User`
## 🌟 核心功能
### 1. 🔍 自定义离线地理编码引擎
旨在无需外部 Web API 查询的情况下离线解析希腊语地址:
* **拼音拼写对齐(同音词):** 自动规范化拼写差异(例如,将带有“Καλλιδοπούλου”的查询匹配到数据库条目“Καλιδοπούλου”)。
* **模糊子字符串搜索:** 自动捕获部分匹配的结果。
* **空间边界框邻近度验证:** 拒绝位于所选市政分区中心 2km 半径之外的搜索结果,以防止出现重叠的街道名称重复项(例如,区分 *Ampelokipoi* 与 *Menemeni* 的“Venizelou”)。
* **门牌号插值偏移:** 沿稳定方向动态偏移门牌号的坐标(每个号码约 4 米),以避免地图标记相互堆叠。
### 2. 🗺️ 动态路线映射
* 动态绘制事件坐标与最近的警察/紧急站点之间的路线叠加层。
* 使用自定义的 `LocalTileProvider` 直接从本地文件夹加载地图切片,以支持完全断网操作。
* 当鼠标悬停在地图标记上时,显示格式化的弹窗(WPF 富工具提示)。
### 3. 📊 控制室仪表板
* **交互式图表:** 带有动态增长动画的统计条形图,按市政区分组显示事件分布。
* **浅色/深色主题切换器:** 完全原生的主题资源字典,可在所有活动窗口中即时动态切换颜色。
* **实时事件模拟器:** 一个模拟触发器,用于生成随机事件 payload、将其保存到后端、更新统计数据,并在桌面角落弹出自定义的向上滑动 Toast 通知窗口。
* **CSV 导出器:** 将事件表导出为 UTF-8 BOM CSV 文件(确保希腊字符在 Microsoft Excel 中正确显示)。
## 🚀 快速开始
### 前置条件
* [.NET 10.0 SDK](https://dotnet.microsoft.com/download)
* [PostgreSQL 数据库服务器](https://www.postgresql.org/)
### 1. 设置数据库与后端 Web API
1. 在 `Kartes/appsettings.json` 中配置你的 PostgreSQL 连接字符串:
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Database=kartes_db;Username=postgres;Password=YOUR_PASSWORD"
}
2. 导航到 Web API 文件夹并运行应用程序(迁移将在启动时自动应用):
cd Kartes/Kartes
dotnet run
服务器将开始在 `http://localhost:5191` 监听。
### 2. 运行 WPF 桌面客户端
1. 导航到桌面端文件夹:
cd kartes.desktop/kartes.desktop
2. 构建并运行项目:
dotnet run
3. 使用你的凭据(例如 `admin@admin.com` / `admin123` 或你的自定义账户)登录以访问仪表板。
## 📂 项目结构
* `Kartes/` - ASP.NET Core Web API 后端项目。
* `kartes.desktop/` - WPF 桌面客户端项目。
* `thessaloniki_geocoding.db` - 包含希腊塞萨洛尼基街道地理数据和坐标的 SQLite 数据库。
* `Themes/` - 浅色/深色主题的资源字典。
## 📜 许可证
本项目基于 MIT 许可证授权 - 详见 [LICENSE](LICENSE) 文件了解详情。
标签:PostgreSQL, WPF, 地理信息系统, 应急响应系统, 测试用例, 离线地理编码