// 高德地图工具类 const AMAP_KEY = '4c513a688938fd89b88b296e867f66ec' class AmapUtil { constructor() { this.key = AMAP_KEY } // 逆地理编码 - 根据经纬度获取地址信息 async regeocode(longitude, latitude) { try { const res = await uni.request({ url: 'https://restapi.amap.com/v3/geocode/regeo', method: 'GET', data: { key: this.key, location: `${longitude},${latitude}`, poitype: '', radius: 1000, extensions: 'base', batch: false, roadlevel: 0 } }) if (res.statusCode === 200 && res.data.status === '1') { return { success: true, data: res.data.regeocode } } else { return { success: false, message: res.data.info || '逆地理编码失败' } } } catch (error) { console.error('逆地理编码异常:', error) return { success: false, message: '网络异常' } } } // 地理编码 - 根据地址获取经纬度 async geocode(address, city = '') { try { const res = await uni.request({ url: 'https://restapi.amap.com/v3/geocode/geo', method: 'GET', data: { key: this.key, address: address, city: city } }) if (res.statusCode === 200 && res.data.status === '1' && res.data.geocodes.length > 0) { return { success: true, data: res.data.geocodes[0] } } else { return { success: false, message: res.data.info || '地理编码失败' } } } catch (error) { console.error('地理编码异常:', error) return { success: false, message: '网络异常' } } } // 搜索POI async searchPOI(keywords, location = '', radius = 3000, city = '') { try { const res = await uni.request({ url: 'https://restapi.amap.com/v3/place/text', method: 'GET', data: { key: this.key, keywords: keywords, location: location, radius: radius, city: city, citylimit: true } }) if (res.statusCode === 200 && res.data.status === '1') { return { success: true, data: res.data.pois || [] } } else { return { success: false, message: res.data.info || '搜索失败' } } } catch (error) { console.error('POI搜索异常:', error) return { success: false, message: '网络异常' } } } // 路径规划 async getRoute(origin, destination, strategy = 0) { try { const res = await uni.request({ url: 'https://restapi.amap.com/v3/direction/driving', method: 'GET', data: { key: this.key, origin: origin, destination: destination, strategy: strategy, extensions: 'base' } }) if (res.statusCode === 200 && res.data.status === '1') { return { success: true, data: res.data.route } } else { return { success: false, message: res.data.info || '路径规划失败' } } } catch (error) { console.error('路径规划异常:', error) return { success: false, message: '网络异常' } } } // 计算两点间距离 calculateDistance(lat1, lng1, lat2, lng2) { const radLat1 = lat1 * Math.PI / 180.0 const radLat2 = lat2 * Math.PI / 180.0 const a = radLat1 - radLat2 const b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0 let s = 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))) s = s * 6378.137 s = Math.round(s * 10000) / 10000 return s } } export default new AmapUtil()