//定义一些常量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);

WGS84转GCj02相关推荐

  1. Unity经纬度相互转换(WGS-84、GCJ-02、BD-09)

    /***  *   *    Title: MXFramework  *           主题: GPS工具类  *    Description:   *           功能:1.各种坐标 ...

  2. WGS84与GCJ02、BD09经纬度坐标转换介绍

    在涉及到经纬度的地方,我们在编码的时候,经常需要进行转换.而且转换代码似乎非常复杂,真正理解,其实需要做一些工作,这里我将了解的经纬度坐标相关的知识做一个梳理. 首先了解经纬度坐标系统. 因为地球并不 ...

  3. GPS坐标系转换(标准坐标系WGS84转GCJ-02火星坐标系)

    GPS坐标系转换(标准坐标系WGS84转GCJ-02火星坐标系) 坐标系简介 WGS-84 标准坐标系 GCJ-02 - 国测局坐标 BD-09 - 百度坐标系 干货前的说明 WGS84转GCJ-02 ...

  4. WGS84、GCJ-02、BD-09、图吧坐标简介及坐标转换实现(js版)

    1.不同地图服务商的坐标系 出于国家安全考虑不同的国家在规定地图服务提供商在提供地图服务的时候需要将地图数据进行加密.现在比较流行的坐标系有WGS84.GCJ-02.BD-09,且各个坐标之间存在偏差 ...

  5. WGS84、GCJ-02、BD-09、图吧坐标简介及坐标转换实现(java版)

    1.定位系统及如何定位 现在全球有四个卫星定位系统:美国的全球定位系统GPS(Global Positioning System),俄罗斯的格洛纳斯GIONASS, 欧盟的伽利略系统,我国的北斗. 每 ...

  6. Android开发:WGS-84、GCJ02坐标名词解释及坐标转换

    WGS-84.GCJ02坐标名词解释及坐标转换 目录 一.什么是WSG-84坐标系? 二 .什么是GCJ-02坐标系? 三.GCJ-02坐标系使用场景 四.函数说明 五.工具类代码 注:本文仅包含国测 ...

  7. 转换WGS84、GCJ02、BD09坐标,解决百度高德坐标偏移

    转换WGS84.GCJ02.BD09坐标,解决百度高德坐标偏移 做过地图相关开发的同学肯定会遇到这样一个问题:同样的经纬度坐标,在百度地图和高德地图上位置不一样. 关于坐标系 我们通常用经纬度来表示一 ...

  8. 百度地图开放平台wgs84,gcj02转bd09

    百度地图开放平台wgs84,gcj02转bd09 完整代码 代码解读 参考文献 开局一张图,故事全靠编,上图是上海市257个地铁站bd09坐标和wgs84坐标的差距,可以看到bd09较wgs84往右上 ...

  9. GIS开发:WGS84、GCJ-02、BD-09的区别

    GIS开发:WGS84.GCJ-02.BD-09的区别 前言 开发地图应用服务时,一定会接触到各种坐标系,而保证坐标系的正确与合理是一切数据分析的前提. 这篇文章就梳理了一些常见的地理坐标系,希望能帮 ...

  10. GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)

    文章目录 前言 一.坐标系 1.地球坐标 (WGS84) 2.国测局坐标系(GCJ-02.火星坐标系) 3.百度坐标(BD-09) 4.国家大地2000坐标系(CGCS2000) 二.百度坐标系(BD ...

最新文章

  1. Python基础20-面向对象:静态、组合、继承与派生、多态、封装、反射、内置attr方法等
  2. 解决R 4.0版本包的安装错误
  3. Android编译系统分析四:实战-新增一个产品
  4. Android程序如何实现从网络中获取一张图片
  5. 笔记-高项案例题-2018年下-项目管理-项目集管理-项目组合管理
  6. 洛谷P1019 单词接龙
  7. 前端学习(586):在元素中动态添加类与伪类
  8. 解决Python开发中,Pycharm中无法使用中文输入法问题
  9. HoloLens 2开发:HoloLens开发VS安装与配置
  10. 如何定时唤醒计算机命令,如何设置定时开机 定时开机命令设置方法
  11. 趣谈网络协议笔记 - 通信协议综述
  12. 20160402系统集成管理工程师(test3)
  13. 树莓派输出PWM波驱动舵机
  14. 最小二乘求解与正则化
  15. Flutter技术在会展云中大显身手
  16. 普通人的编辑利器——Vim
  17. BIOS锁定纯UEFI启动的解锁办法
  18. python微信公众号翻译功能怎么用_Watson使用指南(七)在微信公众号中实现识图作诗功能...
  19. VR-AR应用如何改变我们的城市生活?
  20. python 等值线_绘图系列(1):利用matplotlib绘制等值线图

热门文章

  1. 【vue】生成条形码
  2. 计算机视觉知识体系图,计算机视觉系统框架的新构思
  3. java compar_Java中Comparable和Comparator
  4. [读书笔记]金融市场基础笔记
  5. 有什么办法可以让微信群二维码永久有效?这类的二维码生成器怎么制作?
  6. DNSPod十问党霏霏:充电桩是披着高科技外皮的传统基建?
  7. python透明图片合并_Python用OpenCV合并图片,添加透明部分
  8. 自制ArduinoUno R3开发板,烧写bootloader
  9. 两个excel表格取交集_(怎么用excel把两个表格数据做交集)如何把不同excel表格数据取交集...
  10. oracle按月统计按季度统计,Oracle数据库按月统计(候,旬,月,季,年)