export default {
methods: {
checkDistance() {
// 获取当前位置信息
uni.getLocation({
type: ‘gcj02’,
success: (res) => {
const currentLatitude = res.latitude; // 当前位置纬度
const currentLongitude = res.longitude; // 当前位置经度
// TODO: 根据业务逻辑传入目标经纬度进行比较
const targetLatitude = ...; // 目标位置纬度
const targetLongitude = ...; // 目标位置经度
// 计算两点之间的直线距离(单位为米)
const distance = this.calculateDistance(currentLatitude, currentLongitude, targetLatitude, targetLongitude);
if (distance <= 1000) {
console.log('目标位置在当前位置一公里范围内');
} else {
console.log('目标位置不在当前位置一公里范围内');
}
},
fail: () => {
console.error('获取位置失败')
}
})
},
calculateDistance(lat1, lon1, lat2, lon2) {
const R = 6378137; // 赤道上每个经度对应的平面长度(单位:m)
const radianToDegree = Math.PI / 180;
const degreeToRadian = 180 / Math.PI;
const dLon = (lon2 - lon1) * radianToDegree;
const dLat = (lat2 - lat1) * radianToDegree;
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos((lat1 * radianToDegree)) * Math.cos((lat2 * radianToDegree)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
const distance = R * c * degreeToRadian;
return distance;
}
}
}
注意事项:
checkDistance()方法会调用uni.getLocation()函数获取当前位置信息,因此需要确保已开启相关权限;
targetLatitude和targetLongitude分别表示目标位置的纬度和经度,需要根据实际情况传入正确的值;
calculateDistance()方法用于计算两点之间的直线距离,其中R表示地球的半径(单位:米),默认值为6378137;
最后根据返回结果判断目标位置与当前位置的距离是否小于等于1000米(即一公里)。