# 临时方案:使用微信小程序位置选择 ## 背景 由于腾讯地图API Key未开启WebService权限,暂时无法使用逆地理编码自动获取地址。 ## 临时解决方案 使用微信小程序的 `wx.chooseLocation` API,让用户手动选择位置。 ## 优缺点对比 ### 当前方案(逆地理编码) - ✅ 自动获取,无需用户操作 - ✅ 精确到街道门牌号 - ❌ 需要配置API Key - ❌ 有调用次数限制 ### 临时方案(手动选择) - ✅ 无需配置API Key - ✅ 用户可以精确选择位置 - ✅ 微信小程序原生支持 - ❌ 需要用户手动操作 - ❌ 体验稍差 ## 实施方案 ### 方案A:完全替换为手动选择 修改 `getLocation()` 方法: ```javascript getLocation() { // 使用微信小程序的位置选择 uni.chooseLocation({ success: (res) => { console.log('选择的位置:', res) this.latitude = res.latitude this.longitude = res.longitude this.address = res.address + (res.name ? ' ' + res.name : '') uni.showToast({ title: '位置已选择', icon: 'success' }) }, fail: (err) => { console.error('选择位置失败:', err) uni.showToast({ title: '请选择位置', icon: 'none' }) } }) } ``` ### 方案B:混合方案(推荐) 先自动获取GPS坐标,如果逆地理编码失败,提示用户手动选择: ```javascript async getLocation() { uni.showLoading({ title: '获取位置中...', mask: false }) try { // 1. 先获取GPS坐标 const locationRes = await new Promise((resolve, reject) => { uni.getLocation({ type: 'gcj02', success: resolve, fail: reject }) }) this.latitude = locationRes.latitude this.longitude = locationRes.longitude // 2. 尝试逆地理编码 try { await this.getAddress(locationRes.latitude, locationRes.longitude) uni.hideLoading() uni.showToast({ title: '位置已获取', icon: 'success', duration: 1000 }) } catch (e) { // 3. 逆地理编码失败,提示用户手动选择 uni.hideLoading() const confirmRes = await new Promise((resolve) => { uni.showModal({ title: '提示', content: '自动获取地址失败,是否手动选择位置?', success: (res) => resolve(res.confirm) }) }) if (confirmRes) { // 用户同意手动选择 const chooseRes = await new Promise((resolve, reject) => { uni.chooseLocation({ latitude: this.latitude, longitude: this.longitude, success: resolve, fail: reject }) }) this.latitude = chooseRes.latitude this.longitude = chooseRes.longitude this.address = chooseRes.address + (chooseRes.name ? ' ' + chooseRes.name : '') uni.showToast({ title: '位置已选择', icon: 'success' }) } else { // 用户拒绝,使用坐标显示 this.address = `位置: ${this.latitude.toFixed(6)}, ${this.longitude.toFixed(6)}` } } } catch (err) { uni.hideLoading() console.error('获取位置失败', err) this.address = '位置获取失败,请检查权限' uni.showToast({ title: '获取位置失败', icon: 'none' }) } } ``` ### 方案C:添加"手动选择位置"按钮 在页面上添加一个按钮,让用户可以主动选择位置: ```vue ``` ## 推荐实施顺序 1. **立即实施:** 方案C - 添加"手动选择位置"按钮 - 不影响现有功能 - 给用户提供备选方案 - 开发成本低 2. **短期:** 配置腾讯地图API Key - 按照《腾讯地图API配置指南》操作 - 开启WebService权限 - 恢复自动获取地址功能 3. **长期:** 方案B - 混合方案 - 自动获取 + 手动选择 - 最佳用户体验 - 容错性强 ## 注意事项 1. **权限配置** - 需要在 `manifest.json` 中配置位置权限 - 需要在微信小程序后台配置"位置接口"权限 2. **用户体验** - 手动选择位置需要用户操作,可能影响体验 - 建议在UI上明确提示用户 3. **数据准确性** - 手动选择的位置可能不是用户当前位置 - 建议在签到时记录选择方式(自动/手动) ## 相关文档 - 微信小程序位置API:https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.chooseLocation.html - uni-app位置API:https://uniapp.dcloud.net.cn/api/location/location.html --- **创建时间:** 2026-01-26 **适用场景:** 腾讯地图API暂时无法使用时的临时方案