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
				};
			},
相关推荐
Justin3go9 小时前
HUNT0 上线了——尽早发布,尽早发现
前端·后端·程序员
怕浪猫10 小时前
第一章 JSX 增强特性与函数组件入门
前端·javascript·react.js
铅笔侠_小龙虾10 小时前
Emmet 常用用法指南
前端·vue
钦拆大仁10 小时前
跨站脚本攻击XSS
前端·xss
前端小L11 小时前
贪心算法专题(十):维度权衡的艺术——「根据身高重建队列」
javascript·算法·贪心算法
VX:Fegn089512 小时前
计算机毕业设计|基于springboot + vue校园社团管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·课程设计
Fortunate Chen12 小时前
类与对象(下)
java·javascript·jvm
ChangYan.12 小时前
直接下载源码但是执行npm run compile后报错
前端·npm·node.js