var gps = {

pi: 3.1415926535897932384626,

x_pi: 3.14159265358979324 * 3000.0 / 180.0,

a: 6378245.0,

ee: 0.00669342162296594323

}

/**

* 84 to 火星坐标系 (GCJ-02) World Geodetic System ==> Mars Geodetic System

*

* @param lat

* @param lon

* @return

*/

export function gps84ToGcj02 (lat, lon) {

if (outOfChina(lat, lon)) {

return [lat, lon]

}

let dLat = transformLat(lon - 105.0, lat - 35.0)

let dLon = 0

dLon = transformLon(lon - 105.0, lat - 35.0)

let radLat = lat / 180.0 * gps.pi

let magic = Math.sin(radLat)

magic = 1 - gps.ee * magic * magic

let sqrtMagic = Math.sqrt(magic)

dLat = (dLat * 180.0) / ((gps.a * (1 - gps.ee)) / (magic * sqrtMagic) * gps.pi)

dLon = (dLon * 180.0) / (gps.a / sqrtMagic * Math.cos(radLat) * gps.pi)

let mgLat = lat + dLat

let mgLon = lon + dLon

// return [mgLat, mgLon]

return [retain6(mgLat), retain6(mgLon)]

}

/**

* * 火星坐标系 (GCJ-02) to 84 * * @param lon * @param lat * @return

* */

export function gcj02ToGps84 (lat, lon) {

let Gps = transform(lat, lon)

let lontitude = lon * 2 - Gps[1]

let latitude = lat * 2 - Gps[0]

// return [latitude, lontitude]

return [retain6(latitude), retain6(lontitude)]

}

/**

* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标

*

* @param lat

* @param lon

*/

export function gcj02ToBd09 (lat, lon) {

let x = lon

let y = lat

let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * gps.x_pi)

let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * gps.x_pi)

let tempLon = z * Math.cos(theta) + 0.0065

let tempLat = z * Math.sin(theta) + 0.006

return [tempLat, tempLon]

}

/**

* * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 * * 将 BD-09 坐标转换成GCJ-02 坐标 * * @param

* bd_lat * @param bd_lon * @return

*/

export function bd09ToGcj02 (lat, lon) {

let x = lon - 0.0065

let y = lat - 0.006

let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * gps.x_pi)

let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * gps.x_pi)

let tempLon = z * Math.cos(theta)

let tempLat = z * Math.sin(theta)

return [tempLat, tempLon]

}

/** 将gps84转为bd09

* @param lat

* @param lon

* @return

*/

export function gps84Tobd09 (lat, lon) {

let gcj02 = gps84ToGcj02(lat, lon)

let bd09 = gcj02ToBd09(gcj02[0], gcj02[1])

return bd09

}

/** 将bd09转为gps84

* @param lat

* @param lon

* @return

*/

export function bd09Togps84 (lat, lon) {

let gcj02 = bd09ToGcj02(lat, lon)

let gps84 = gcj02ToGps84(gcj02[0], gcj02[1])

// 保留小数点后六位

gps84[0] = retain6(gps84[0])

gps84[1] = retain6(gps84[1])

return gps84

}

/** 保留小数点后六位

* @param num

* @return

*/

function retain6 (num) {

return parseFloat(num).toFixed(6)

}

function outOfChina (lat, lon) {

if (lon < 72.004 || lon > 137.8347) { return true }

if (lat < 0.8293 || lat > 55.8271) { return true }

return false

}

function transform (lat, lon) {

if (outOfChina(lat, lon)) {

return [lat, lon]

}

let dLat = transformLat(lon - 105.0, lat - 35.0)

let dLon = transformLon(lon - 105.0, lat - 35.0)

let radLat = lat / 180.0 * gps.pi

let magic = Math.sin(radLat)

magic = 1 - gps.ee * magic * magic

let sqrtMagic = Math.sqrt(magic)

dLat = (dLat * 180.0) / ((gps.a * (1 - gps.ee)) / (magic * sqrtMagic) * gps.pi)

dLon = (dLon * 180.0) / (gps.a / sqrtMagic * Math.cos(radLat) * gps.pi)

let mgLat = lat + dLat

let mgLon = lon + dLon

return [mgLat, mgLon]

}

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.sqrt(Math.abs(x)))

ret += (20.0 * Math.sin(6.0 * x * gps.pi) + 20.0 * Math.sin(2.0 * x * gps.pi)) * 2.0 / 3.0

