Files
smart-crop-ui/src/ROUTE_PLANNING_FIELD_INTEGRATION.md

11 KiB
Raw Blame History

作业路线规划 - 地块选择功能集成

🎯 更新内容

根据需求,作业路线规划现在需要先选择地块管理系统中维护的地块,实现与地块管理系统的深度集成。


📦 新增功能

1 地块选择对话框

在创建新路线规划时,系统会弹出地块选择对话框,用户可以:

  • 选择已有地块作为规划基础
  • 或选择"不选择",手动绘制边界

功能特点:

  • 自动加载地块管理系统中的所有地块
  • 只显示状态为"活跃"的地块
  • 显示地块的详细信息(面积、位置、土壤类型等)
  • 实时预览选中地块的信息

2 地块信息关联

选择地块后,路线规划会自动关联地块信息:

  • 地块ID (fieldId)
  • 地块名称 (fieldName)
  • 地块边界坐标(自动转换为路线边界)
  • 路线名称自动命名为"{地块名称}作业路线"

3 路线列表显示优化

路线列表中新增地块信息显示:

  • 显示关联的地块名称
  • 地图图标标识
  • 直观了解路线对应的地块

🎨 界面展示

地块选择对话框

┌─────────────────────────────────────────────┐
│  选择地块                                    │
│  从地块管理系统中选择一个地块作为作业路线    │
│  规划的基础                                  │
├─────────────────────────────────────────────┤
│                                             │
│  选择地块                                    │
│  [选择地块 ▼]                                │
│    ○ 不选择(手动绘制边界)                  │
│    ○ 东一地块 (50亩 · 东区)                 │
│    ○ 西二地块 (80亩 · 西区)                 │
│    ○ 南三地块 (35亩 · 南区)                 │
│                                             │
│  ┌─────────────────────────────────────┐   │
│  │  📍 地块信息                         │   │
│  ├─────────────────────────────────────┤   │
│  │  地块名称: 东一地块                  │   │
│  │  地块面积: 50 亩                     │   │
│  │  所在位置: 东区                      │   │
│  │  土壤类型: 壤土                      │   │
│  └─────────────────────────────────────┘   │
│                                             │
│  [取消]  [✓ 确认创建]                       │
└─────────────────────────────────────────────┘

路线列表(带地块信息)

┌──────────────────────┐
│  路线列表            │
├──────────────────────┤
│ ✓ 东一地块作业路线   │
│   📍 东一地块        │  ← 新增地块名称显示
│   18行 · 3.6km       │
│   [草稿]             │
│                      │
│ □ 西二地块作业路线   │
│   📍 西二地块        │
│   24行 · 4.8km       │
│   [已审核]           │
└──────────────────────┘

🔧 技术实现

数据结构更新

RoutePlan 接口

interface RoutePlan {
  id: string;
  name: string;
  fieldId?: string;              // 新增关联地块ID
  fieldName?: string;            // 新增:关联地块名称
  fieldBoundary: RoutePoint[];
  obstacles: Obstacle[];
  workingLines: RoutePoint[][];
  params: RouteParams;
  stats: RouteStats;
  createdAt: string;
  status: 'draft' | 'approved' | 'exported';
}

核心功能实现

1. 加载地块数据

useEffect(() => {
  // 加载地块数据
  const fieldsData = localStorage.getItem('smart_agriculture_fields');
  if (fieldsData) {
    setFields(JSON.parse(fieldsData));
  }
}, []);

2. 创建路线流程

const createNewRoute = () => {
  // 打开地块选择对话框
  setShowFieldSelectDialog(true);
};

const confirmCreateRoute = () => {
  let fieldBoundary: RoutePoint[] = [];
  let fieldName = '';
  let fieldId: string | undefined;

  if (selectedFieldId && selectedFieldId !== 'none') {
    // 使用选中的地块边界
    const selectedField = fields.find(f => f.id === selectedFieldId);
    if (selectedField) {
      // 转换地块坐标到画布坐标系
      fieldBoundary = selectedField.coordinates.map(coord => ({
        lng: coord.lng * 10 + 100,
        lat: coord.lat * 10 + 100,
      }));
      fieldName = selectedField.name;
      fieldId = selectedField.id;
    }
  }

  const newRoute: RoutePlan = {
    id: `route-${Date.now()}`,
    name: fieldName ? `${fieldName}作业路线` : `路线规划${routes.length + 1}`,
    fieldId,
    fieldName,
    fieldBoundary,
    // ... 其他属性
  };

  setRoutes([...routes, newRoute]);
  setSelectedRoute(newRoute);
  setShowFieldSelectDialog(false);
};

3. 坐标转换

// 地块坐标(经纬度)→ Canvas坐标
const convertCoordinates = (geoCoords: GeoCoordinate[]) => {
  return geoCoords.map(coord => ({
    lng: coord.lng * 10 + 100,  // 缩放和平移
    lat: coord.lat * 10 + 100,
  }));
};

📊 完整工作流程

流程1: 基于地块创建路线

1. 点击"新建规划"
   ↓
2. 弹出"选择地块"对话框
   ↓
3. 从下拉列表选择地块
   → 显示地块信息预览
   ↓
4. 点击"确认创建"
   ↓
