1、不同地图服务商的坐标系

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

WGS84:World Geodetic System 1984,是为GPS全球定位系统使用而建立的坐标系统。通过遍布世界的卫星观测站观测到的坐标建立,其初次WGS84的精度为1-2m,在1994年1月2号,通过10个观测站在GPS测量方法上改正,得到了WGS84(G730),G表示由GPS测量得到,730表示为GPS时间第730个周。1996年,National Imagery and Mapping Agency (NIMA) 为美国国防部 (U.S.Departemt of Defense, DoD)做了一个新的坐标系统。这样实现了新的WGS版本:WGS(G873)。其因为加入了USNO站和北京站的改正,其东部方向加入了31-39cm 的改正。所有的其他坐标都有在1分米之内的修正。第三次精化:WGS84(G1150),于2002年1月20日启用。

GCJ-02(官方称地形图非线性保密处理算法,俗称火星坐标系、国测局坐标):是一种基于WGS-84制定的大地测量系统,由中国国家测绘地理信息局制定,国家科学技术进步奖一等奖得主李成名开发。此坐标系所采用的混淆算法会在经纬度中加入看似随机的偏移,号称可以促进国家安全。使用GCJ-02记录下的地点在GCJ-02的地图中会显示在正确的位置,然而换成WGS-84的地图或地点记录就可能造成100-700米不等的偏移。

BD-09:是百度地图使用的地理坐标系,其在GCJ-02上多增加了一次变换,号称“有助保护用户隐私”。

图吧坐标:图吧是百度坐标乘以10000的结果。

搜狗坐标:在GCJ-02上进行了加密。

2、坐标转换

<script>// 定义一些常量
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 { Number } bd_lon* @param { Number } bd_lat*/
function bd09togcj02 (bd_lon, bd_lat) {var x_pi = 3.14159265358979324 * 3000.0 / 180.0var x = bd_lon - 0.0065var y = bd_lat - 0.006var 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 { Number } lng* @param { Number } lat*/
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.0065var bd_lat = z * Math.sin(theta) + 0.006return [bd_lng, bd_lat]
}/*** WGS84坐标系转火星坐标系GCj02 / 即WGS84 转谷歌、高德* @param { Number } lng* @param { Number } lat*/
function wgs84togcj02 (lng, lat) {if (outOfChina(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 * PIvar magic = Math.sin(radlat)magic = 1 - ee * magic * magicvar sqrtmagic = Math.sqrt(magic)dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)const mglat = lat + dlatconst mglng = lng + dlngreturn [mglng, mglat]}
}/*** GCJ02(火星坐标系) 转换为 WGS84 / 即谷歌高德转WGS84* @param { Number } lng* @param { Number } lat*/
function gcj02towgs84 (lng, lat) {if (outOfChina(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 * PIvar magic = Math.sin(radlat)magic = 1 - ee * magic * magicvar sqrtmagic = Math.sqrt(magic)dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)const mglat = lat + dlatconst mglng = lng + dlngreturn [lng * 2 - mglng, lat * 2 - mglat]}
}/*** 百度坐标系转wgs84坐标系* @param {*} lng* @param {*} lat*/
function bd09towgs84 (lng, lat) {// 百度坐标系先转为火星坐标系const gcj02 = bd09togcj02(lng, lat)// 火星坐标系转wgs84坐标系const result = gcj02towgs84(gcj02[0], gcj02[1])return result
}/*** wgs84坐标系转百度坐标系* @param {*} lng* @param {*} lat*/
function wgs84tobd09 (lng, lat) {// wgs84先转为火星坐标系const gcj02 = wgs84togcj02(lng, lat)// 火星坐标系转百度坐标系const result = gcj02tobd09(gcj02[0], gcj02[1])return result
}/*** 经度转换* @param { Number } lng* @param { Number } lat*/
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.0ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0return ret
}/*** 纬度转换* @param { Number } lng* @param { Number } lat*/
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.0ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0return ret
}/*** 判断是否在国内,不在国内则不做偏移* @param {*} lng* @param {*} lat*/
function outOfChina (lng, lat) {return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false)
}console.log(wgs84togcj02(114.21324,30.556059));
</script>

