vue 地图坐标相互转换(GCJ-02,BD-09,WGS84)百度,火星,高德等坐标相互转换(最全代码,开箱即用)

2023-10-27

封装好的 js 代码


//GCJ-02:中国坐标偏移标准,Google Map、高德、腾讯使用
//BD-09:百度坐标偏移标准,Baidu Map使用 (百度坐标)
//WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块)

/**
 * @description 高德转百度
 * @description  GCJ-02 转 BD-09
 * @param{*}list [lng,lat]
 */
function qqMapTransBdMap(list) {
    let result=[]
    for (const res of list) {
        let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
        let x = res.lng;
        let y = res.lat;
        let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
        let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
        let lngs = z * Math.cos(theta) + 0.0065;
        let lats = z * Math.sin(theta) + 0.006;
        result.push({
            lng: lngs,
            lat: lats
        })
    }
    return result;
}

/**
 * @description 百度转高德
 * @description BD-09 转 GCJ-02
 * @param{*}list [lng,lat]
 */
function bdMapTransQqMap(list) {
    let bitem = []
    for (const g of list) {
        let x_pi = (3.14159265358979324 * 3000.0) / 180.0
        let x = g.lng - 0.0065
        let y = g.lat - 0.006
        let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi)
        let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi)
        let g2_lnn = z * Math.cos(theta)
        let g2_lat = z * Math.sin(theta)
        bitem.push({lng: g2_lnn, lat: g2_lat})
    }
    return bitem
}
/**
 * @description 高德转火星
 * @description GCJ-02 转 BD-09
 * @param{*}list [lng,lat]
 */
function gdMapTransHxMap(list) {
    let gitem = []
    for (const b of list) {
        let x_pi = (3.14159265358979324 * 3000.0) / 180.0
        let z =
            Math.sqrt(b.lng * b.lng + b.lat * b.lat) +
            0.00002 * Math.sin(b.lat * x_pi)
        let theta = Math.atan2(b.lat, b.lng) + 0.000003 * Math.cos(b.lng * x_pi)
        let bd_lng = z * Math.cos(theta) + 0.0065
        let bd_lat = z * Math.sin(theta) + 0.006
        gitem.push({lng: bd_lng, lat: bd_lat})
    }
    return gitem
}

/**
 * @description GPS转高德
 * @description WGS84转GCj02
 * @param lng GPS纬度
 * @param lat GPS经度
 * @returns {*[]}
 */
function qqMapTransGpsMap(lng, lat) {
    var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
    var PI = 3.1415926535897932384626;
    var a = 6378245.0;
    var ee = 0.00669342162296594323;

    if (this.out_of_china(lng, lat)) {
        return [lng, lat]
    } else {
        var dlat =this.transformlat(lng - 105.0, lat - 35.0);
        var dlng = this.transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        var mglat = lat + dlat;
        var mglng = lng + dlng;
        return [mglng, mglat]
    }
}
/**
 * @description 高德转GPS
 * @description GCj02转WGS84
 * @param lng 高德经度
 * @param lat 高德经度
 * @returns {*[]}
 */
function QqMapTransGpsMap(lng, lat) {
    var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
    var PI = 3.1415926535897932384626;
    var a = 6378245.0;
    var ee = 0.00669342162296594323;

    if (this.out_of_china(lng, lat)) {
        return [lng, lat]
    } else {
        var dlat =this.transformlat(lng - 105.0, lat - 35.0);
        var dlng = this.transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var 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 + dlat;
        let mglng = lng + dlng;
        return [lng * 2 - mglng, lat * 2 - mglat]
    }
}
function transformlng(lng, lat) {
    var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
    var PI = 3.1415926535897932384626;
    var a = 6378245.0;
    var ee = 0.00669342162296594323;
    var 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 * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
    ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
    return ret
}
function transformlat(lng, lat) {
    var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
    var PI = 3.1415926535897932384626;
    var a = 6378245.0;
    var ee = 0.00669342162296594323;
    var 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 * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
    ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
    return ret
}

/**
 * @description {{国外地址转换}}
 * @param lng
 * @param lat
 * @returns {boolean}
 */
function out_of_china(lng, lat) {
    return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
}

export {qqMapTransBdMap, bdMapTransQqMap, gdMapTransHxMap,qqMapTransGpsMap,QqMapTransGpsMap}

  如果你想使用地图坐标转换工具(tmxkj.top)综合站点,点击在线工具即可转换不同坐标系,还可以反向坐标转换

跳转地址:

