vue 腾讯地图经纬度转高德地图经纬度

ai写的记录一下

使用方法

javascript 复制代码
const gcj = await this.wgs84ToGcj02(info.latitude, info.longitude);
				// console.log(gcj.lng, gcj.lat,'gcj');

函数

javascript 复制代码
/**
			 * 判断是否在国内,不在国内则不做偏移
			 * @param {Number} lng 经度
			 * @param {Number} lat 纬度
			 * @returns {Boolean}
			 */
			isInChina(lng, lat) {
				return (
					lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55
				);
			},
			
			/**
			 * 计算偏移量
			 * @param {Number} lng 经度
			 * @param {Number} lat 纬度
			 * @returns {Object} 偏移后的经纬度
			 */
			calOffset(lng, lat) {
				const pi = Math.PI;
				const a = 6378245.0; // 长半轴
				const ee = 0.00669342162296594323; // 偏心率平方
				let dLat = this.transformLat(lng - 105.0, lat - 35.0);
				let dLng = this.transformLng(lng - 105.0, lat - 35.0);
				const radLat = lat / 180.0 * pi;
				let magic = Math.sin(radLat);
				magic = 1 - ee * magic * magic;
				const sqrtMagic = Math.sqrt(magic);
				dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
				dLng = (dLng * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
				return {
					lat: dLat,
					lng: dLng
				};
			},
			
			/**
			 * 纬度转换
			 * @param {Number} lng 经度
			 * @param {Number} lat 纬度
			 * @returns {Number} 转换后的纬度
			 */
			transformLat(lng, lat) {
				let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(
					lng));
				ret += (20.0 * Math.sin(6.0 * lng * Math.PI) + 20.0 * Math.sin(2.0 * lng * Math.PI)) * 2.0 / 3.0;
				ret += (20.0 * Math.sin(lat * Math.PI) + 40.0 * Math.sin(lat / 3.0 * Math.PI)) * 2.0 / 3.0;
				ret += (160.0 * Math.sin(lat / 12.0 * Math.PI) + 320 * Math.sin(lat * Math.PI / 30.0)) * 2.0 / 3.0;
				return ret;
			},
			
			/**
			 * 经度转换
			 * @param {Number} lng 经度
			 * @param {Number} lat 纬度
			 * @returns {Number} 转换后的经度
			 */
			transformLng(lng, lat) {
				let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
				ret += (20.0 * Math.sin(6.0 * lng * Math.PI) + 20.0 * Math.sin(2.0 * lng * Math.PI)) * 2.0 / 3.0;
				ret += (20.0 * Math.sin(lng * Math.PI) + 40.0 * Math.sin(lng / 3.0 * Math.PI)) * 2.0 / 3.0;
				ret += (150.0 * Math.sin(lng / 12.0 * Math.PI) + 300.0 * Math.sin(lng / 30.0 * Math.PI)) * 2.0 / 3.0;
				return ret;
			},
			
			/**
			 * WGS84 转 GCJ02(腾讯WGS84 → 高德GCJ02)
			 * @param {Number} wgsLat WGS84纬度
			 * @param {Number} wgsLng WGS84经度
			 * @returns {Object} GCJ02经纬度
			 */
			wgs84ToGcj02(wgsLat, wgsLng) {
				// 非中国区域不转换
				if (!this.isInChina(wgsLng, wgsLat)) {
					return {
						lat: wgsLat,
						lng: wgsLng
					};
				}
				const offset = this.calOffset(wgsLng, wgsLat);
				return {
					lat: wgsLat + offset.lat,
					lng: wgsLng + offset.lng
				};
			},
相关推荐
极客密码1 天前
感谢雷总!Mimo大模型价值¥659/月的 MAX 套餐,让我免费领到了!
前端·ai编程·claude
深念Y1 天前
我明白为什么B站没法在浏览器开直播了——Windows Chrome推流踩坑全记录
前端·chrome·webrtc·浏览器·srs·直播·flv
zhangxingchao1 天前
AI应用开发七:可以替代 RAG 的技术
前端·人工智能·后端
Sun@happy1 天前
现代 Web 前端渗透——基础篇(1)
前端·web安全
希冀1231 天前
【CSS学习第十一篇】
前端·css·学习
隔窗听雨眠1 天前
doctype、charset、meta如何控制整个渲染流水线
java·服务器·前端
kyriewen1 天前
写组件文档写到吐?我用AI自动生成Storybook,同事以后直接抄
前端·javascript·面试
excel1 天前
🧠 Prisma 表名大写 vs SQL 导出小写问题深度解析(附踩坑与解决方案)
前端·后端
周淳APP1 天前
【前端工程化原理通识:从源头到运行时的理论阐述】
前端·编译·打包·前端工程化
五点六六六1 天前
你敢信这是非Native页面写出来的渐变效果吗🌝(底层原理解析
前端·javascript·面试