一、地理位置授权实现
1. 前端授权流程
- 首次授权:在小程序启动页或下单页调用`wx.getLocation`,设置`type: wgs84`获取经纬度,`success`回调中存储坐标至全局变量。
```javascript
wx.getLocation({
type: wgs84,
success(res) {
const { latitude, longitude } = res;
app.globalData.userLocation = { lat: latitude, lng: longitude };
},
fail(err) {
// 引导用户手动选择地址或重新授权
wx.showModal({
title: 位置权限提示,
content: 需要获取您的位置以提供精准配送服务,
success(modalRes) {
if (modalRes.confirm) wx.openSetting();
}
});
}
});
```
- 权限管理:通过`wx.openSetting`跳转至设置页,监听用户是否开启位置权限。
2. 地址解析与缓存
- 使用微信`wx.chooseLocation`或第三方地图API(如高德/腾讯地图)将坐标转换为详细地址,缓存至本地存储(`wx.setStorageSync`)减少重复授权。
二、万象源码部署与精准配送
1. 后端服务搭建
- 源码部署:基于万象物流SDK或开源路由算法(如OSRM、Google OR-Tools)部署配送路径规划服务。
- API设计:
- `/api/calculateRoute`:接收起点(门店坐标)、终点(用户坐标)、配送时间窗,返回最优路径及预估时间。
- `/api/nearbyStores`:根据用户坐标查询3公里内门店及库存。
2. 配送逻辑实现
- 动态路由:结合实时交通数据(如高德交通API)调整路径,优先选择非拥堵路段。
- 时间窗优化:支持多订单合并配送,使用遗传算法或VRP(车辆路径问题)模型最小化配送成本。
- 示例代码(Node.js后端):
```javascript
const axios = require(axios);
async function calculateRoute(start, end) {
const response = await axios.get(https://restapi.amap.com/v5/direction/driving, {
params: {
key: YOUR_AMAP_KEY,
origin: `${start.lng},${start.lat}`,
destination: `${end.lng},${end.lat}`
}
});
return response.data.route.paths[0]; // 返回路径详情
}
```
三、用户端交互优化
1. 地图可视化
- 集成腾讯地图JS SDK,在小程序内展示门店位置、配送路径及骑手实时位置(需骑手端配合上报坐标)。
2. 预估时间动态更新
- 用户下单后,前端定时(如每30秒)调用后端API刷新配送时间,处理突发路况。
3. 异常处理
- 超区提示:若用户地址超出配送范围,显示附近自提点或调整配送时间选项。
- 骑手接单通知:通过微信模板消息推送骑手接单、出发、到达等节点。
四、安全与合规
1. 数据加密
- 用户坐标、地址等敏感信息传输时使用HTTPS,后端存储时脱敏处理。
2. 隐私政策
- 在小程序设置页提供《隐私政策》入口,明确说明位置信息仅用于配送服务。
五、测试与上线
1. 沙箱环境测试
- 使用微信开发者工具模拟不同地理位置,验证授权流程和路径规划准确性。
2. 灰度发布
- 先对部分用户开放精准配送功能,监控API调用成功率、路径计算耗时等指标。
六、成本与扩展性
- 成本控制:使用免费 tier 的地图API(如腾讯地图每日50万次免费调用),超量后按需付费。
- 扩展功能:后续可增加拼单配送、预约时段、碳足迹计算等增值服务。
通过以上方案,生鲜小程序可实现从地理位置授权到精准配送的全流程闭环,提升用户体验和运营效率。实际开发中需根据业务规模选择合适的地图服务商和路由算法库。