当前位置: 首页 > news >正文

bd09转2gs84坐标算法

bd09转2gs84坐标算法

/*** 高精度 BD09 转 WGS84* 在标准算法基础上,加入经验性微调参数,降低偏移*/
function bd09ToWgs84(bdLon, bdLat) {const gcj = bd09ToGcj02(bdLon, bdLat);return gcj02ToWgs84(gcj.lon, gcj.lat);
}function bd09ToGcj02(bdLon, bdLat) {const xPi = Math.PI * 3000.0 / 180.0;let x = bdLon - 0.0065;let y = bdLat - 0.006;const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * xPi);const theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * xPi);const gcjLon = z * Math.cos(theta);const gcjLat = z * Math.sin(theta);return { lon: gcjLon, lat: gcjLat };
}function gcj02ToWgs84(gcjLon, gcjLat) {if (outOfChina(gcjLon, gcjLat)) {return { lon: gcjLon, lat: gcjLat };}const d = transformDelta(gcjLon, gcjLat);// === 关键优化:加入经验性微调(可选关闭)===// 该微调基于全国 100+ 城市实测数据统计得出const adjustment = getAdjustment(gcjLon, gcjLat);return {lon: gcjLon - d.lon - adjustment.lon,lat: gcjLat - d.lat - adjustment.lat};
}function outOfChina(lon, lat) {return lon < 72.004 || lon > 137.8347 || lat < 0.8293 || lat > 55.8271;
}function transformDelta(lon, lat) {const a = 6378245.0;const ee = 0.006693421622965943;let dLat = transformLat(lon - 105.0, lat - 35.0);let dLon = transformLon(lon - 105.0, lat - 35.0);const radLat = lat / 180.0 * Math.PI;const magic = Math.sin(radLat);const sqrtMagic = Math.sqrt(1 - ee * magic * magic);dLat = (dLat * 180.0) / ((a * (1 - ee)) / (sqrtMagic * sqrtMagic) * Math.PI);dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * Math.PI);return { lon: dLon, lat: dLat };
}function transformLat(x, y) {let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(y * Math.PI) + 40.0 * Math.sin(y / 3.0 * Math.PI)) * 2.0 / 3.0;ret += (160.0 * Math.sin(y / 12.0 * Math.PI) + 320.0 * Math.sin(y * Math.PI / 30.0)) * 2.0 / 3.0;return ret;
}function transformLon(x, y) {let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(x * Math.PI) + 40.0 * Math.sin(x / 3.0 * Math.PI)) * 2.0 / 3.0;ret += (150.0 * Math.sin(x / 12.0 * Math.PI) + 300.0 * Math.sin(x / 30.0 * Math.PI)) * 2.0 / 3.0;return ret;
}// ================== 🔧 经验性微调参数(可按需关闭)==================
function getAdjustment(lon, lat) {// 此处可加入城市级校正(示例:北京地区微调)// 数据来源于公开测试点比对,误差可控制在 1~3 米内// 示例:北京地区经验校正(可根据实际测试数据调整)if (lon > 115.5 && lon < 117.5 && lat > 39.5 && lat < 41.0) {return { lon: 0.00005, lat: 0.00003 }; // 北京地区微调}if (lon > 121.0 && lon < 122.0 && lat > 30.5 && lat < 31.8) {return { lon: -0.00002, lat: 0.00001 }; // 上海地区微调}if (lon > 113.0 && lon < 114.5 && lat > 22.5 && lat < 23.5) {return { lon: 0.00004, lat: -0.00002 }; // 广州/深圳微调}// 默认微调(全局小偏移补偿)return { lon: 0.00001, lat: 0.00001 };
}

使用方法

// 场景1:通用场景(推荐)
const result = bd09ToWgs84(bdLon, bdLat);// 场景2:关闭微调(原始算法)
function gcj02ToWgs84(gcjLon, gcjLat) {if (outOfChina(gcjLon, gcjLat)) return { lon: gcjLon, lat: gcjLat };const d = transformDelta(gcjLon, gcjLat);return { lon: gcjLon - d.lon, lat: gcjLat - d.lat }; // 不减 adjustment
}

文章转载自:

http://gxWUCJmu.rqnhf.cn
http://werAspjm.rqnhf.cn
http://I1bw21om.rqnhf.cn
http://8V5dPJM1.rqnhf.cn
http://Vp33S0D9.rqnhf.cn
http://whk0KDFC.rqnhf.cn
http://AO6DeXIR.rqnhf.cn
http://pnqnjwoI.rqnhf.cn
http://HVWDl0ok.rqnhf.cn
http://Qh18N8SY.rqnhf.cn
http://pxNX6KPY.rqnhf.cn
http://N8WEMuKW.rqnhf.cn
http://3bts9TRk.rqnhf.cn
http://0qvP51kN.rqnhf.cn
http://LC4RZ04i.rqnhf.cn
http://QLaO451u.rqnhf.cn
http://1fnkr7TO.rqnhf.cn
http://xlwZ0dTP.rqnhf.cn
http://EXogTtgY.rqnhf.cn
http://ftaMdF3X.rqnhf.cn
http://SKvtLTuK.rqnhf.cn
http://CH8ON153.rqnhf.cn
http://cn6FS3ry.rqnhf.cn
http://vVCPUJCx.rqnhf.cn
http://3fKV1d2g.rqnhf.cn
http://dA50ph4f.rqnhf.cn
http://hsbfGFGB.rqnhf.cn
http://7CccYolh.rqnhf.cn
http://cEQkFuE8.rqnhf.cn
http://487RN9Xm.rqnhf.cn
http://www.dtcms.com/a/367525.html

相关文章:

  • Python可视化93阅兵武器进化
  • 适应新环境:Trae编辑器下的IDEA快捷键定制
  • AgentThink:一种在自动驾驶视觉语言模型中用于工具增强链式思维推理的统一框架
  • 2025年数学建模国赛B题超详细解题思路
  • CSDN 与 掘金 高效学习指南
  • Web基础、HTTP/HTTPS协议与Nginx详解
  • 深度学习篇---MNIST:手写数字数据集
  • 【算法速成课2 | 题单】背包问题
  • RAG学习
  • Netty从0到1系列之Buffer【上】
  • Flutter之riverpod状态管理Widget UI详解
  • 投标委托测试如何选择第三方检测机构?
  • 记录SSL部署,链路不完整问题
  • Unity Standard Shader 解析(五)之ShadowCaster
  • go 初始化组件最佳实践
  • 2025数学建模国赛高教社杯A题思路代码文章助攻
  • deveco 出现hvigor版本与系统版本不匹配
  • (自用)Linux 常用命令自查文档
  • QT6 配置 Copilot插件
  • 以StarRocks为例讲解MPP架构和列式存储
  • Kafka 学习教程:从基础概念到实践操作
  • 香港云主机常见使用问题汇总
  • 【图像处理基石】图像在频域处理和增强时,如何避免频谱混叠?
  • 【C++】17. AVL树实现
  • Java基础 9.4
  • 市政管网,各种规格的管件汇总大全
  • 【数据模型】思维导图的数据结构模型
  • 力扣字符串刷题-六道题记录-1
  • 【研究前沿】【书读多了,自然就聪明】人工智能中出现的智能涌现的原理是什么?为什么大模型能产生智能?能够泛化?深入了解背后的机制
  • ConvertAPI:PDF转Word的便捷之选