//定义一些常量

var x_PI = 3.14159265358979324 * 3000.0 / 180.0;

var PI = 3.1415926535897932384626;

var a = 6378245.0;

var ee = 0.00669342162296594323;

/**

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

* 即 百度 转 谷歌、高德

* @param bd_lon

* @param bd_lat

* @returns {*[]}

*/

function bd09togcj02(bd_lon, bd_lat) {

var x_pi = 3.14159265358979324 * 3000.0 / 180.0;

var x = bd_lon - 0.0065;

var y = bd_lat - 0.006;

var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);

var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);

var gg_lng = z * Math.cos(theta);

var gg_lat = z * Math.sin(theta);

return [gg_lng, gg_lat]

}

/**

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

* 即谷歌、高德 转 百度

* @param lng

* @param lat

* @returns {*[]}

*/

function gcj02tobd09(lng, lat) {

var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);

var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);

var bd_lng = z * Math.cos(theta) + 0.0065;

var bd_lat = z * Math.sin(theta) + 0.006;

return [bd_lng, bd_lat]

}

/**

* WGS84转GCj02

* @param lng

* @param lat

* @returns {*[]}

*/

function wgs84togcj02(lng, lat) {

if (out_of_china(lng, lat)) {

return [lng, lat]

}

else {

var dlat = transformlat(lng - 105.0, lat - 35.0);

var dlng = 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]

}

}

/**

* GCJ02 转换为 WGS84

* @param lng

* @param lat

* @returns {*[]}

*/

function gcj02towgs84(lng, lat) {

if (out_of_china(lng, lat)) {

return [lng, lat]

}

else {

var dlat = transformlat(lng - 105.0, lat - 35.0);

var dlng = 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);

mglat = lat + dlat;

mglng = lng + dlng;

return [lng * 2 - mglng, lat * 2 - mglat]

}

}

function transformlat(lng, lat) {

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

}

function transformlng(lng, lat) {

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

}

/**

* 判断是否在国内,不在国内则不做偏移

* @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);

}

//使用示例

//gps坐标转火星坐标

var lng_lat_1 = wgs84togcj02(113.912743,22.497629);

console.log('火星坐标...',lng_lat_1);

//火星坐标转百度坐标

var lng_lat_2 = gcj02tobd09(lng_lat_1[0], lng_lat_1[1]);

console.log('百度坐标...',lng_lat_2);

gps84转换gcj02公式_百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换...相关推荐

  1. 前端javascript百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换

    /*** * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换*/ // UMD魔法代码 // if the module has no dependenc ...

  2. 地图坐标转换(84坐标、百度坐标、国测局坐标)

    由于目前世界上只有美国才有全球定位系统(GPS),当我们实际做项目时,得到的坐标数据往往都是为GPS全球定位系统使用而建立的坐标系统,即我们所说的84坐标.而基于我国国情,这些真实坐标都是已经进行人为 ...

  3. QGIS中百度、高德与WGS84坐标系之间的转换

    参考原文链接:https://mp.weixin.qq.com/s/_WxOkDTjgSGrgDwIJ9dJgw 将获取的POI数据复制到excel中编辑,如下图所示,所有数据都聚集在了一列,然后点击 ...

  4. 二进制转换八进制图解_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...

    1.背景(Contexts)之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二.八.十.十六进制转换的计算公式的,进制之间的转换是很基础 ...

  5. 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系互转

    为什么写这个模块 随着移动互联网的兴起,几乎每一个app都会去收集用户位置,如果恰好你在处理与地理定位相关的代码,并且不了解地理坐标系的话,肯定要被我大天朝各种坐标系搞晕.写这个模块的目的也是因为项目 ...

  6. 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的相互转换

    /*** Created by Wandergis on 2015/7/8.* 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换*///定义一些常量 var ...

  7. gps坐标转百度坐标 java_BD09坐标(百度坐标) WGS84(GPS坐标) GCJ02(国测局坐标) 的相互转换...

    为什么不统一用WGS84地理坐标系这就是国家地理测绘总局对于出版地图的要求,出版地图必须符合GCJ02坐标系标准了,也就是国家规定不能直接使用WGS84地理坐标系.所以定位大家感觉不准确很多又叫出版地 ...

  8. gps84转换gcj02公式_【测绘基础】关于投影坐标和坐标转换,这几点你不得不知道!...

    [测绘基础]关于投影坐标和坐标转换,这几点你不得不知道! 本文要点: 1.地理坐标系是什么?常见的地理坐标系有哪些? 2.投影坐标系是什么?常见的投影坐标系有哪些? 3.关于坐标转换. 4.如何在Ar ...

  9. WGS84(GPS坐标) BD09坐标(百度坐标)GCJ02(国测局坐标) 的相互转换

    关于三种坐标系的介绍 WGS84:一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系. GCJ02:由中国国家测绘局制订的地理信息系统的坐标系统,是由WGS84坐标系经过加密后的坐标 ...

最新文章

  1. 在同一台电脑上同时安装Python2和Python3
  2. 判断 多选框是否有选择 适用于批量操作
  3. 参考文献使用交叉引用的注意事项(实用篇)
  4. B类产品的科学化设计与分析流程
  5. 工业以太网交换机可以家用吗?
  6. VC++ 进度条更新方案
  7. Shell脚本学习-阶段十六-备份和恢复系统权限
  8. matlab中怎么找晶闸管,matlab中晶闸管如何连接
  9. 【iOS】下的读写锁的简单实现
  10. 批量解除文件锁定状态包含子文件夹
  11. 47 jquery 计时器 选择器 筛选器 左边菜单栏
  12. 易语言雷电模拟器adb模块制作实现一键模拟器多开
  13. STM32实现薄膜压力传感器数据采集(标准库和HAL库实现)
  14. 关于FileZilla连接FTP站点上传下载文件
  15. iOS 键盘限制输入内容限制、输入长度限制
  16. BMP与PPM格式的转换
  17. C1——primitives添加gltf并实现旋转、缩放、平移
  18. SLAM静态编译中动态链接库问题
  19. flask常用的第三方平台,第三方库,扩展包
  20. 政策解读 | 杜绝“大数据杀熟” 《个人信息保护法》来了

热门文章

  1. uiimagepickerviewcontroller
  2. XML Schema是什么
  3. Python 之内置函数和匿名函数
  4. 数据分析之pandas笔记
  5. Python中的函数概述
  6. python中的zip模块
  7. 集合添加元素python_Python基础:列表、字典、元组、集合、添加和删除元素,增删...
  8. 查看手机是否安装微信客户端
  9. Mysql索引类型分析
  10. 【linux】linux系统中常见配置文件及目录说明