5. 系统自动:
   - 关联地块信息
   - 加载地块边界
   - 命名为"{地块名称}作业路线"
   ↓
6. 在地图上显示地块边界
   ↓
7. 设置作业参数
   ↓
8. 生成作业路线
   ↓
9. 保存路线规划

流程2: 手动绘制边界

1. 点击"新建规划"
   ↓
2. 弹出"选择地块"对话框
   ↓
3. 选择"不选择(手动绘制边界)"
   ↓
4. 点击"确认创建"
   ↓
5. 创建空白路线规划
   ↓
6. 点击"绘制边界"按钮
   ↓
7. 在地图上手动绘制边界
   ↓
8. 完成后设置参数生成路线

🎯 功能对比

更新前 vs 更新后

功能 更新前 更新后
地块选择 支持
地块关联 自动关联
边界导入 手动绘制 自动导入
路线命名 手动输入 自动命名
地块信息显示 显示地块名称
与地块系统集成 完全集成

💡 使用建议

1. 选择地块的优势

自动导入边界

  • 无需手动绘制
  • 精确的地块边界
  • 节省时间

数据关联

  • 路线与地块关联
  • 便于追溯和管理
  • 数据一致性

智能命名

  • 自动生成描述性名称
  • 便于识别和查找

2. 手动绘制的场景

适用于以下情况:

  • 🔹 地块尚未在系统中录入
  • 🔹 临时作业区域
  • 🔹 需要特殊边界处理

3. 最佳实践

推荐工作流:
1. 在地块管理系统中维护所有地块信息
2. 创建路线规划时选择对应地块
3. 系统自动导入边界和信息
4. 设置作业参数生成路线
5. 保存并导出至农机系统

📋 新增状<E5A29E><E78AB6><EFBFBD>和数据

新增状态

const [fields, setFields] = useState<Field[]>([]);           // 地块列表
const [selectedFieldId, setSelectedFieldId] = useState<string>('none');  // 选中的地块ID
const [showFieldSelectDialog, setShowFieldSelectDialog] = useState(false);  // 对话框显示

示例数据

// 地块数据(从地块管理系统加载)
const fields = [
  {
    id: 'field-1',
    name: '东一地块',
    area: 50,
    location: '东区',
    soilType: 'loamy',
    coordinates: [
      { lng: 10, lat: 10 },
      { lng: 50, lat: 10 },
      { lng: 50, lat: 40 },
      { lng: 10, lat: 40 },
    ],
    status: 'active',
  },
];

// 路线规划数据(关联地块)
const route = {
  id: 'route-1',
  name: '东一地块作业路线',
  fieldId: 'field-1',        // 关联地块ID
  fieldName: '东一地块',      // 关联地块名称
  fieldBoundary: [...],       // 从地块坐标转换
};

功能验证

测试场景

场景1: 选择地块创建路线

✅ 打开地块选择对话框
✅ 加载所有活跃地块
✅ 选择地块后显示详细信息
✅ 确认创建后自动关联
✅ 地块边界正确显示
✅ 路线名称自动生成

场景2: 不选择地块

✅ 选择"不选择(手动绘制边界)"
✅ 创建空白路线
✅ 可以手动绘制边界
✅ 正常生成路线

场景3: 路线列表显示

✅ 关联地块的路线显示地块名称
✅ 地图图标正确显示
✅ 未关联地块的路线不显示地块信息

🎨 UI优化

1. 地块选择器优化

  • 地图图标标识
  • 显示地块面积和位置
  • 实时信息预览
  • 清晰的提示文字

2. 路线列表优化

  • 新增地块名称显示
  • 地图图标标识
  • 更直观的信息呈现

3. 提示信息

  • 选择地块时的信息预览
  • 不选择地块时的提示
  • 创建成功的反馈

🔗 系统集成

与地块管理系统的关联

地块管理系统
    ↓
   地块数据
    ↓
路线规划系统
    ↓
  作业路线
    ↓
 下发至农机

数据流向

1. 地块管理系统录入/维护地块
   ↓
2. 路线规划选择地块
   ↓
3. 自动导入地块边界
   ↓
4. 生成作业路线
   ↓
5. 下发至农机执行
   ↓
6. 作业数据回传
   ↓
7. 关联到对应地块

📝 注意事项

1. 坐标系统

  • 地块坐标经纬度坐标WGS84
  • Canvas坐标像素坐标
  • 需要进行坐标转换

2. 数据一致性

  • 地块数据变更时,需考虑已关联的路线
  • 建议保留历史地块信息

3. 用户体验

  • 提供清晰的选择引导
  • 支持两种创建方式
  • 提供充分的信息预览

🎉 总结

完成内容

  1. 新增地块选择对话框
  2. 实现地块数据加载
  3. 自动导入地块边界
  4. 自动关联地块信息
  5. 智能路线命名
  6. 路线列表显示优化
  7. 支持手动绘制备选方案

🎯 核心价值

  • 提高效率: 无需手动绘制边界
  • 数据关联: 路线与地块完整关联
  • 便于管理: 清晰的数据追溯
  • 用户友好: 直观的操作流程

📊 状态

功能完成,可正常使用


更新时间: 2025-10-17
版本: v1.2
状态: 已集成地块选择功能