WGS84、GCJ-02、BD-09、图吧坐标简介及坐标转换实现(js版)相关推荐

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

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

  2. 地球坐标转换(度分秒转度),火星坐标,百度坐标转换 c++,js ,c# 算法通用

    地球坐标,火星坐标,百度坐标转换 标准地球坐标即GPS设备获得的坐标,该坐标需要经过国家测绘局进行加密后形成火星坐标(GCJ-02 ),我们用的google坐标和高德地图坐标也就是火星坐标 百度地图, ...

  3. 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的核心思想与工作机理

    [Zigbee技术入门教程-02]一图读懂ZStack协议栈的核心思想与工作机理 广东职业技术学院  欧浩源   Z-Stack协议栈是一个基于任务轮询方式的操作系统,其任务调度和资源分配由操作系统抽 ...

  4. Highmaps 经纬度转换为svg图上坐标

    最近做后台报表展示系统,用到Highcharts.Highcharts兼容所有现代浏览器及低版本的IE浏览器(IE6+),可配置性高,包括颜色.线条,点,点的形状.背景图等等. 地域上展示需要High ...

  5. 学习笔记——【python】GetGeoTransform()使用,gdal截取图像,使用GDAL进行影像投影坐标、地理坐标、图上坐标的转换

    1. GetGeoTransform()使用.gdal截取图像 GetGeoTransform() GeoTransform[0],左上角横坐标(应该是投影坐标) GeoTransform[2],行旋 ...

  6. ML之shap:分析基于shap库生成的力图、鸟瞰图、散点图等可视化图的坐标与内容详解之详细攻略

    ML之shap:分析基于shap库生成的力图.鸟瞰图.散点图等可视化图的坐标与内容详解之详细攻略 目录 一.力图可视化 1.单个样本力图可视化

  7. 地球坐标,火星坐标,百度坐标转换

    标准地球坐标即GPS设备获得的坐标,该坐标需要经过国家测绘局进行加密后形成火星坐标(WGS-84 ),我们用的google坐标和高德地图坐标也就是火星坐标 百度地图,在火星坐标的基础上再进行一次加密, ...

  8. 地球坐标,火星坐标,百度坐标转换C++

    标准地球坐标即GPS设备获得的坐标,该坐标需要经过国家测绘局进行加密后形成火星坐标(WGS-84 ),我们用的google坐标和高德地图坐标也就是火星坐标 百度地图,在火星坐标的基础上再进行一次加密, ...

  9. 各系地图坐标互相转换【JS版和Java版】

    各系地图坐标互相转换[JS版和Java版] 坐标说明 1.(地球坐标)美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置. 2.(火星坐标)我国,出于国家安全考虑,国内 ...

最新文章

  1. Spring 事务底层原理,你会了吗?
  2. 微软System Center Operations Manager 2012(SCOM )安装图文教程
  3. python怎么创建变量_python怎么创建变量
  4. mysql 时间差_后端从mysql取值返回0时区时间数据的问题
  5. spring的一些概念及优点
  6. .net core EPPlus npoi_在.NET中隐藏带有只读Web路径的Web shell
  7. 回购价低于股价怎么办?
  8. python 怎么算l2范数_python之彻底搞懂迭代、可迭代、迭代器的区别(一)
  9. 浅谈Spark几种不同的任务提交相关脚本(以Spark 1.5.0为例)
  10. 论文笔记_S2D.27_2006-NIPS-从单目图像学习深度
  11. 深度学习图像分类(一):LeNet
  12. python爬虫模拟登陆
  13. Apple个人开发者账号相关问题
  14. 大乐斗2服务器维护,腾讯《QQ宠物》、《乐斗Ⅱ》正式停止运营
  15. python分类器分5类_Python机器学习之K近邻分类器
  16. android的短信发送全过程源代码分析
  17. sendgrid html text,当我保存时,SendGrid通过更改我的html模板“帮助”我?
  18. 旧mac迁移到Mac21款m1后微信聊天记录文件显示未下载怎么办
  19. 5G笔记| 概述:5G网络架构(NSA/SA组网)、无线资源控制RRC、语音通话
  20. LeetCode每日一题——952. 按公因数计算最大组件大小

热门文章

  1. html选择文件夹控件,File文件控件,选中文件(图片,flash,视频)即立即预览显示
  2. GOM传奇引擎登录器商业版与免费版的区别
  3. android listview 点击获取焦点,android – ListView项目焦点行为
  4. 小红书用户画像分析_用户画像分析会成为第一品牌竞争力吗?
  5. 华为校招JAVA机试题
  6. [POJ3384]Feng Shui(半平面交+凸包)
  7. 数学符号的意义总结(未完待续)
  8. 机器学习/深度学习/自然语言处理学习路线
  9. REXROTH比例阀的运用和特点
  10. 联想 Thinkpad T440p驱动程序下载列表(转发文章)