一、地理位置授权实现
1. 前端授权流程
- 触发授权:在用户首次进入配送页面或下单时,调用`wx.getLocation`前需先通过`wx.authorize`检查权限。
```javascript
// 检查权限
wx.getSetting({
success(res) {
if (!res.authSetting[scope.userLocation]) {
wx.authorize({
scope: scope.userLocation,
success() { console.log(授权成功); },
fail() {
// 引导用户手动授权
wx.showModal({
title: 需要位置权限,
content: 开启后可自动匹配附近门店,
success(modalRes) {
if (modalRes.confirm) {
wx.openSetting();
}
}
});
}
});
}
}
});
// 获取位置
wx.getLocation({
type: gcj02, // 微信地图坐标系
success(res) {
const { latitude, longitude } = res;
// 传递坐标至后端
requestBackend({ lat: latitude, lng: longitude });
}
});
```
2. 权限管理
- 在`app.json`中声明权限:
```json
{
"permission": {
"scope.userLocation": {
"desc": "您的位置将用于匹配附近门店及配送路线"
}
}
}
```
二、万象(高德/腾讯地图)源码部署
1. 选择地图服务
- 高德地图:适合国内精准配送,提供逆地理编码、路径规划API。
- 腾讯地图:与微信生态深度整合,调用更便捷。
2. 集成SDK
- 高德示例:
1. 注册高德开发者账号,创建Key。
2. 下载JS API并引入小程序:
```html
<script src="https://webapi.amap.com/maps?v=2.0&key=您的Key">
```
3. 使用逆地理编码获取地址:
```javascript
const AMap = require(../../libs/AMap-WX.js); // 本地引入高德SDK
const amap = new AMap.AMapWX({ key: 您的Key });
amap.getRegeo({
location: `${longitude},${latitude}`,
success(data) {
console.log(详细地址:, data[0].regeocodeData.address);
}
});
```
3. 路径规划
- 调用配送路线API:
```javascript
amap.getWalkingRoute({
origin: 起点坐标,
destination: 终点坐标,
success(data) {
console.log(配送路线:, data.paths[0].steps);
}
});
```
三、后端精准配送逻辑
1. 门店匹配
- 根据用户坐标计算与各门店的距离(Haversine公式):
```javascript
function calculateDistance(lat1, lng1, lat2, lng2) {
const radLat1 = lat1 * Math.PI / 180;
const radLat2 = lat2 * Math.PI / 180;
const a = radLat1 - radLat2;
const b = (lng1 * Math.PI / 180) - (lng2 * Math.PI / 180);
return 6371 * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
}
```
2. 配送时间预估
- 结合实时路况API(如高德交通态势)动态调整ETA。
3. 订单分配
- 规则引擎:按距离、骑手负载、门店库存自动分配订单。
四、完整流程示例
1. 用户下单:
- 授权获取坐标 → 逆地理编码显示地址 → 选择配送时间。
2. 系统处理:
- 匹配最近门店 → 规划路线 → 预估时间 → 分配骑手。
3. 用户端展示:
- 地图显示门店/骑手位置 → 实时更新配送进度。
五、注意事项
1. 隐私合规:
- 明确告知用户位置用途,遵循《个人信息保护法》。
2. 性能优化:
- 缓存常用地址,减少API调用。
3. 异常处理:
- 授权失败时提供手动输入地址选项。
4. 多端适配:
- 测试不同机型定位精度差异。
六、扩展功能
- LBS营销:基于位置推送附近优惠。
- 围栏预警:骑手偏离路线时触发提醒。
- 多模式配送:支持自提、即时达、预约达。
通过以上步骤,可实现生鲜小程序从位置授权到精准配送的全流程闭环。实际开发中需根据具体地图服务商文档调整API调用参数。