miniprogramme/libs/amap-wx.js

114 lines
2.9 KiB
JavaScript
Raw Normal View History

2025-09-12 16:08:17 +08:00
/**
* 高德地图微信小程序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
};