文章目录

  • 1、概述
    • 1.1 WGS-84
    • 1.2 GCJ-02
    • 1.3 BD-09
  • 2、坐标转换原理
  • 3、GCJ02与BD09相互转换
  • 4、WGS84与BD09相互转换

1、概述

位置纠偏:openGPS

1.1 WGS-84

原始GPS坐标。是为GPS全球定位系统使用而建立的坐标系统。通过实际的硬件设备采集得到

1.2 GCJ-02

由中国国家测绘局(G表示Guojia国家,C表示Cehui测绘,J表示Ju局)制订的地理信息系统的坐标系统。是一种对经纬度数据的加密算法,即加入随机的偏差。国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。(高德,腾讯以及谷歌地图中国区域都是使用该种坐标)

1.3 BD-09

百度坐标系,在GCJ02坐标系基础上进行二次加密。其中BD09LL表示百度经纬度坐标,BD09MC表示百度墨卡托米制坐标。

2、坐标转换原理

详看:https://blog.csdn.net/gudufuyun/article/details/106738942

3、GCJ02与BD09相互转换

private static double xPi = 3.14159265358979324 * 3000.0 / 180.0;
// 摘录于:https://www.cnblogs.com/luoliuniankk/p/10028897.html
public static Map gcj02ToBd09(Map map) {System.out.println(map);double x = 0;double y = 0;x = Double.parseDouble(map.get("lng").toString());y = Double.parseDouble(map.get("lat").toString());double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * xPi);double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * xPi);map.put(tagLng,dataDigit(z * Math.cos(theta) + 0.0065));map.put(tagLat,dataDigit(z * Math.sin(theta) + 0.0065));return map;
}
public static Map bd09ToGcj02(Map map) {double x = 0;double y = 0;x = Double.parseDouble(map.get("lng").toString());y = Double.parseDouble(map.get("lat").toString());double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * xPi);double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * xPi);map.put(tagLng,dataDigit(z * Math.cos(theta)));map.put(tagLat,dataDigit(z * Math.sin(theta)));System.out.println(map);return map;
}
// 保留小数点后8位
public static Double dataDigit(Double val) {DecimalFormat df = new DecimalFormat("#.00000000");String format = df.format(val);return Double.valueOf(format);
}

4、WGS84与BD09相互转换

static double x_PI = 3.14159265358979324 * 3000.0 / 180.0;
static double PI = 3.1415926535897932384626;
static double a = 6378245.0;
static double ee = 0.00669342162296594323;
/*** WGS84 转换为 BD-09*/
public static Map wgs84ToBd09(Map map) {double lng = 0;double lat = 0;lng = Double.valueOf(map.get("lng").toString());lat = Double.valueOf(map.get("lat").toString());// 第一次转换:实际上转化为 GCJ-02 坐标系double dlat = transformlat(lng - 105.0, lat - 35.0);double dlng = transformlng(lng - 105.0, lat - 35.0);double radlat = lat / 180.0 * PI;double magic = Math.sin(radlat);magic = 1 - ee * magic * magic;double sqrtmagic = Math.sqrt(magic);dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);double mglat = lat + dlat;double mglng = lng + dlng;// 第二次转换:在GCJ-02基础上二次加密转为BD-09double z = Math.sqrt(mglng * mglng + mglat * mglat) + 0.00002 * Math.sin(mglat * x_PI);double theta = Math.atan2(mglat, mglng) + 0.000003 * Math.cos(mglng * x_PI);double bd_lng = z * Math.cos(theta) + 0.0065;double bd_lat = z * Math.sin(theta) + 0.006;map.put(tagLng,bd_lng);map.put(tagLat,bd_lat);return map;
}/*** 摘录于:https://www.cnblogs.com/fengcai/p/7479068.html* @param map* @return*/
public static Map bd09ToWgs84(Map map){double x = 0;double y = 0;x = Double.valueOf(map.get("lng").toString()) - 0.0065;y = Double.valueOf(map.get("lat").toString()) - 0.006;Double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);Double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);Double gcjLon = z * Math.cos(theta);Double gcjLat = z * Math.sin(theta);Double a = 6378245.0;Double ee = 0.00669342162296594323;Double dLat = transformlat(gcjLon - 105.0, gcjLat - 35.0);Double dLon = transformlng(gcjLon - 105.0, gcjLat - 35.0);Double radLat = gcjLat / 180.0 * PI;Double magic = Math.sin(radLat);magic = 1 - ee * magic * magic;Double sqrtMagic = Math.sqrt(magic);dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * PI);dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * PI);dLat = gcjLat - dLat;dLon = gcjLon - dLon;map.put(tagLat, dLat);map.put(tagLng, dLon);return map;
}private static double transformlng(double lng, double lat) {double 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;
}private static double transformlat(double lng, double lat) {double 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;
}

由于该文章只是对坐标系转换做了大致汇总。且摘录博文较多,故只在相关的位置给出了跳转链接作为说明,可直接跳转查看。