天梦星科技综合网(tmxkj.top)https://tmxkj.top/#/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue 地图坐标相互转换(GCJ-02,BD-09,WGS84)百度,火星,高德等坐标相互转换(最全代码,开箱即用) 的相关文章

  • 使用javascript滚动滚动条或鼠标滚轮后触发事件

    我想知道是否可以触发事件after使用滚动条或鼠标滚轮 或在触摸设备上滑动 时滚动页面 基本上 我想检测用户何时停止滚动 以便我可以进行 AJAX 加载 而不是在滚动时加载 看起来jQuery s scroll 每次用户滚动时都会触发 并且
  • 玉石压痕错误

    因此 对于我的 Express 网站 我使用 jade 所以我决定尝试修改我的布局文件 以便我可以开始设计我的网站 我修改了原始布局代码 有效 但我开始在任何扩展布局的文件中出现缩进错误 如下所示 500 Error home kevin
  • 鼠标移动时画布拖动

    我正在尝试构建一个可以使用鼠标移动拖动的画布 我做了一些我无法理解的错误 因为一开始似乎有效 然后出现了一个增量错误 使画布移动得太快 考虑以下代码 window onload function var canvas document ge
  • 用更好的模式替换开关(Javascript)

    我必须升级我的应用程序以根据用户类型和角色属性显示页面 目前 我使用一个简单的 switch 语句来根据用户类型来执行此操作 例如 switch type case a return CONSTANT ONE case b return C
  • 如何在 Windows 网络中的 Intranet Web 应用程序中获取用户的用户名

    我内部有一个简单的 HTML 页面 它只显示一个表单并要求用户填写 我想自动捕获Windows域用户名和机器名 并将其与表单中收集的数据一起提交 我可以在客户端这样做吗 HTML JavaScript 或者我被迫在服务器端执行此操作 我还不
  • 为什么Promise中的代码会同步执行? [复制]

    这个问题在这里已经有答案了 在我的项目中 我有一个很长时间运行的操作 所以我决定将其放入Promise因为我认为这样我就可以在里面的代码继续执行其他操作Promise正在跑步 调试的时候发现外面的代码Promise仅当里面的代码执行Prom
  • 为某个时刻添加持续时间 (moment.js)

    时刻版本 2 0 0 阅读文档后 http momentjs com docs manipulating add 我认为这很简单 Chrome 控制台 var timestring1 2013 05 09T00 00 00Z var tim
  • 公开闭包内的方法

    当我们在闭包内创建一个方法时 该方法将成为该闭包的私有方法 并且在我们以某种方式公开它之前无法访问它 怎么可能暴露呢 您可以返回对它的引用 var a function var b function I m private alert go
  • 如何将React JS状态保存到本地存储中

    我不知道如何将 React js 状态存储到本地存储中 import React Component from react import App css import auth createUserProfileDocument from
  • 文件缓存:查询字符串与上次修改时间?

    我正在研究缓存网站资源的方法 并注意到大多数与我类似的网站都使用查询字符串来覆盖缓存 例如 css style css v 124942823 后来 我注意到每当我保存 style css 文件时 最后修改的标头都会 更新 使得查询字符串变
  • JS:修改 JS 对象中的值/对

    我正在尝试找出修改对象的最佳方法 而无需三次写出类似的对象 所以我有这三个对象 var object1 start start end end type 1 var object2 start start end end type 2 va
  • chrome 选项卡/窗口中的 window.open 行为

    我有一小段 javascript 旨在打开两个或更多选项卡 这在 FF 和 IE 中工作正常 但 chrome 会在新窗口而不是选项卡中打开第二个窗口 它不依赖于 url 因为我已经尝试过使用两个相同的 url 第一个在选项卡中打开 第二个
  • 如何禁用网页中的萤火虫?

    如何使用 Javascript 禁用 firebug 我想这样做是为了向访问者隐藏我的网页的运作方式 有什么选择可以做到这一点吗 你不能 你能做的最好的事情就是混淆你的 JavaScript 实际上刮掉了 您能做的最好的事情就是将所有安全关
  • 如何捕获文本区域上的 Enter 按键而不是 Shift+Enter? [复制]

    这个问题在这里已经有答案了 I m doing it for texarea A function should be called when the user press Enter but nothing should be done
  • jQuery:向左滑动和向右滑动

    我见过slideUp and slideDown在 jQuery 中 左右滑动的功能 方式怎么样 您可以使用 jQuery UI 中的附加效果来做到这一点 详情请参阅此处 http docs jquery com UI Effects Sl
  • 有序 JSON 对象

    我有一个 servlet 它与数据库通信 然后返回有序 按时间排序 对象的列表 在servlet部分 我有 access DB returns a list of User objects ordered ArrayList users M
  • YouTube 点击时禁用 HTML5

    有没有办法让我们通过javascript禁用HTML5视频的 播放 暂停 点击全屏 功能 然后在我们再次需要时将其放回去 我不知道你是否可以禁用它们 但你可以使用 css 删除它们 video webkit media controls f
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解

