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, 地理信息系统, 应急响应系统, 测试用例, 离线地理编码