OPER-004: 作业过程记录
优先级: 🟡 中 (14.0分) | 实施周期: 2-3周
客户原话
"我们合作社有20多台农机,每天在外面作业,我根本不知道他们在哪里、干了什么、干了多久。机手说作业了8小时,我也不知道是真是假。有时候农户投诉说机手中途离开了,机手说没有,双方各执一词。油耗也对不上,机手说跑了100公里,油耗却很高,怀疑有猫腻。想要个系统能记录作业全过程,包括作业轨迹、作业时长、油耗、中途停留这些,数据自动记录,不能作假。这样管理起来心里有底,机手也不敢偷懒。"
—— 某农机合作社理事长
客户类型需求差异
农机合作社(10-50台,本地作业)
需求程度: ⭐⭐⭐⭐⭐ 必需
核心需求:
- 实时位置监控
- 作业轨迹记录
- 作业时长统计
- 油耗数据记录
- 异常事件记录
关键功能:
- GPS轨迹自动记录
- 作业状态实时更新
- 油耗自动计算
- 异常自动预警
- 作业报告生成
不需要的功能:
- 复杂的数据分析
- 多维度报表
- 高级预测模型
农机服务站(跨区作业)
需求程度: ⭐⭐⭐⭐⭐ 必需
核心需求:
- 跨区域作业监控
- 作业数据云端存储
- 多设备数据共享
- 作业轨迹回放
- 作业数据导出
关键功能:
- 离线轨迹记录
- 云端数据同步
- 轨迹回放
- 数据导出
- 多设备协同
不需要的功能:
- 内部成本核算
- 复杂的权限管理
大型农场(自有农机队)
需求程度: ⭐⭐⭐⭐⭐ 必需
核心需求:
- 机队统一调度监控
- 作业效率分析
- 油耗成本分析
- 作业数据统计
- 与计划对比
关键功能:
- 机队监控大屏
- 效率分析报表
- 成本统计
- 计划执行对比
- 数据导出
不需要的功能:
- 对外收费
- 客户确认
农机租赁公司(租赁+作业)
需求程度: ⭐⭐⭐⭐⭐ 必需
核心需求:
- 租赁设备位置监控
- 作业数据作为结算依据
- 作业记录防篡改
- 纠纷时可追溯
- 作业数据导出
关键功能:
- 实时位置监控
- 数据防篡改
- 电子围栏
- 数据导出
- 纠纷追溯
业务场景描述
典型场景
场景1: 实时监控作业进度
- 调度员打开监控大屏
- 查看地图上所有作业机具位置
- 点击某台机具,查看详细信息
- 查看作业进度和预计完成时间
- 发现异常及时处理
场景2: 作业轨迹自动记录
- 机手开始作业,系统自动记录轨迹
- GPS每10秒采集一次位置
- 记录作业速度、方向、海拔
- 作业结束,轨迹自动上传
- 生成作业轨迹图
场景3: 作业时长精确统计
- 系统自动识别作业状态(作业/怠速/停车)
- 根据速度和位置判断作业状态
- 精确统计作业时长、怠速时长
- 生成作业时长报表
- 作为结算依据
场景4: 油耗数据自动采集
- 油耗传感器实时采集油耗数据
- 系统自动计算百公里油耗
- 对比历史油耗,发现异常
- 生成油耗分析报表
- 优化油耗管理
场景5: 异常事件及时预警
- 机具长时间停留,系统自动预警
- 机具偏离作业区域,系统自动预警
- 油耗异常,系统自动预警
- 通知调度员和机手
- 记录异常事件
核心痛点
- 位置不可见 - 不知道机具当前位置和作业进度
- 过程不透明 - 作业细节无法实时掌握
- 时长难统计 - 作业时间、怠速时间难以准确记录
- 油耗难核算 - 油耗数据缺失,成本核算不准
- 异常难发现 - 作业异常不能及时发现和处理
业务流程图
当前人工流程
痛点:
- 手工记录容易出错或遗漏
- 口头汇报不准确,无法核实
- 凭记忆回忆,数据不可靠
- 数据真实性无法保证
- 纠纷时缺乏客观证据
系统化流程
优势:
- 数据自动采集,无需人工记录
- GPS轨迹准确可靠
- 作业状态智能识别
- 数据实时上传,防止篡改
- 完整的作业过程可追溯
用户故事
故事1: 调度员实时监控作业
作为 调度员 我想要 实时查看所有作业机具的位置和状态 以便 及时发现问题,协调资源
验收标准:
- 打开监控大屏,查看地图上所有机具位置
- 机具位置每10秒更新一次
- 点击机具图标,查看详细信息(机手、订单、作业进度)
- 查看作业轨迹和历史位置
- 发现异常及时预警
故事2: 机手查看作业记录
作为 机手 我想要 查看自己的作业记录 以便 了解作业情况,核对结算数据
验收标准:
- 查看今日作业列表
- 查看每个订单的作业轨迹图
- 查看作业时长、怠速时长统计
- 查看油耗数据
- 导出作业记录
故事3: 农户查看作业轨迹
作为 农户 我想要 查看作业轨迹 以便 确认作业范围和质量
验收标准:
- 收到作业完成通知
- 查看作业轨迹图
- 查看作业覆盖范围
- 查看作业时长
- 确认无误后签字
故事4: 管理员分析作业数据
作为 管理员 我想要 分析作业数据 以便 优化运营,降低成本
验收标准:
- 查看作业统计报表
- 分析作业效率趋势
- 分析油耗成本
- 识别低效作业
- 制定改进措施
故事5: 系统自动预警异常
作为 系统 我想要 自动识别和预警异常 以便 及时发现问题,避免损失
验收标准:
- 机具长时间停留自动预警
- 机具偏离作业区域自动预警
- 油耗异常自动预警
- 通知相关人员
- 记录异常事件
数据模型
核心实体
1. 作业记录 (OperationRecord)
interface OperationRecord {
id: string // 记录ID
recordNo: string // 记录编号: OR-YYYYMMDD-XXXX
orderId: string // 关联订单ID
machineId: string // 机具ID
operatorId: string // 机手ID
operatorName: string // 机手姓名
// 作业信息
operationType: 'plowing' | 'seeding' | 'harvesting' | 'spraying' // 作业类型
fieldId: string // 地块ID
fieldName: string // 地块名称
area: number // 作业面积(亩)
// 时间信息
startTime: Date // 开始时间
endTime?: Date // 结束时间
duration: number // 作业时长(分钟)
idleTime: number // 怠速时长(分钟)
pauseTime: number // 暂停时长(分钟)
// 轨迹信息
trackPoints: TrackPoint[] // 轨迹点
totalDistance: number // 总里程(公里)
workDistance: number // 作业里程(公里)
averageSpeed: number // 平均速度(km/h)
maxSpeed: number // 最高速度(km/h)
// 油耗信息
fuelConsumption: number // 油耗(升)
fuelCost: number // 油费(元)
fuelEfficiency: number // 百公里油耗(升/100km)
// 作业状态
status: 'working' | 'idle' | 'paused' | 'completed' // 当前状态
workProgress: number // 作业进度(%)
// 异常事件
events: OperationEvent[] // 异常事件
// 确认信息
operatorConfirmed: boolean // 机手确认
operatorConfirmedAt?: Date // 机手确认时间
customerConfirmed: boolean // 客户确认
customerConfirmedAt?: Date // 客户确认时间
// 系统字段
createdAt: Date
updatedAt: Date
syncStatus: 'local' | 'synced' // 同步状态
}2. 轨迹点 (TrackPoint)
interface TrackPoint {
id: string
recordId: string // 作业记录ID
// 位置信息
latitude: number // 纬度
longitude: number // 经度
altitude: number // 海拔(米)
accuracy: number // 精度(米)
// 状态信息
speed: number // 速度(km/h)
direction: number // 方向(度)
status: 'working' | 'idle' | 'paused' // 状态
// 时间信息
timestamp: Date // 采集时间
// 传感器数据
fuelLevel?: number // 油量(%)
engineRPM?: number // 发动机转速
engineTemp?: number // 发动机温度
}3. 作业事件 (OperationEvent)
interface OperationEvent {
id: string
recordId: string // 作业记录ID
// 事件信息
eventType: 'pause' | 'resume' | 'alarm' | 'exception' // 事件类型
eventCode: string // 事件代码
eventName: string // 事件名称
description: string // 事件描述
// 位置信息
location: Coordinate // 事件位置
// 时间信息
occurredAt: Date // 发生时间
duration?: number // 持续时长(分钟)
// 处理信息
handled: boolean // 是否已处理
handledBy?: string // 处理人
handledAt?: Date // 处理时间
handleNote?: string // 处理说明
// 严重程度
severity: 'info' | 'warning' | 'error' | 'critical' // 严重程度
}4. 作业统计 (OperationStatistics)
interface OperationStatistics {
id: string
period: 'daily' | 'weekly' | 'monthly' // 统计周期
startDate: Date
endDate: Date
// 作业统计
totalRecords: number // 作业次数
totalArea: number // 总作业面积(亩)
totalDuration: number // 总作业时长(小时)
totalDistance: number // 总里程(公里)
// 效率统计
averageSpeed: number // 平均速度(km/h)
averageEfficiency: number // 平均效率(亩/小时)
utilizationRate: number // 利用率(%)
// 油耗统计
totalFuelConsumption: number // 总油耗(升)
totalFuelCost: number // 总油费(元)
averageFuelEfficiency: number // 平均百公里油耗(升/100km)
// 异常统计
totalEvents: number // 异常事件数
criticalEvents: number // 严重异常数
// 按类型统计
byOperationType: {
operationType: string
count: number
area: number
duration: number
}[]
// 按机具统计
byMachine: {
machineId: string
machineName: string
count: number
area: number
duration: number
}[]
// 按机手统计
byOperator: {
operatorId: string
operatorName: string
count: number
area: number
duration: number
}[]
}数据关系
接口设计
1. 开始作业记录
POST /api/operation-records/start
Request:
{
orderId: string,
machineId: string,
operatorId: string,
operationType: string,
fieldId: string
}
Response:
{
code: 0,
message: "success",
data: {
recordId: string,
recordNo: string,
startTime: Date
}
}2. 上传轨迹点
POST /api/operation-records/{recordId}/track-points
Request:
{
points: [
{
latitude: number,
longitude: number,
altitude: number,
accuracy: number,
speed: number,
direction: number,
status: string,
timestamp: Date,
fuelLevel?: number
}
]
}
Response:
{
code: 0,
message: "success",
data: {
receivedCount: number,
totalPoints: number
}
}3. 记录作业事件
POST /api/operation-records/{recordId}/events
Request:
{
eventType: string,
eventCode: string,
description: string,
location: Coordinate,
severity: string
}
Response:
{
code: 0,
message: "success",
data: {
eventId: string,
occurredAt: Date
}
}4. 完成作业记录
POST /api/operation-records/{recordId}/complete
Request:
{
endTime: Date,
area: number,
fuelConsumption: number
}
Response:
{
code: 0,
message: "success",
data: {
recordId: string,
status: "completed",
summary: {
duration: number,
distance: number,
fuelConsumption: number,
averageSpeed: number
}
}
}5. 查询作业记录
GET /api/operation-records?machineId={machineId}&startDate={startDate}&endDate={endDate}
Response:
{
code: 0,
message: "success",
data: {
total: number,
list: [
{
recordId: string,
recordNo: string,
operationType: string,
fieldName: string,
area: number,
duration: number,
startTime: Date,
endTime: Date,
status: string
}
]
}
}6. 获取作业轨迹
GET /api/operation-records/{recordId}/track
Response:
{
code: 0,
message: "success",
data: {
recordId: string,
trackPoints: TrackPoint[],
totalDistance: number,
averageSpeed: number,
mapImageUrl: string // 轨迹图URL
}
}7. 获取实时位置
GET /api/machines/realtime-locations
Response:
{
code: 0,
message: "success",
data: {
machines: [
{
machineId: string,
machineName: string,
location: Coordinate,
speed: number,
status: string,
operatorName: string,
orderId: string,
lastUpdateTime: Date
}
]
}
}8. 获取作业统计
GET /api/operation-records/statistics?period={period}&startDate={startDate}&endDate={endDate}
Response:
{
code: 0,
message: "success",
data: {
summary: {
totalRecords: number,
totalArea: number,
totalDuration: number,
totalDistance: number,
averageEfficiency: number
},
byOperationType: [...],
byMachine: [...],
byOperator: [...],
trends: [...]
}
}关键业务规则
1. 记录编号规则
- 格式:
OR-YYYYMMDD-XXXX - 示例:
OR-20240307-0001 - 每天从0001开始编号
- 记录编号全局唯一
2. 轨迹采集规则
- GPS每10秒采集一次位置
- 速度>5km/h时判定为作业状态
- 速度<5km/h且发动机运转判定为怠速
- 发动机停止判定为暂停
- 轨迹点精度<10米才记录
3. 作业状态识别规则
- 作业中: 速度>5km/h,在作业区域内
- 怠速: 速度<5km/h,发动机运转
- 暂停: 发动机停止
- 完成: 机手手动结束或离开作业区域
4. 异常预警规则
- 长时间停留: 同一位置停留>30分钟
- 偏离作业区: 距离作业区域>500米
- 油耗异常: 油耗超过历史平均值20%
- 速度异常: 速度>30km/h(非转场)
5. 数据同步规则
- 轨迹点每分钟批量上传一次
- 离线时保存在本地,恢复网络后自动同步
- 作业事件实时上传
- 本地数据保留7天后自动清理
6. 数据保存规则
- 作业记录保存3年
- 轨迹点保存1年(压缩存储)
- 作业事件永久保存
- 统计数据永久保存
技术实现要点
1. GPS轨迹采集
技术方案:
- 使用 HTML5 Geolocation API 或原生GPS
- 后台持续定位,降低功耗
- 轨迹点本地缓存,批量上传
class TrackRecorder {
private watchId: number;
private trackPoints: TrackPoint[] = [];
startRecording(recordId: string) {
this.watchId = navigator.geolocation.watchPosition(
(position) => {
const point: TrackPoint = {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
altitude: position.coords.altitude,
accuracy: position.coords.accuracy,
speed: position.coords.speed,
timestamp: new Date(position.timestamp)
};
// 精度过低的点不记录
if (point.accuracy > 10) return;
this.trackPoints.push(point);
// 每分钟上传一次
if (this.trackPoints.length >= 6) {
this.uploadTrackPoints(recordId);
}
},
(error) => {
console.error('GPS error:', error);
},
{
enableHighAccuracy: true,
timeout: 10000,
maximumAge: 0
}
);
}
stopRecording() {
navigator.geolocation.clearWatch(this.watchId);
}
async uploadTrackPoints(recordId: string) {
if (this.trackPoints.length === 0) return;
try {
await api.uploadTrackPoints(recordId, this.trackPoints);
this.trackPoints = [];
} catch (error) {
// 上传失败,保存到本地
await this.saveToLocal(recordId, this.trackPoints);
}
}
}2. 作业状态识别
算法说明:
- 根据速度、位置、发动机状态综合判断
- 使用滑动窗口平滑速度数据
- 避免频繁状态切换
class StatusDetector {
private speedWindow: number[] = [];
private windowSize = 5;
detectStatus(point: TrackPoint, fieldBoundary: Polygon): OperationStatus {
// 添加到滑动窗口
this.speedWindow.push(point.speed);
if (this.speedWindow.length > this.windowSize) {
this.speedWindow.shift();
}
// 计算平均速度
const avgSpeed = this.speedWindow.reduce((a, b) => a + b, 0) / this.speedWindow.length;
// 判断是否在作业区域内
const inField = this.isPointInPolygon(point, fieldBoundary);
// 状态判断
if (avgSpeed > 5 && inField) {
return 'working';
} else if (avgSpeed < 5 && point.engineRPM > 0) {
return 'idle';
} else {
return 'paused';
}
}
isPointInPolygon(point: Coordinate, polygon: Polygon): boolean {
// 射线法判断点是否在多边形内
let inside = false;
for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
const xi = polygon[i].longitude, yi = polygon[i].latitude;
const xj = polygon[j].longitude, yj = polygon[j].latitude;
const intersect = ((yi > point.latitude) !== (yj > point.latitude))
&& (point.longitude < (xj - xi) * (point.latitude - yi) / (yj - yi) + xi);
if (intersect) inside = !inside;
}
return inside;
}
}3. 轨迹压缩存储
技术方案:
- 使用 Douglas-Peucker 算法压缩轨迹
- 保留关键点,减少存储空间
- 压缩率可达70-80%
function compressTrack(points: TrackPoint[], tolerance: number = 0.0001): TrackPoint[] {
if (points.length < 3) return points;
// Douglas-Peucker 算法
let dmax = 0;
let index = 0;
const end = points.length - 1;
for (let i = 1; i < end; i++) {
const d = perpendicularDistance(points[i], points[0], points[end]);
if (d > dmax) {
index = i;
dmax = d;
}
}
if (dmax > tolerance) {
const left = compressTrack(points.slice(0, index + 1), tolerance);
const right = compressTrack(points.slice(index), tolerance);
return left.slice(0, -1).concat(right);
} else {
return [points[0], points[end]];
}
}
function perpendicularDistance(point: Coordinate, lineStart: Coordinate, lineEnd: Coordinate): number {
// 计算点到线段的垂直距离
const dx = lineEnd.longitude - lineStart.longitude;
const dy = lineEnd.latitude - lineStart.latitude;
const norm = Math.sqrt(dx * dx + dy * dy);
if (norm === 0) {
return Math.sqrt(
Math.pow(point.longitude - lineStart.longitude, 2) +
Math.pow(point.latitude - lineStart.latitude, 2)
);
}
const u = ((point.longitude - lineStart.longitude) * dx +
(point.latitude - lineStart.latitude) * dy) / (norm * norm);
if (u < 0 || u > 1) {
return Math.min(
Math.sqrt(Math.pow(point.longitude - lineStart.longitude, 2) +
Math.pow(point.latitude - lineStart.latitude, 2)),
Math.sqrt(Math.pow(point.longitude - lineEnd.longitude, 2) +
Math.pow(point.latitude - lineEnd.latitude, 2))
);
}
const x = lineStart.longitude + u * dx;
const y = lineStart.latitude + u * dy;
return Math.sqrt(Math.pow(point.longitude - x, 2) + Math.pow(point.latitude - y, 2));
}4. 实时位置监控
技术方案:
- 使用 WebSocket 推送实时位置
- 前端使用地图SDK显示机具位置
- 支持轨迹回放
// WebSocket 连接
class RealtimeMonitor {
private ws: WebSocket;
private markers: Map<string, Marker> = new Map();
connect() {
this.ws = new WebSocket('wss://api.example.com/ws/realtime');
this.ws.onmessage = (event) => {
const data = JSON.parse(event.data);
this.updateMachineLocation(data);
};
}
updateMachineLocation(data: any) {
const { machineId, location, status } = data;
let marker = this.markers.get(machineId);
if (!marker) {
marker = new Marker({
position: [location.latitude, location.longitude],
icon: this.getIconByStatus(status)
});
this.markers.set(machineId, marker);
marker.setMap(map);
} else {
marker.setPosition([location.latitude, location.longitude]);
marker.setIcon(this.getIconByStatus(status));
}
}
getIconByStatus(status: string): Icon {
const icons = {
working: '/icons/machine-working.png',
idle: '/icons/machine-idle.png',
paused: '/icons/machine-paused.png'
};
return new Icon({ url: icons[status] });
}
}客户类型需求差异
农机合作社(10-50台,本地作业)
核心诉求: 实时监控,防止偷懒,准确结算
功能侧重:
- 实时位置监控
- 作业轨迹记录
- 作业时长统计
- 油耗数据记录
- 异常事件记录
典型场景:
- 调度员打开监控大屏,查看所有机具位置
- 发现某台机具长时间停留,电话询问机手
- 作业完成后,查看作业轨迹和时长
- 根据作业数据进行结算
- 分析油耗数据,发现异常
不需要的功能:
- 复杂的数据分析
- 多维度报表
- 高级预测模型
农机服务站(跨区作业)
核心诉求: 跨区域监控,数据云端共享
功能侧重:
- 跨区域作业监控
- 作业数据云端存储
- 多设备数据共享
- 作业轨迹回放
- 作业数据导出
典型场景:
- 跨区作业,机具分散在多个省份
- 调度员在总部监控所有机具
- 作业数据实时上传到云端
- 各地管理员可以查看本地机具数据
- 导出作业数据进行分析
特殊需求:
- 支持多省份地图
- 作业数据按区域分类
- 跨区域数据对比分析
大型农场(自有机队)
核心诉求: 机队统一调度,效率成本分析
功能侧重:
- 机队监控大屏
- 效率分析报表
- 成本统计
- 计划执行对比
- 数据导出
典型场景:
- 农场有30台机具,统一调度
- 监控大屏显示所有机具位置和状态
- 分析作业效率,识别低效机具
- 统计油耗成本,优化成本管理
- 对比计划和实际,优化调度
特殊需求:
- 机队调度优化
- 作业效率深度分析
- 成本核算和预算管理
- 与ERP系统集成
农机租赁公司(租赁+作业)
核心诉求: 设备位置监控,数据防篡改
功能侧重:
- 实时位置监控
- 数据防篡改
- 电子围栏
- 数据导出
- 纠纷追溯
典型场景:
- 租赁设备给承租方
- 实时监控设备位置,防止丢失
- 设置电子围栏,超出范围预警
- 作业数据作为结算依据
- 发生纠纷时,调取作业记录作为证据
特殊需求:
- 设备防盗监控
- 电子围栏功能
- 作业数据区块链存证
- 纠纷仲裁证据导出
系统交互
上游系统
- 订单管理系统: 获取作业订单信息
- 机具管理系统: 获取机具信息,GPS设备
- 人员管理系统: 获取机手信息
下游系统
- 结算系统: 提供作业数据,作为结算依据
- 绩效系统: 提供作业数据,用于绩效考核
- 数据分析系统: 提供作业数据,支撑业务分析
集成方式
实施建议
第一阶段: 基础功能(1周)
目标: 实现基本的轨迹记录功能
任务:
- [ ] GPS轨迹采集功能
- [ ] 轨迹数据存储
- [ ] 实时位置显示
- [ ] 作业记录查询
交付物:
- 可用的轨迹记录功能
- 实时监控大屏
- 作业记录列表
第二阶段: 数据分析(1周)
目标: 实现作业数据统计分析
任务:
- [ ] 作业时长统计
- [ ] 油耗数据采集
- [ ] 异常事件记录
- [ ] 作业报表生成
交付物:
- 作业统计报表
- 油耗分析报表
- 异常事件列表
第三阶段: 优化完善(持续)
目标: 优化用户体验,完善功能
任务:
- [ ] 轨迹压缩优化
- [ ] 离线数据同步
- [ ] 异常预警优化
- [ ] 用户反馈收集
交付物:
- 优化后的系统
- 用户手册
- 培训材料
成功案例
案例1: 某农机合作社作业监控系统
实施前:
- 不知道机具位置和作业进度
- 作业时长靠机手自报,不准确
- 油耗数据缺失,成本核算不准
- 纠纷时缺乏客观证据
实施后:
- 实时掌握所有机具位置和状态
- 作业时长自动统计,准确可靠
- 油耗数据自动采集,成本清晰
- 作业轨迹完整记录,纠纷有据可查
关键数据:
- 作业记录覆盖率: 100%
- 数据准确率: 98%
- 纠纷减少: 80%
- 管理效率提升: 50%
案例2: 某大型农场机队管理系统
实施前:
- 30台机具,调度混乱
- 作业效率低,成本高
- 无法准确评估机手绩效
实施后:
- 机队统一调度,效率提升
- 作业数据完整,成本清晰
- 机手绩效有据可依
关键数据:
- 作业效率提升: 30%
- 油耗成本降低: 15%
- 机具利用率提升: 25%
- 年度节省成本: 50万元
案例3: 某农机租赁公司设备监控系统
实施前:
- 租赁设备位置不明,丢失风险高
- 作业数据不准,结算纠纷多
- 设备使用情况不清楚
实施后:
- 实时监控设备位置,丢失风险降低
- 作业数据准确,结算纠纷减少
- 设备使用情况清晰,优化租赁策略
关键数据:
- 设备丢失率: 从5%降到0.5%
- 结算纠纷: 减少70%
- 设备利用率: 提升40%
- 租赁收入: 增长30%
相关场景
- OPER-001 订单管理: 订单创建后开始作业记录
- OPER-002 面积测量: 作业轨迹用于面积计算
- OPER-003 质量检查: 作业记录关联质量检查
- BILL-001 费用计算: 作业数据作为计费依据
- MACH-001 设备档案: 作业数据用于设备管理
常见问题
Q1: GPS定位不准怎么办?
A:
- 确保设备GPS模块正常工作
- 在空旷地带GPS精度更高
- 系统会自动过滤精度>10米的点
- 可以使用差分GPS提高精度
Q2: 离线环境下如何记录轨迹?
A:
- 系统支持离线轨迹记录
- 轨迹数据保存在本地
- 恢复网络后自动上传
- 本地数据保留7天
Q3: 轨迹数据会占用很多存储空间吗?
A:
- 使用轨迹压缩算法,压缩率70-80%
- 轨迹点只保存1年
- 可以设置轨迹采集频率
- 云端存储,不占用本地空间
Q4: 如何防止机手作弊?
A:
- GPS轨迹自动采集,无法人工修改
- 轨迹点带时间戳,防止篡改
- 作业状态自动识别,无法伪造
- 异常行为自动预警
Q5: 作业数据如何用于结算?
A:
- 作业时长自动统计,准确可靠
- 作业面积根据轨迹计算
- 油耗数据自动采集
- 生成作业报告,作为结算依据
本场景文档版本: v2.0 | 最后更新: 2024-03-07