[坐标纠偏] WGS84转GCJ02、BD09,GCJ02转BD09总结相关推荐

  1. BD-09 GCJ-02 WGS84 坐标之间的转换

    百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84(地球坐标) 参考 :https://github.com/wandergis/coordtransform /*** Creat ...

  2. GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)

    GPS坐标互转:WGS-84(GPS).GCJ-02(Google地图).BD-09(百度地图) WGS-84:是国际标准,GPS坐标(Google Earth使用.或者GPS模块) GCJ-02:中 ...

  3. WGS84 / BD09 / GCJ02 / MapBar 经纬度坐标互转

    WGS84 / BD09 / GCJ02 / MapBar 经纬度坐标互转 Geolocataion converting between WGS84, BD09 and GCJ02. WGS84 / ...

  4. GPS纠偏 WGS84转GCJ02 Java版本

    物联网项目中的硬件传输经纬度坐标多用的是国际标准 WGS-84 坐标系,所以开发者在国内常见地图定位时,会发现与实际情况有几十米的误差.这并非模块问题, 而是国内地图采用了非标坐标系所致. 国内常见地 ...

  5. WGS84地球坐标系,GCJ02火星坐标系,BD09百度坐标系简介与转换,mybatis字段映射原理

    1.各坐标系简介 2.各坐标系转换 2.1坐标点实体类 2.2各坐标系转换工具类 3.测试 1.各坐标系简介 WGS84坐标系 即地球坐标系,国际上通用的坐标系. 设备一般包含GPS芯片或者北斗芯片获 ...

  6. GCJ-02火星坐标系、BD-09百度坐标系和WGS-84坐标系转换

    WGS-84:GPS坐标系 GCJ-02:火星坐标系,国测局02年发布的坐标体系,高德,腾讯等使用. BD-09:百度坐标系 GCJ-02火星坐标系和WGS-84坐标系转换关系 var pi = 3. ...

  7. 批量将postgis进行WGS84与bd-09,gcj-02坐标系转换

    WGS84与bd-09,gcj-02坐标系,百度经纬度与百度墨卡托之间互转 FreeGIS_Coordinate_Transform( in schema_name text, in table_na ...

  8. GPS坐标系(WGS84)、火星坐标系(GCJ02)、百度坐标系(BD-09)的相互转换

    WGS-84:  GPS坐标系,国际标准,GPS模块使用. GCJ-02:   火星坐标系,国测局坐标系,谷歌.高德.腾讯等使用. BD-09:     百度坐标系,百度地图使用. GCJ-02 转W ...

  9. python地图坐标系转换(bd09,gcj02,wgs84三种投影坐标系相互转化)

    1.介绍 1.1 GIS之坐标系 坐标系是GIS的重中之重,一般来说,工作底图平面坐标系应采用国家大地坐标系CGCS2000(或相当于精度WGS84坐标系),投影方式采用高斯-克吕格投影,高程基准采用 ...

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

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

最新文章

  1. 漫谈php框架之中间件
  2. 防火墙 iptables 禁止某个域名访问
  3. python3 reqeusts后写入excel
  4. 【KVM系列04】KVM的I/O 设备直接分配和SR-IOV
  5. pinctrl虚拟spi的linux驱动,linux内核pinctrl驱动的理解和总结
  6. 关于低分辨率像素游戏下显示非防锯齿中文 / 汉字的研究
  7. WordPress 5.1:从CSRF到RCE
  8. ES11新特性_可选链操作符---JavaScript_ECMAScript_ES6-ES11新特性工作笔记064
  9. 由一个计数器出发:关于vue使用独立js文件的问题
  10. 程序员面试金典——2.7回文链表
  11. 10款非常棒的开源论坛系统推荐
  12. c语言 实现参数值双向传递,基于C语言函数参数传递规律的探讨
  13. 爆破字典生成器kali之crunch
  14. 如何提高服务器网站访问速度,如何有效提升网站打开速度?
  15. 第七章 NoSQL数据库技术(二)
  16. mac mysql mysqldb_在 Mac 中安装 MySQLdb (Python mysql )
  17. Hall定理(bzoj 1135: [POI2009]Lyz)
  18. 地图制图基础(三):地图制作要求
  19. java -g_【JVM】7、深入理解Java G1垃圾收集器
  20. 使用Nginx代理地址

热门文章

  1. upd协议java收发消息小练习
  2. 使用DOSBox自动进入debug模式
  3. 抖音小店开通及保证金详情;抖音小店商品上架详细流程。丨国仁网络资讯
  4. axure能做剪切蒙版吗_二手车销售好做吗?没经验能做二手销售吗?
  5. Synonyms——中文近义词工具【含源码解析与改进】
  6. 你好,放大器——输入偏置电流(Input bias current,Iв)
  7. 打太极不协调的二三事
  8. 三极管构成的流水灯电路分析
  9. javascript 上传的Excel格式校验
  10. JavaWeb - 国家语言代码表