为什么写这个模块
随着移动互联网的兴起,几乎每一个app都会去收集用户位置,如果恰好你在处理与地理定位相关的代码,并且不了解地理坐标系的话,肯定要被我大天朝各种坐标系搞晕。写这个模块的目的也是因为项目中app获取的坐标是百度sdk获取的,在做webgis可视化的时候各种偏,各种坐标不对,当时的心情就是下面这个图片。
当前互联网地图的坐标系现状

地球坐标 (WGS84)
国际标准,从专业GPS 设备中取出的数据的坐标系
国际地图提供商使用的坐标系
火星坐标 (GCJ-02)也叫国测局坐标系
中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。
百度坐标 (BD-09)
百度标准,百度 SDK,百度地图,Geocoding 使用
(本来就乱了,百度又在火星坐标上来个二次加密)

开发过程需要注意的事
从设备获取经纬度(GPS)坐标

如果使用的是百度sdk那么可以获得百度坐标(bd09)或者火星坐标(GCJ02),默认是bd09
如果使用的是ios的原生定位库,那么获得的坐标是WGS84
如果使用的是高德sdk,那么获取的坐标是GCJ02

互联网在线地图使用的坐标系

火星坐标系:
iOS 地图(其实是高德)
Gogole地图
搜搜、阿里云、高德地图
百度坐标系:
当然只有百度地图
WGS84坐标系:
国际标准,谷歌国外地图、osm地图等国外的地图一般都是这个
举个栗子
笔者所在的公司app使用的是百度的sdk,需要对定位坐标做web可视化效果,百度地图提供的js api满足不了需求,选用leaflet来做可视化,这里要说到百度地图了,它使用的坐标系和切图的原点都不一致,并且其加偏还是非线性的,因此无法利用常用的加载方法去加载,放弃使用它的底图,选用了符合标准的高德底图,高德底图使用的是国测局坐标也就是GCJ02坐标系,如果简单的将app获取的经纬度叠加上去,就有可能你本来在百度大厦的位置就显示在西二旗地铁站了甚至更远,因此需要将bd09转成gcj02坐标系,这个时候这个库就有了用武之地,对点批量转换再加载到底图上,就可以让点显示在本应该出现的位置。

另外如果你拿到了一些WGS84的坐标,想加载到各种底图上就可以根据这个库在底图坐标系和你的数据坐标系之间进行转换。希望对大家有用吧。
安装(install)

npm install coordtransform

示例用法(Example&Usage)

1 NodeJs用法
//国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)
var coordtransform=require('coordtransform');
//百度经纬度坐标转国测局坐标
var bd09togcj02=coordtransform.bd09togcj02(116.404, 39.915);
//国测局坐标转百度经纬度坐标
var gcj02tobd09=coordtransform.gcj02tobd09(116.404, 39.915);
//wgs84转国测局坐标
var wgs84togcj02=coordtransform.wgs84togcj02(116.404, 39.915);
//国测局坐标转wgs84坐标
var gcj02towgs84=coordtransform.gcj02towgs84(116.404, 39.915);
console.log(bd09togcj02);
console.log(gcj02tobd09);
console.log(wgs84togcj02);
console.log(gcj02towgs84);
//result
//bd09togcj02:   [ 116.39762729119315, 39.90865673957631 ]
//gcj02tobd09:   [ 116.41036949371029, 39.92133699351021 ]
//wgs84togcj02:  [ 116.41024449916938, 39.91640428150164 ]
//gcj02towgs84:  [ 116.39775550083061, 39.91359571849836 ]

