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
				};
			},
相关推荐
WooaiJava3 分钟前
AI 智能助手项目面试技术要点总结(前端部分)
javascript·大模型·html5
LYFlied6 分钟前
从 Vue 到 React,再到 React Native:资深前端开发者的平滑过渡指南
vue.js·react native·react.js
爱喝白开水a22 分钟前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag
Never_Satisfied22 分钟前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
董世昌4123 分钟前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
B站_计算机毕业设计之家36 分钟前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
WeiXiao_Hyy1 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
吃杠碰小鸡1 小时前
高中数学-数列-导数证明
前端·数学·算法
kingwebo'sZone2 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word
xjt_09012 小时前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js