195 lines
6.0 KiB
Markdown
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 文档
|
|
- 添加使用示例
|
|
- 完善设计文档
|
|
- 编写部署指南 |