# 设计方案:机场区域配置集成 ## 1. 设计目标 * **自动加载**: 在应用程序启动时自动加载并解析机场区域配置文件 * **类型安全**: 将配置映射到强类型的 Java 对象 * **空间表示**: 使用 JTS 将区域表示为内存中的几何对象 * **统一访问**: 提供中心服务 (`AirportAreaService`) 封装区域数据访问 * **高效查询**: 支持基于 ID 和地理位置的区域查询 * **模块解耦**: 其他模块通过依赖注入使用服务 ## 2. 核心组件 1. **配置属性 POJOs**: - `AirportAreasProperties`: 顶层配置类 - `AreaProperties`: 区域属性类 - `GeometryProperties`: 几何属性类 2. **运行时数据模型 (`AreaInfo`)**: ```java @Value @Builder public class AreaInfo { String id; // 区域唯一标识 String name; // 区域名称 AreaType type; // 区域类型(跑道、机坪等) Double speedLimitKph; // 限速(公里/小时) String description; // 区域用途描述 boolean restricted; // 是否限制进入 List allowedVehicleTypes; // 允许的车辆类型 List allowedAircraftTypes; // 允许的航空器类型 Double maxHeight; // 最大高度限制(米) Double maxWeight; // 最大重量限制(吨) Polygon boundary; // JTS 多边形边界 ZonedDateTime activeTime; // 生效时间(用于临时区域) ZonedDateTime expiryTime; // 失效时间(用于临时区域) } ``` 3. **区域类型枚举 (`AreaType`)**: ```java public enum AreaType { RUNWAY, // 跑道 TAXIWAY, // 滑行道 APRON, // 机坪 SERVICE_AREA, // 服务区 CARGO_AREA, // 货库区 TEMPORARY_AREA, // 临时区域 PROTECTION_ZONE, // 地面保护区 RESTRICTED_AREA, // 限制区 PARKING_AREA, // 停放区 MAINTENANCE_AREA // 维修区 } ``` ## 3. 配置示例 (YAML) ```yaml areas: - id: "runway-01" name: "主跑道" type: "RUNWAY" speedLimitKph: 0 # 跑道不允许车辆行驶 description: "用于航空器起降的主要跑道" restricted: true allowedAircraftTypes: ["A320", "B737", "A330"] maxHeight: 0 maxWeight: 0 geometry: type: "Polygon" coordinates: [[[x1,y1], [x2,y2], ...]] - id: "apron-01" name: "1号机坪" type: "APRON" speedLimitKph: 25 description: "用于航空器停放的区域" restricted: true allowedVehicleTypes: ["FOLLOW_ME", "TUG", "FUEL_TRUCK"] allowedAircraftTypes: ["A320", "B737"] maxHeight: 15 maxWeight: 100 geometry: type: "Polygon" coordinates: [[[x1,y1], [x2,y2], ...]] ``` ## 4. 区域服务接口 ```java public interface AirportAreaService { Optional getAreaById(String areaId); List findAreasContainingPoint(GeoPosition position); Optional findDominantAreaAt(GeoPosition position); Optional getSpeedLimitKphAt(GeoPosition position); List findAreasByType(AreaType type); boolean isPositionInRestrictedArea(GeoPosition position); List getAllowedVehicleTypesAt(GeoPosition position); List getAllowedAircraftTypesAt(GeoPosition position); } ``` ## 5. 实现细节 1. **空间索引**: - 使用 JTS 的 `STRtree` 实现空间索引 - 支持快速查询包含某点的区域 2. **时间管理**: - 对临时区域实现时间有效性检查 - 支持区域的时间段限制 3. **访问控制**: - 实现基于车辆/航空器类型的访问控制 - 支持区域限制检查 ## 6. 目录结构 ``` src/main/java/com/dongni/collisionavoidance/ ├── config/ │ ├── properties/ │ │ ├── AirportAreasProperties.java │ │ ├── AreaProperties.java │ │ └── GeometryProperties.java │ └── AirportAreaConfig.java ├── areas/ │ ├── model/ │ │ ├── AreaInfo.java │ │ └── AreaType.java │ └── service/ │ └── AirportAreaService.java ``` ## 7. 依赖库 * **Java Topology Suite (JTS)**: `org.locationtech.jts:jts-core:1.19.0` * **SnakeYAML**: (由 Spring Boot 包含) * **Lombok**: (用于简化代码) ## 8. 未来考虑 * **精确缓冲**: 实现基于 UTM 或其他合适投影坐标系的缓冲计算 * **动态更新**: 考虑配置热加载机制 * **单位转换**: 实现更健壮的单位转换库 * **区域关系**: 在需要时添加区域之间的关系管理 ## 9. 改进计划 ### 9.1 区域空间查询功能增强 - 实现根据坐标点查询包含该点的区域 - 添加区域重叠检测功能 - 实现最近区域查询功能 - 优化空间索引性能 ### 9.2 区域时间有效性验证 - 实现区域生效时间和失效时间的检查机制 - 添加区域时间有效性过滤功能 - 支持临时区域的动态激活和失效 ### 9.3 区域限制条件验证 - 实现车辆类型准入验证 - 实现航空器类型准入验证 - 添加高度和重量限制检查 - 支持自定义限制条件 ### 9.4 区域关系管理 - 定义区域之间的关系(相邻、包含等) - 实现区域组合查询功能 - 支持区域层级结构 - 添加区域依赖关系管理 ### 9.5 空间索引优化 - 使用 JTS 的 `STRtree` 实现高效的空间查询 - 优化区域边界缓冲计算 - 实现空间查询缓存机制 - 支持大规模区域数据的高效处理 ### 9.6 区域变更通知机制 - 实现区域属性动态更新功能 - 添加区域变更事件通知机制 - 支持区域配置热加载 - 实现区域变更日志记录 ### 9.7 测试覆盖 - 增加单元测试覆盖率 - 添加集成测试场景 - 实现性能测试基准 - 支持自动化测试流程 ### 9.8 文档完善 - 更新 API 文档 - 添加使用示例 - 完善设计文档 - 编写部署指南