CollisionAvoidanceSystem/doc/design/airport_area_design.md

195 lines
6.0 KiB
Markdown

# 设计方案:机场区域配置集成
## 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<String> allowedVehicleTypes; // 允许的车辆类型
List<String> 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<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. 实现细节
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 文档
- 添加使用示例
- 完善设计文档
- 编写部署指南