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
				};
			},
相关推荐
东方小月3 小时前
从零开发一个 Coding Agent(四):使用状态机校验大模型事件流
前端·人工智能·后端
想做后端的前端3 小时前
WebGL实现FPS游戏
vue.js·游戏·webgl
Csvn3 小时前
🧩 ESM vs CJS 混用的 7 个「天坑」——从 TypeScript 编译到 Node 与浏览器
前端
Csvn3 小时前
🎯 Web 性能 API 集合:Performance Observer 的 5 个冷门妙用
前端
Csvn4 小时前
深入 React 闭包陷阱:从根源上理解并根治 stale closure
前端
whyfail4 小时前
前端学 Spring Boot(8):接口为什么越用越慢?
前端·spring boot·后端
用户059540174465 小时前
LangChain 记忆测试踩坑实录:这两个坑让我排查了 4 小时
前端·css
程序员黑豆5 小时前
鸿蒙应用开发:@Monitor 装饰器使用教程
前端·harmonyos
用户938515635075 小时前
从零构建《天龙八部》知识库:EPUB 加载→文本分割→向量嵌入→Milvus 存储→RAG 问答,一条链路打通
javascript·人工智能·全栈
SamChan905 小时前
在Web应用中集成PDF多语言翻译功能:PDFTranslator API实战指南
前端·python·ai·pdf·yapi·机器翻译