ret += (20.0 * Math.sin(x * gps.pi) + 40.0 * Math.sin(x / 3.0 * gps.pi)) * 2.0 / 3.0

ret += (150.0 * Math.sin(x / 12.0 * gps.pi) + 300.0 * Math.sin(x / 30.0 * gps.pi)) * 2.0 / 3.0

return ret

}

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 * gps.pi) + 20.0 * Math.sin(2.0 * x * gps.pi)) * 2.0 / 3.0

ret += (20.0 * Math.sin(y * gps.pi) + 40.0 * Math.sin(y / 3.0 * gps.pi)) * 2.0 / 3.0

ret += (160.0 * Math.sin(y / 12.0 * gps.pi) + 320 * Math.sin(y * gps.pi / 30.0)) * 2.0 / 3.0

return ret

}

vue中js转换火星坐标以及真实坐标相关推荐

  1. vue中js文件里获取this(vue实例)

    vue中js文件里获取this(vue实例) 1,在main.js中抛出vue实例,在需要用到的地方引入即可 main.js里let vueThis= new Vue({el: '#app',rout ...

  2. android gps 火星坐标,GPS真实坐标与火星地图坐标/百度地图坐标的转换

    #include #include #include static const uint32_t GPSBaud = 9600; TinyGPSPlus gps; HardwareSerial ss( ...

  3. java火星坐标与真实坐标的转换

    1.新建工程,导入dtd文件. package com.qishui;import java.io.InputStream; import java.io.ObjectInputStream;/*** ...

  4. Vue中JS遍历后台JAVA返回的Map数据,构造对象数组数据格式

    场景 SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图: SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图_BADAO_LIUMANG_ ...

  5. 有关在Vue中JS如何在H5移动端如何调起第三方地图软件(高德、腾讯、百度)

    一. 首先封装区分当前环境是ios端还是android端的方法 RunningPlatform() {let ua = navigator.userAgent.toLowerCase()console ...

  6. JS中(JS转换json/jQuery转换json)中的long型大数精度丢失问题

    最近在后台向前台传输对象id时,遇到一个奇怪的问题.类似代码如下: var str = '{"id":217998860110340096}'; var jsonObj1 = $. ...

  7. Swiper 在vue中的使用,loop=true获取真实index,数据更新刷新初始化swiper

    1.安装 npm install swiper --save-dev 2.在组件中引用 import Swiper from "swiper" import 'swiper/dis ...

  8. vue中网址转换图片

    后端接口返回网址,需要直接展示在列表中的时候(不做修改), 注释的是接受网址的参数,可以查看网址链接. < img :src="InvoiceImage" style=&qu ...

  9. vue引用js文件的多种方式

    本文主要介绍了vue引用js文件的多种方式,本文大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.vue-cli webpack全局引入jquery (1) 首先 npm inst ...

最新文章

  1. linux服务之rsync
  2. shell 下的运算表达
  3. C#中如何将光标定位在某个控件中?
  4. 强大的数据库管理工具Navicat Premium安装教程
  5. Linux平台安装MongoDB(亲测)
  6. 以Settings.APPLICATION_DEVELOPMENT_SETTINGS打开开发者面板出错总结
  7. Fiori Elements - get annotation implementation in backend
  8. windows sharepoint service 3.0 wss3 URL 映射问题,差点把网站废掉
  9. Redis工作笔记-Hash类型
  10. C/C++下载文件_上传文件
  11. 腾讯云发布第三代云服务器矩阵,开放更强计算力赋能产业智能化
  12. SQL SERVER 只有MDF文件的恢复
  13. iTunes是什么意思
  14. 运动:延伸你的美丽(图)
  15. BT下载软件开发笔记——种子解析模块的设计与实现
  16. 阿里巴巴JAVA编码规范考试
  17. 三维人脸重建:精读3dmm.py
  18. C#实现QQ空间登录
  19. c语言课后编程题第八章答案,C语言课后编程题答案
  20. 数据结构(四):KD树

热门文章

  1. EB Tresos 入门指南
  2. python tkinter编写界面,使用win32com操作excel获取数据生成截图后,wxpy登录微信,给租客发送房租(二)
  3. h5跳转app指定页面及各种坑的总结
  4. POBPM集成-数据过滤
  5. 让人疑惑的STM32F4F7芯片
  6. 淘宝商品SKU接口、DESC信息、淘宝产品详情API
  7. ambari mysql 密码_ambari密码重置
  8. AtCoder Beginner Contest 217
  9. 自门控激活函数Swish
  10. 基于Nginx的https服务(ssl证书制作)