CollisionAvoidanceSystem/doc/design/airport_area_design.md

6.0 KiB

设计方案:机场区域配置集成

1. 设计目标

  • 自动加载: 在应用程序启动时自动加载并解析机场区域配置文件
  • 类型安全: 将配置映射到强类型的 Java 对象
  • 空间表示: 使用 JTS 将区域表示为内存中的几何对象
  • 统一访问: 提供中心服务 (AirportAreaService) 封装区域数据访问
  • 高效查询: 支持基于 ID 和地理位置的区域查询
  • 模块解耦: 其他模块通过依赖注入使用服务

2. 核心组件

  1. 配置属性 POJOs:

    • AirportAreasProperties: 顶层配置类
    • AreaProperties: 区域属性类
    • GeometryProperties: 几何属性类
  2. 运行时数据模型 (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;    // 失效时间(用于临时区域)
    }
    
  3. 区域类型枚举 (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. 实现细节

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