1. 废话不多说 直接上代码
// 1. 获取 UTM带号、CRSCODE
getUTMCRSCode(latitude, longitude) {
// 计算UTM带号
let zoneNumber = Math.floor((longitude + 180) / 6) + 1;
// 确定半球
let hemisphere = latitude >= 0 ? '326' : '327';

// 生成UTM CRS代码
let utmCRSCode = `EPSG:${hemisphere}${String(zoneNumber).padStart(2, '0')}`;

return { zoneNumber, utmCRSCode };
}

/**
* 2. WGS84 TO UTM
* @param latitude 基准点坐标lat
* @param longitude 基准点坐标lng
* @param zoneNumber UTM带号
* @param utmCRSCode CRSCODE
*/
convertToUTM(latitude, longitude, zoneNumber, utmCRSCode) {
proj4.defs('EPSG:4326', `+proj=longlat +datum=WGS84 +no_defs`);
proj4.defs(utmCRSCode, `+proj=utm +zone=${zoneNumber} +datum=WGS84 +units=m +no_defs`);
// 获取UTM
const [utmX, utmY] = proj4('EPSG:4326', utmCRSCode, [longitude, latitude]);
return [utmX, utmY];
}

/**
* 3. UTM TO WGS84
* @param utmX UTM x方向偏移值
* @param utmY UTM y方向偏移值
* @param zoneNumber UTM带号
* @param utmCRSCode CRSCODE
*/
convertToWGS84(utmX, utmY, zoneNumber, utmCRSCode) {
proj4.defs(utmCRSCode, `+proj=utm +zone=${zoneNumber} +datum=WGS84 +units=m +no_defs`);
proj4.defs('EPSG:4326', '+proj=longlat +datum=WGS84 +no_defs');

const [longitude, latitude] = proj4(utmCRSCode, 'EPSG:4326', [utmX, utmY]);
return [latitude, longitude];
}