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

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