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

WGS84坐标转换代码(JS版)

1.地图项目中总会遇到经纬度转化情况,或者是要兼容多个地图情况,所以需要用到坐标转化,下面封装一个gcj02towgs84 方法.


//  PI:3.1415926535897932384626,
//  a:6378245.0,
//  ee:0.00669342162296594323,
let PI = 3.1415926535897932384626
let a = 6378245.0
let ee = 0.00669342162296594323
// 坐标系转化方法const lnglatResult: any = {finalLng: "",finalLat: "",
};function gcj02towgs84(lng, lat) {// 保存原始经纬度的正负标志const originalLngSign = Math.sign(lng);const originalLatSign = Math.sign(lat);// console.log(originalLngSign,originalLatSign,'正负标志');// 将经纬度转换为正数进行计算lat = Math.abs(lat);lng = Math.abs(lng);let dlat = transformlat(lng - 105.0, lat - 35.0)let dlng = transformlng(lng - 105.0, lat - 35.0)let radlat = lat / 180.0 * PIlet magic = Math.sin(radlat)magic = 1 - ee * magic * magiclet sqrtmagic = Math.sqrt(magic)dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)let mglat = lat + dlatlet mglng = lng + dlnglet lngs = lng * 2 - mglnglet lats = lat * 2 - mglat// 根据原始经纬度的符号恢复转换结果的正负lnglatResult.finalLng = originalLngSign * lngs;lnglatResult.finalLat = originalLatSign * lats;return lnglatResult;
}
// 是判断在国内还是国外
// function out_of_china(lon, lat) {
//   if (lon < 72.004 || lon > 137.8347) {
//     return true;
//   }
//   if (lat < 0.8293 || lat > 55.8271) {
//     return true;
//   }
//   return false;
// }
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 * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(y * PI) + 40.0 * Math.sin(y / 3.0 * PI)) * 2.0 / 3.0;ret += (160.0 * Math.sin(y / 12.0 * PI) + 320.0 * Math.sin(y * PI / 30.0)) * 2.0 / 3.0;return ret;
}
function transformlng(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 * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(x * PI) + 40.0 * Math.sin(x / 3.0 * PI)) * 2.0 / 3.0;ret += (150.0 * Math.sin(x / 12.0 * PI) + 300.0 * Math.sin(x / 30.0 * PI)) * 2.0 / 3.0;return ret;
}export {gcj02towgs84
};

2.可以直接复制使用,在自己项目中添加一个ts文件即可.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • KVM虚拟机添加USB转串口设备
  • Github获8k Star!入选苹果CoreML模型库的Depth Anything是怎么做出来的?
  • 【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(上)
  • 数据结构day6链式队列
  • 多位冒充者曝光!全域外卖官方到底是谁?
  • 谷粒商城实战-25-分布式组件-SpringCloud Alibaba-Nacos配置中心-加载多配置集
  • 华盈生物-PhenoCycler-超多靶标揭示组织空间位置和互作关系
  • centos磁盘空间满了-问题解决
  • 流程管理与商务智能解决方案(62页PPT)
  • 编程社团研究内容怎么写
  • 原生android的内存性能提升方面的测试和优化方案大致设计
  • main.cpp程序执行流程图
  • STM32空闲中断处理串口接受数据
  • springboot企业人力资源管理系统-计算机毕业设计源码29005
  • 【C++课程学习】:new和delete为什么要配套使用,new,delete和malloc,free的比较
  • Github访问慢解决办法
  • MySQL-事务管理(基础)
  • yii2权限控制rbac之rule详细讲解
  • 给github项目添加CI badge
  • 近期前端发展计划
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 微信小程序--------语音识别(前端自己也能玩)
  • 学习使用ExpressJS 4.0中的新Router
  • 一道面试题引发的“血案”
  • 追踪解析 FutureTask 源码
  • 阿里云服务器如何修改远程端口?
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​2020 年大前端技术趋势解读
  • ​Java并发新构件之Exchanger
  • ​数据结构之初始二叉树(3)
  • #if等命令的学习
  • #java学习笔记(面向对象)----(未完结)
  • #VERDI# 关于如何查看FSM状态机的方法
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (js)循环条件满足时终止循环
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)计算机毕业设计高校学生选课系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (一)UDP基本编程步骤
  • ... 是什么 ?... 有什么用处?
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net 获取某一天 在当月是 第几周 函数
  • .NET 中的轻量级线程安全
  • .net6 webapi log4net完整配置使用流程
  • :class的用法及应用
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @JsonFormat 和 @DateTimeFormat 的区别
  • @RestControllerAdvice异常统一处理类失效原因
  • [AIGC] Java 和 Kotlin 的区别