2 浏览器用法
直接引用目录内的index.js,会有一个coordtransform的全局对象暴露出来,也支持用AMD加载器加载

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>coordTransform</title>
</head>
<body>
<h1>请按F12打开控制台查看结果</h1>
<script src="index.js"></script>
<script>//国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)//百度经纬度坐标转国测局坐标var bd09togcj02 = coordtransform.bd09togcj02(116.404, 39.915);//国测局坐标转百度经纬度坐标var gcj02tobd09 = coordtransform.gcj02tobd09(116.404, 39.915);//wgs84转国测局坐标var wgs84togcj02 = coordtransform.wgs84togcj02(116.404, 39.915);//国测局坐标转wgs84坐标var gcj02towgs84 = coordtransform.gcj02towgs84(116.404, 39.915);console.log(bd09togcj02);console.log(gcj02tobd09);console.log(wgs84togcj02);console.log(gcj02towgs84);//result//bd09togcj02:   [ 116.39762729119315, 39.90865673957631 ]//gcj02tobd09:   [ 116.41036949371029, 39.92133699351021 ]//wgs84togcj02:  [ 116.41024449916938, 39.91640428150164 ]//gcj02towgs84:  [ 116.39775550083061, 39.91359571849836 ]
</script>
</body>
</html>

sometipes
对于做GIS的人来说,底图对我们还是很重要的,有时候看国外的底图很好看,换上之后发现坐标位置全部不对,因此写了这个包帮助大家完成坐标的转换,也准备写成一个leaflet的扩展,方便大家的使用,喜欢的童鞋请star,O(∩_∩)O

感谢分享https://cnodejs.org/topic/564c0a27e4766d487f6fe38d

百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系互转相关推荐

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

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

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

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

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

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

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

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

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

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

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

    //定义一些常量 var x_PI = 3.14159265358979324 * 3000.0 / 180.0; var PI = 3.1415926535897932384626; var a = ...

  7. 火星坐标(gcj02)、国测局坐标(GPS)和百度坐标(bd0911)互转

    火星坐标转百度坐标 /*** 火星转百度* * @param bd_lat 百度坐标纬度* @param bd_lon 百度坐标经度*/ public void bd_encrypt(double g ...

  8. 百度BD09加密经纬度转国测局GCJ02经纬度

    正在做的一个微信公众号的项目要求根据用户输入的地址获取经纬度, 并导航到指定位置, 之前头脑一热用了百度的API做定位, 现在要做导航需要调用微信的SDK, 发现百度获取的经纬度是加密过的BD09格式 ...

  9. 百度坐标系与WGS84坐标系互转

    *百度坐标系(BD09)与火星坐标系(GCJ-02)的转换*即 百度 转 高德 .谷歌*/var bd09togcj02 =function bd09togcj02(bd_lon,bd_lat){va ...

最新文章

  1. linux-windows主动推送文件同步目录数据 linux-windows数据目录同步
  2. FPGA学习及设计中的注意事项
  3. php satellite_object_to_string,php object如何转string
  4. 你的眼睛已经睁开了!(转)
  5. win7优化设置_win7蓝牙怎么打开?
  6. python创建空元组_用Python创建空元组
  7. 实体类blob类型_Mysql的数据类型和JPA的实体类
  8. SDUT oj 选拔赛1 迷之好奇
  9. 魅族POP2s真无线耳机正式发布:售价299元!
  10. coursera 视频总是缓冲或者无法观看,有什么方法解决?
  11. python 如何调用linux系统中命令
  12. 星环Transwarp Data Hub大数据安装学习
  13. ping服务器时显示的ttl是什么意思,ping命令显示的TTL是什么意思?
  14. 七牛服务器获取文件内容
  15. 独立操作按钮操作后自动失焦
  16. MySQL数据库 - 复杂查询(二)第二关
  17. 数组的排序面向对象类对象0708
  18. 开机提示小娜无法在本计算机运行,win10 20h2提示此应用无法在你的电脑上运行解决方法...
  19. vuejs 配置路由
  20. Android Studio类微信界面之RecyclerView设计

热门文章

  1. tms320vc5416c语言编程,TMS320VC5416与CAN总线的接口设计及软件编程
  2. 第二类曲线、曲面积分计算公式
  3. 曲面积分的投影法_曲线曲面积分与重积分知识点汇总
  4. android 代码 lut,Android基于Shader的图像处理(7)-颜色表LUT
  5. 《新零售 低价高效的数据赋能之路》读后感
  6. espanso-跨平台文本扩展工具
  7. 再见 Wordpress!这个开源建站神器有点吊
  8. Linux系统下强制关闭程序
  9. 20145325张梓靖 《信息安全系统设计基础》第13周学习总结
  10. Java多线程 生产者-消费者问题示例