可否使用现有Dart函数结合Firebase计算路线距离、耗时与路径
解答
首先明确结论:你当前编写的_getLocation()函数无法实现路线距离计算、行驶耗时估算、行驶路线生成的需求。
这个函数仅实现了最基础的两个能力:调用设备定位接口获取当前司机的经纬度坐标、将坐标写入Firebase Firestore存储,没有任何路径规划、道路匹配相关的计算逻辑。
可行实现方案
你可以按照以下流程实现需求:
- 基础数据层:你现有的定位上传逻辑可以正常复用,只需要调整触发频率,让司机端每隔5-10秒上传一次最新位置即可;用户端需要同时获取自身定位,并且通过Firestore的实时监听能力,同步拿到对应司机的最新位置坐标。
- 核心计算层:注意两点间的直线距离完全不等于实际行驶距离,Firebase本身只提供数据存储能力,不支持道路级别的路径计算。你需要接入具备路径规划能力的地图服务,传入用户坐标、司机坐标两个参数,即可直接拿到三个核心结果:实际道路最短行驶距离、预估最短行驶时间、构成完整行驶路线的坐标点串。
- 展示更新层:拿到路线坐标串后你可以直接在用户端的地图组件上渲染路线;不需要每次司机位置变动都重新计算路线,可以设置阈值——当司机位置和上次计算时的位置偏差超过50米时,再重新调用路径计算接口更新数据,平衡实时性和资源消耗。
现有代码说明
你贴出的代码仅完成了司机位置上报的环节,核心逻辑如下:
_getLocation() async { try { final loc.LocationData _locationResult = await location.getLocation(); await FirebaseFirestore.instance.collection('location').doc('${widget.title}').set({ 'latitude': _locationResult.latitude, 'longitude': _locationResult.longitude, 'name': '${widget.title}' }, SetOptions(merge: true)); } catch (e) { print(e); } }
优化提示:如果需要计算多个司机到用户的距离排序,你可以先通过经纬度计算直线距离做初筛,再对距离最近的几个司机调用路径规划接口算实际行驶数据,能大幅减少计算量。
内容的提问来源于stack exchange,提问作者Zaryab Khalid
相关产品推荐
相关产品推荐

