// map-service.js - 腾讯地图 JS API(无 CORS) class MapService { constructor() { this._key = window.TENCENT_MAP_KEY || window.ENV?.TENCENT_MAP_KEY || window.ENV?.AMAP_KEY; if (!this._key) { console.warn('⚠️ MapService: 未找到 Key'); } this._ready = false; this._init(); } _init() { if (typeof TMap !== 'undefined' && TMap.service) { this._ready = true; console.log('✅ 腾讯地图服务已初始化'); return; } window.addEventListener('tencentMapLoaded', () => { if (typeof TMap !== 'undefined' && TMap.service) { this._ready = true; console.log('✅ 腾讯地图服务已初始化 (事件)'); } }); setTimeout(() => { if (!this._ready && typeof TMap !== 'undefined' && TMap.service) { this._ready = true; console.log('✅ 腾讯地图服务已初始化 (延迟检测)'); } }, 2000); } reverseGeocode(lng, lat) { return new Promise((resolve, reject) => { if (!this._ready || typeof TMap === 'undefined' || !TMap.service) { reject(new Error('腾讯地图服务未初始化')); return; } // 注意:腾讯地图经纬度顺序是 lat, lng const latLng = new TMap.LatLng(lat, lng); const geocoder = new TMap.service.Geocoder(); geocoder.reverseGeocoder({ location: latLng }) .then((result) => { if (result.status === 0) { const addr = result.result; resolve({ address: addr.address, province: addr.address_component.province, city: addr.address_component.city, district: addr.address_component.district, adcode: addr.address_component.adcode, _raw: addr }); } else { reject(new Error(`逆地理失败: ${result.message}`)); } }) .catch((error) => { reject(new Error(`请求失败: ${error.message || error}`)); }); }); } } window.MapService = MapService; if (document.readyState === 'complete' || document.readyState === 'interactive') { if (!window.mapService) { window.mapService = new MapService(); } }