当使用微信小程序中的wx.getLocation
获取当前详细位置并计算距离时,你可以按照以下步骤进行操作。
1. 在onLoad
等页面生命周期回调函数中先判断用户是否授权获取地理位置权限,如果没有则引导用户进行授权。
// 检查用户是否已经授权获取地理位置权限 wx.getSetting({ success(res) { if (!res.authSetting['scope.userLocation']) { // 未授权,则引导用户授权 wx.authorize({ scope: 'scope.userLocation', success() { // 用户已授权 }, fail() { // 用户拒绝授权或当前环境不支持该 API // 可在此处进行错误处理或引导用户手动开启授权 } }) } } })
2. 在需要获取位置信息的地方调用wx.getLocation
方法,获取当前详细位置的经纬度。
wx.getLocation({ type: 'gcj02', // 返回国测局坐标系,可根据需求选择使用 wgs84 等其他坐标系 success(res) { const latitude = res.latitude; // 纬度 const longitude = res.longitude; // 经度 // 这里可以根据获取的经纬度进行距离计算等操作 // 例如调用后台接口获取目标位置的经纬度,再使用合适的距离计算算法计算距离等 }, fail() { // 获取位置信息失败 // 可在此处进行错误处理 } })
3. 在获取自己位置之后,可以根据获取的经纬度调用后台接口获取目标位置的经纬度,再使用距离计算算法计算距离。
// 示例:使用 Haversine Formula 计算距离 function getDistance(lat1, lon1, lat2, lon2) { const R = 6371; // 地球半径,单位:千米 const dLat = (lat2 - lat1) * Math.PI / 180; const dLon = (lon2 - lon1) * Math.PI / 180; const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2); const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); const d = R * c; return d; } // 在获取到自己的经纬度后,再调用后台接口获取目标位置的经纬度 const myLat = 40.7128; // 示例:自己的纬度 const myLon = -74.0060; // 示例:自己的经度 const targetLat = 34.0522; // 示例:目标位置的纬度 const targetLon = -118.2437; // 示例:目标位置的经度 const distance = getDistance(myLat, myLon, targetLat, targetLon); console.log('距离为:', distance);