随机推荐

  • Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示 1 普通可视化界面编程代码入门 import sys from PyQt5 QtWidgets import QWidget QApplication 导入两个类来进行程序界面编程 if n
  • leetcode 5 最长回文子串

    题目 给你一个字符串 s 找到 s 中最长的回文子串 如果字符串的反序与原始字符串相同 则该字符串称为回文字符串 示例 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 解析 这道题和之前的那道回文的很像 647回文子
  • Vue2.0教程

    一 Vue入门 1 概述 在众多的语言排名中 JavaScript 已经非常靠前 它是前端的核心编程语言 我们可以利用 js 开发 动态 效果的网页 也可以开发 app 为了简化 JavaScript 的使用 在其基础上 发展出两个门派 真
  • C++ 用两个栈实现一个队列

    首先我们要看看栈和队列的特点 栈的特点 先进后出 队列的特点 先进先出 队列的出队顺序与栈的出栈是相反的 我们把数据压入第一个栈 如果再把这个栈里面的元素依次压入第二个栈 此时栈2里面的元素的顺序 相当于对一组数据进行了两次倒序 此时对第二
  • python 的继承重写和 super函数

    1 super函数实现父类方法的继承和重写 class Car1 def init self color weight self color color self wheel 4 self weight weight self speed
  • 防止连接Mysql超时,JDBC探活配置

    我们知道Mysql有两个关于连接超时的参数 默认为8小时 MySQL gt show global variables like timeout wait timeout 28800 非交互连接等待时间 interactive timeou
  • php 检测用户名已存在错误,验证用户名时出现PHP错误

    我正在使用PHP构建一个网站 我需要验证用户输入的名称是否正确 由于JavaScript是客户端的 我不能完全依赖它 所以这是我的服务器端函数来验证用户名 function validate name name name trim name
  • Intellij IDEA安装YAML插件

    1 下载插件 http pan baidu com s 1nvgECTN 2 安装插件 Intellij IDEA File gt Settings gt Plugins gt Install plugin from disk gt 选择插
  • Mac下安装Metaspoit

    Mac下安装Metaspoit 在mac下安装的方式 1 先去官网上下载对应的dmg文件 想要不花钱的话就可以对应的去 下载社区版本的 连接 https osx metasploit com metasploitframework late
  • PhpStorm 上面的git集成用法

    phpStrom这个php的 IDE完美的集合了git 对于有些对命令行不是很熟悉的同学来说 这可以带来很大的帮助 下面我给大家说一下具体的用法 1 我们提交自己的代码 a 在我们的项目上 右击 如图所示 相当于 git add 这个大家都
  • 使用DS18B20模块的Arduino模拟温度计

    有时 我们需要在项目中添加一个温度指示器 因此 在本篇文章中 您将学习如何使用Arduino和DS18B20温度传感器制作一款模拟温度计 DS18B20模块 首先 Maxim DS18B20数字温度计提供9位至12位摄氏温度测量 并具有报警
  • linux机试题,智一面之荣耀机试题 2021.04 ~05

    记录下最近面试的算法题 题目记得不是特别清楚了 大致描述 一 2021 04 17荣耀机试 1 数组排序 题目描述 输入多个数字 按数字从小到大排序 输入描述 多个整数 保证都在int范围内 用空格隔开 输出描述 从小到大的值 用空格隔开
  • qt 带复选框的下拉列表

    参考 Qt之QComboBox定制 核心思想 void QComboBox setView QAbstractItemView itemView void QComboBox setModel QAbstractItemModel mode
  • pandas dataframe类型数据的反转(reverse)

    data iloc 1
  • 瀑布流实现的三种方法js jq css3

    一 样式 div div class box div class pic img src images 1 jpg div div div class box div class pic img src images 2 jpg div d
  • LeetCode 题解——岛屿数量

    大家好 我是前端西瓜哥 今天我们做一道经典算法题 岛屿数量 LeetCode 上对应题目为 200 题 https leetcode cn com problems number of islands 这道题归属于岛屿问题 是有固定套路的
  • selenium处理各类滑块验证码

    selenium处理各类滑块验证码 滑动验证码 案例展示 实现 滑块拼图验证码 案例展示 实现 滑块拼图验证码 Canvas 案例展示 实现 滑动验证码 案例展示 这种只要用鼠标点击并移动指定距离就可以完成验证 x轴 实现 coding u
  • I2C总线时序以及ACK和NACK(NAK),SCL被从机拉低?

    1 I2C协议详解及裸机程序分析 简书 通俗易懂 根据上图 我们首先设置IICCON 来设置时钟 时钟源是PCLK 是50MHZ 太快了我们需要设置这个分频系数 把时钟降低 降低到我们想要的SCL 然后我们要发出start信号 我们需要设置
  • VUE >>> /deep/ ::v-deep

    深层样式 gt gt gt 别名 deep v deep 给父元素添加 类名 需要 借助于深层样式 gt gt gt 只可使用于css deep 如果有scoped 但 不使用第三方css扩展语言 可以使用 v deep 使用scss或者其
  • vue 地图坐标相互转换(GCJ-02,BD-09,WGS84)百度,火星,高德等坐标相互转换(最全代码,开箱即用)

    封装好的 js 代码 GCJ 02 中国坐标偏移标准 Google Map 高德 腾讯使用 BD 09 百度坐标偏移标准 Baidu Map使用 百度坐标 WGS 84 是国际标准 GPS坐标 Google Earth使用 或者GPS模块