/** * 高德地图微信小程序SDK - 纯定位版 * 只负责GPS定位,地址解析由后端处理 */ class AMapWX { constructor(options = {}) { this.key = options.key || ''; this.version = '1.5.0'; console.log(`高德地图定位SDK初始化成功 [v${this.version}]`); if (this.key) { console.log(`API Key: ${this.key.substring(0, 8)}...`); } } /** * 获取微信定位 - 主要功能 * @param {function} callback - 定位回调函数 callback(location, error) * @param {object} options - 定位选项 */ getWxLocation(callback, options = {}) { const defaultOptions = { type: 'gcj02', isHighAccuracy: true, highAccuracyExpireTime: 4000, ...options }; console.log('[AMapWX] 开始获取微信定位'); wx.getLocation({ ...defaultOptions, success: (res) => { console.log('[AMapWX] 微信定位成功:', res); const location = { longitude: res.longitude, latitude: res.latitude, accuracy: res.accuracy || 0, altitude: res.altitude || 0, speed: res.speed || 0, horizontalAccuracy: res.horizontalAccuracy || 0, verticalAccuracy: res.verticalAccuracy || 0 }; if (typeof callback === 'function') { callback(location, null); } }, fail: (err) => { console.error('[AMapWX] 微信定位失败:', err); if (typeof callback === 'function') { callback(null, err); } } }); } /** * 计算两点间距离 * @param {object} point1 - 起点 {longitude, latitude} * @param {object} point2 - 终点 {longitude, latitude} * @returns {number} 距离(米) */ calculateDistance(point1, point2) { const R = 6371000; // 地球半径(米) const lat1 = point1.latitude * Math.PI / 180; const lat2 = point2.latitude * Math.PI / 180; const deltaLat = (point2.latitude - point1.latitude) * Math.PI / 180; const deltaLng = (point2.longitude - point1.longitude) * Math.PI / 180; const a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLng / 2) * Math.sin(deltaLng / 2); const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); return R * c; } } // 创建单例实例 let amapInstance = null; const AmapWX = { /** * 获取SDK实例 * @param {object} options - 配置选项 * @returns {AMapWX} */ getInstance(options = {}) { if (!amapInstance) { amapInstance = new AMapWX(options); } return amapInstance; }, /** * 重置SDK实例 * @param {object} options - 配置选项 * @returns {AMapWX} */ resetInstance(options = {}) { amapInstance = new AMapWX(options); return amapInstance; } }; // 导出模块 module.exports = { AMapWX, AmapWX };