6.0 KiB
6.0 KiB
设计方案:机场区域配置集成
1. 设计目标
- 自动加载: 在应用程序启动时自动加载并解析机场区域配置文件
- 类型安全: 将配置映射到强类型的 Java 对象
- 空间表示: 使用 JTS 将区域表示为内存中的几何对象
- 统一访问: 提供中心服务 (
AirportAreaService) 封装区域数据访问 - 高效查询: 支持基于 ID 和地理位置的区域查询
- 模块解耦: 其他模块通过依赖注入使用服务
2. 核心组件
-
配置属性 POJOs:
AirportAreasProperties: 顶层配置类AreaProperties: 区域属性类GeometryProperties: 几何属性类
-
运行时数据模型 (
AreaInfo):@Value @Builder public class AreaInfo { String id; // 区域唯一标识 String name; // 区域名称 AreaType type; // 区域类型(跑道、机坪等) Double speedLimitKph; // 限速(公里/小时) String description; // 区域用途描述 boolean restricted; // 是否限制进入 List<String> allowedVehicleTypes; // 允许的车辆类型 List<String> allowedAircraftTypes; // 允许的航空器类型 Double maxHeight; // 最大高度限制(米) Double maxWeight; // 最大重量限制(吨) Polygon boundary; // JTS 多边形边界 ZonedDateTime activeTime; // 生效时间(用于临时区域) ZonedDateTime expiryTime; // 失效时间(用于临时区域) } -
区域类型枚举 (
AreaType):public enum AreaType { RUNWAY, // 跑道 TAXIWAY, // 滑行道 APRON, // 机坪 SERVICE_AREA, // 服务区 CARGO_AREA, // 货库区 TEMPORARY_AREA, // 临时区域 PROTECTION_ZONE, // 地面保护区 RESTRICTED_AREA, // 限制区 PARKING_AREA, // 停放区 MAINTENANCE_AREA // 维修区 }
3. 配置示例 (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. 区域服务接口
public interface AirportAreaService {
Optional<AreaInfo> getAreaById(String areaId);
List<AreaInfo> findAreasContainingPoint(GeoPosition position);
Optional<AreaInfo> findDominantAreaAt(GeoPosition position);
Optional<Double> getSpeedLimitKphAt(GeoPosition position);
List<AreaInfo> findAreasByType(AreaType type);
boolean isPositionInRestrictedArea(GeoPosition position);
List<String> getAllowedVehicleTypesAt(GeoPosition position);
List<String> getAllowedAircraftTypesAt(GeoPosition position);
}
5. 实现细节
-
空间索引:
- 使用 JTS 的
STRtree实现空间索引 - 支持快速查询包含某点的区域
- 使用 JTS 的
-
时间管理:
- 对临时区域实现时间有效性检查
- 支持区域的时间段限制
-
访问控制:
- 实现基于车辆/航空器类型的访问控制
- 支持区域限制检查
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 文档
- 添加使用示例
- 完善设计文档
- 编写部署指南