vue中js转换火星坐标以及真实坐标
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转换火星坐标以及真实坐标相关推荐
- vue中js文件里获取this(vue实例)
vue中js文件里获取this(vue实例) 1,在main.js中抛出vue实例,在需要用到的地方引入即可 main.js里let vueThis= new Vue({el: '#app',rout ...
- android gps 火星坐标,GPS真实坐标与火星地图坐标/百度地图坐标的转换
#include #include #include static const uint32_t GPSBaud = 9600; TinyGPSPlus gps; HardwareSerial ss( ...
- java火星坐标与真实坐标的转换
1.新建工程,导入dtd文件. package com.qishui;import java.io.InputStream; import java.io.ObjectInputStream;/*** ...
- Vue中JS遍历后台JAVA返回的Map数据,构造对象数组数据格式
场景 SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图: SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图_BADAO_LIUMANG_ ...
- 有关在Vue中JS如何在H5移动端如何调起第三方地图软件(高德、腾讯、百度)
一. 首先封装区分当前环境是ios端还是android端的方法 RunningPlatform() {let ua = navigator.userAgent.toLowerCase()console ...
- JS中(JS转换json/jQuery转换json)中的long型大数精度丢失问题
最近在后台向前台传输对象id时,遇到一个奇怪的问题.类似代码如下: var str = '{"id":217998860110340096}'; var jsonObj1 = $. ...
- Swiper 在vue中的使用,loop=true获取真实index,数据更新刷新初始化swiper
1.安装 npm install swiper --save-dev 2.在组件中引用 import Swiper from "swiper" import 'swiper/dis ...
- vue中网址转换图片
后端接口返回网址,需要直接展示在列表中的时候(不做修改), 注释的是接受网址的参数,可以查看网址链接. < img :src="InvoiceImage" style=&qu ...
- vue引用js文件的多种方式
本文主要介绍了vue引用js文件的多种方式,本文大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.vue-cli webpack全局引入jquery (1) 首先 npm inst ...
最新文章
- linux服务之rsync
- shell 下的运算表达
- C#中如何将光标定位在某个控件中?
- 强大的数据库管理工具Navicat Premium安装教程
- Linux平台安装MongoDB(亲测)
- 以Settings.APPLICATION_DEVELOPMENT_SETTINGS打开开发者面板出错总结
- Fiori Elements - get annotation implementation in backend
- windows sharepoint service 3.0 wss3 URL 映射问题,差点把网站废掉
- Redis工作笔记-Hash类型
- C/C++下载文件_上传文件
- 腾讯云发布第三代云服务器矩阵,开放更强计算力赋能产业智能化
- SQL SERVER 只有MDF文件的恢复
- iTunes是什么意思
- 运动:延伸你的美丽(图)
- BT下载软件开发笔记——种子解析模块的设计与实现
- 阿里巴巴JAVA编码规范考试
- 三维人脸重建:精读3dmm.py
- C#实现QQ空间登录
- c语言课后编程题第八章答案,C语言课后编程题答案
- 数据结构(四):KD树