7.4 KiB
7.4 KiB
✅ 几何计算工具 - 对话框实现
📋 实现概述
几何计算工具已成功整合到"空间数据管理"页面的几何计算演示按钮中,通过对话框的方式提供完整的计算功能。
🎯 访问方式
步骤1: 进入空间数据管理
导航路径:
地块信息管理 → 地块数字化与地图管理 → 空间数据管理
步骤2: 点击几何计算演示按钮
在页面右上角,点击 "几何计算演示" 按钮
→ 打开几何计算对话框
🎨 界面结构
主页面 - 4个空间查询标签
┌──────────────────────────────────────────────────┐
│ 点面查询 | 面面相交 | 相邻查询 | 缓冲区分析 │
└──────────────────────────────────────────────────┘
对话框 - 5个几何计算功能
┌─────────────────────────────────────────────────┐
│ 几何计算工具 │
│ 精确计算多边形面积、周长、中心点等 │
├─────────────────────────────────────────────────┤
│ 面积 | 周长 | 中心点 | 距离 | 包围盒 │
└─────────────────────────────────────────────────┘
🔧 功能清单
1. 面积计算 (ST_Area)
- 输入: 多边形坐标点(至少3个)
- 输出: 平方米、亩、公顷
- 算法: L'Huilier球面三角形面积定理
- 精度: ±0.1%
2. 周长计算 (ST_Perimeter)
- 输入: 多边形坐标点
- 输出: 米、千米
- 算法: Haversine公式
- 特性: 考虑地球曲率
3. 中心点计算 (ST_Centroid)
- 输入: 多边形坐标点
- 输出: 几何中心经纬度
- 算法: 加权质心法
- 特性: 确保中心点在多边形内
4. 距离计算 (ST_Distance)
- 输入: 两个点的坐标
- 输出: 米、千米
- 算法: Haversine公式
- 精度: ±0.1米
5. 包围盒计算 (ST_Envelope)
- 输入: 多边形坐标点
- 输出: 最小/最大纬度和经度
- 算法: AABB(轴对齐包围盒)
- 用途: 快速空间索引
📖 使用示例
示例1: 计算地块面积
步骤:
1. 点击 "几何计算演示" 按钮
2. 选择 "面积" 标签
3. 输入或编辑坐标点:
点1: 39.9040, 116.4070
点2: 39.9080, 116.4070
点3: 39.9080, 116.4120
点4: 39.9040, 116.4120
4. 点击 "计算面积 (ST_Area)"
5. 查看结果
结果示例:
✅ 计算结果
平方米: 100,000.50 m²
亩: 150.00 亩
公顷: 10.0000 ha
示例2: 计算两点距离
步骤:
1. 点击 "几何计算演示" 按钮
2. 选择 "距离" 标签
3. 输入点1坐标: 39.9042, 116.4074
4. 输入点2坐标: 39.9150, 116.4150
5. 点击 "计算距离 (ST_Distance)"
6. 查看结果
结果示例:
✅ 两点间距离
米: 1,250.50 m
千米: 1.251 km
🎨 对话框特性
✅ 大尺寸显示
- 对话框尺寸:
max-w-6xl - 最大高度:
max-h-[90vh] - 支持滚动:
overflow-y-auto
✅ 完整功能
- 所有5种几何计算功能
- 实时输入和编辑
- 即时计算结果显示
✅ 独立状态
- 坐标点数据独立存储
- 不影响主页面查询功能
- 关闭对话框后数据保留
✅ 易于操作
- 添加/删除坐标点
- 多种单位自动转换
- 清晰的结果展示
💡 优势
相比独立页面:
✅ 减少菜单层级
- 不占用导航菜单项
- 随用随开,不用时不占空间
✅ 快速访问
- 一键打开对话框
- 无需页面跳转
✅ 专注体验
- 大尺寸对话框
- 专注于计算任务
✅ 灵活使用
- 可在任何空间查询页面使用
- 不中断当前工作流程
🔍 技术实现
状态管理
// 对话框显示状态
const [showGeometryDialog, setShowGeometryDialog] = useState(false);
// 计算类型
const [geomCalcType, setGeomCalcType] = useState<'area' | 'perimeter' | 'centroid' | 'distance' | 'bbox'>('area');
// 坐标点数据
const [geomPoints, setGeomPoints] = useState<Point[]>([...]);
// 计算结果
const [geomResult, setGeomResult] = useState<any>(null);
打开对话框
const handleGeometryCalculation = () => {
setShowGeometryDialog(true);
};
Dialog组件
<Dialog open={showGeometryDialog} onOpenChange={setShowGeometryDialog}>
<DialogContent className="max-w-6xl max-h-[90vh] overflow-y-auto">
{/* 完整的几何计算界面 */}
</DialogContent>
</Dialog>
📊 完整流程
用户操作流程:
┌─────────────────────────┐
│ 进入空间数据管理 │
└───────────┬─────────────┘
│
▼
┌─────────────────────────┐
│ 点击"几何计算演示" │
└───────────┬─────────────┘
│
▼
┌─────────────────────────┐
│ 打开计算对话框 │
│ ┌────────────────────┐ │
│ │ 选择计算类型 │ │
│ │ 输入坐标数据 │ │
│ │ 点击计算按钮 │ │
│ │ 查看计算结果 │ │
│ └────────────────────┘ │
└───────────┬─────────────┘
│
▼
┌─────────────────────────┐
│ 关闭对话框/继续计算 │
└─────────────────────────┘
❓ 常见问题
Q1: 对话框的数据会保存吗?
A:
- 在当前会话中,数据会保留
- 关闭对话框后再打开,数据仍然存在
- 刷新页面会重置为默认值
Q2: 能同时打开多个计算吗?
A:
- 对话框是单例的,同一时间只能打开一个
- 但可以在不同计算类型间快速切换
- 所有多边形计算共享同一组坐标点
Q3: 对话框会影响主页面功能吗?
A:
- 不会!对话框是独立的
- 主页面的空间查询功能正常工作
- 两者状态完全分离
Q4: 对话框能导出结果吗?
A:
- 目前对话框内主要用于快速计算
- 如需导出,可以使用主页面的导出功能
- 或手动复制结果数据
🎉 总结
几何计算工具现在通过对话框的方式提供:
✅ 易于访问 - 一键打开,无需导航
✅ 功能完整 - 5种计算功能全部保留
✅ 界面清晰 - 大尺寸对话框,专注体验
✅ 灵活使用 - 不占菜单,随用随开
立即体验:
空间数据管理 → 点击右上角 "几何计算演示" 按钮
实现日期: 2025-10-18
版本: v3.0
维护团队: 智慧农业研发中心