前言:在博客上找了很多,也看了很多浏览度高的,但是一测试,还是有几百米或者几十米的误差

于是我就借鉴几个博客做了调整,经度度与百度手机定位几乎一致。

借鉴博客地址:https://blog.csdn.net/coolypf/article/details/8569813

还有一个博客:找不到了,看到很多博客,都是转载或者抄袭借鉴,暂时没找到原文,找到了再放上来

一、84 to 火星坐标系 (GCJ-02) to 百度地图坐标

/*** @Author zr* @Date 2019-08-29 17:03* @Version 2.0*/
public class BdMapUtil {/** 圆周率 */public static double pi = 3.1415926535897932384626;public static double a = 6378245.0;public static double ee = 0.00669342162296594323;private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;/*** 得到百度地图经纬度** @author zr* @date 2019-09-09* @param lat WGS-84 gps的纬度* @param lon WGS-84 gps的经度* @return com.construn.vehicle.message.util.Gps*/public static Gps getBd09(double lat, double lon){//得到火星坐标经纬度Gps gps = gps84ToGcj02(lat, lon);if(gps ==null){return null;}//得到百度坐标经纬度return gcj02ToBd09(gps.getWgLat(), gps.getWgLon());}/*** 火星坐标系 (GCJ-02)转百度地图坐标系** @author zr* @date 2019-09-09* @param  * @param gg_lat* @param gg_lon* @return void*/private static Gps gcj02ToBd09(double gg_lat, double gg_lon) {double x = gg_lon, y = gg_lat;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 bd_lon = z * Math.cos(theta) + 0.0065;double bd_lat = z * Math.sin(theta) + 0.006;return new Gps(bd_lat,bd_lon);}/*** 84 to 火星坐标系 (GCJ-02)** @author zr* @date 2019-09-09* @param  * @param lat* @param lon* @return void*/private static Gps gps84ToGcj02(double lat, double lon) {if (outOfChina(lat, lon)) {return null;}double dLat = transformLat(lon - 105.0, lat - 35.0);double dLon = transformLon(lon - 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);dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);double mgLat = lat + dLat;double mgLon = lon + dLon;return new Gps(mgLat,mgLon);}/*** 判断有没有超过中国区** @author zr* @date 2019-09-09* @param  * @param lat* @param lon* @return boolean*/private static boolean outOfChina(double lat, double lon) {if (lon < 72.004 || lon > 137.8347){return true;}if (lat < 0.8293 || lat > 55.8271){return true;}return false;}/*** 处理纬度** @author zr* @date 2019-09-09* @param  * @param x* @param y* @return double*/private static double transformLat(double x, double y) {double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y+ 0.2 * Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;return ret;}/*** 处理经度** @author zr* @date 2019-09-09* @param  * @param x* @param y* @return double*/private static double transformLon(double x, double y) {double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1* Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0* pi)) * 2.0 / 3.0;return ret;}
}

Gps类

import lombok.Getter;
import lombok.Setter;/*** gps 经纬度坐标类** @Author zr* @Date 2019-09-09 19:12* @Version 2.0*/
@Getter
@Setter
public class Gps {private double wgLat;private double wgLon;public Gps() {}public Gps(double wgLat, double wgLon) {setWgLat(wgLat);setWgLon(wgLon);}@Overridepublic String toString() {return "Gps{" +"wgLat=" + wgLat +", wgLon=" + wgLon +'}';}
}

二、说明下、百度的地图加密原始gps地理坐标是这样的:百度地图加密的是 火星坐标系 (GCJ-02),而GCJ-02加密的是原始gps坐标系。所以从原始gps坐标,到百度地图坐标,顺序是WGS-84 --> GCJ-02 --> BD-09

原始GPS坐标(WGS-84)转成百度的经纬度,零误差相关推荐

  1. 由GPS定位的经纬度转换成百度地图经纬度坐标

    /**  * @Description: 各地图API坐标系统比较与转换; WGS84坐标系:即地球坐标系,国际上通用的坐标系.设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系, ...

  2. C#GPS坐标转百度地图坐标

    国际经纬度坐标标准为WGS-84,国内要求必须至少使用国测局制定的GCJ- 02,对地理位置进行首次加密.百度坐标在此基础上,进行了BD-09二次加密措施.百度对外接口的坐标系并不是GPS采集的真实经 ...

  3. ios如何获取gps坐标(定位第二节)

    原文连接: https://blog.csdn.net/michael_ouyang/article/details/54378338 -------------------------------- ...

  4. 坐标计算距离公式 火星坐标系_根据经纬度计算距离的公式、百度坐标转换成GPS坐标(PHP版)...

    //百度坐标转换成GPS坐标 $lnglat = '121.437518,31.224665'; function FromBaiduToGpsXY($lnglat){ // 经度,纬度 $lngla ...

  5. 照片提取GPS 转成百度地图坐标

    感谢: 小慧only http://www.cnblogs.com/zhaohuionly/p/3142623.html  GPS转化坐标方法 大胡子青松 http://www.cnblogs.com ...

  6. gps转百度地图坐标 java,GPS坐标与百度地图坐标转换

    空间坐标公式: image.png 上述四个方程式中待测点坐标x. y. z 和Vto为未知参数,其中di=c△ti (i=1.2.3.4). di (i=1.2.3.4) 分别为卫星1.卫星2.卫星 ...

  7. GPS坐标转百度坐标总结

    我就直接把我整理的模块摆上去吧!有需要的可以直接复制过去导入就可以用了. /*** 采用百度地图的转换方法,向百度地图服务器请求转换结果,* 普通用户有次数限制,另外异步转换,改方法可以无限转换,* ...

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

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

  9. 【GIS - 地理信息系统】WGS 84 坐标系和 GCJ-02 坐标加密偏移 ( 大地坐标系 和 加密坐标系 | WGS 84 坐标体系简介 | GCJ-02 坐标加密偏移 )

    文章目录 一.WGS 84 坐标系和 GCJ-02 坐标加密偏移 1.大地坐标系 和 加密坐标系 大地坐标系 加密坐标系 2.WGS 84 坐标体系简介 坐标加密 WGS 84 由来 经度和纬度 WG ...

最新文章

  1. gecco 1.1.0稳定版发布,易用的轻量化爬虫
  2. tuple object is not callable解决方案
  3. ax在c语言中意思啊,【数论】整理关于ax+by=c
  4. iOS之本地推送通知使用介绍
  5. 短小有趣的c语言代码,分享一段有趣的小代码
  6. ERROR:imshow、Mat、waitkey找不到标识符(opencv)
  7. LeetCode 29. Divide Two Integers
  8. 1087 1 10 100 1000
  9. 从Slice_Header学习H.264(三.2)--相关细节之 参考图像列表
  10. yarn install命令运行报错:无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  11. “国潮” MCU厂商列表
  12. 我的世界(16)-解决Minecraft Forge官网无法下载文件的问题
  13. 我的爷爷(知识渊博的下乡知青)
  14. 计算机word基础操作知识点,Office基础和计算机操作基础的知识点(一)
  15. Android获取WIFI的SSID的一些差异,有的带引号
  16. WPS简单五步操作修改图形并调整图形位置大小和旋转角度
  17. GPS/BD陶瓷天线
  18. 浅析ORACLE ERP系统维护方法
  19. C#winform小demo-串口传输实现硬件数据回传(SerialPort类使用)
  20. 《移动安全》(8)为挂钩而战-Xposed模块编写

热门文章

  1. 洛谷B2112石头剪子布Python题解
  2. android全格式多媒体播放器,Android多媒体应用使用MediaPlayer播放音频
  3. c语言单精度比大小,c语言单精度和双精度的区别.pdf
  4. 【人工智能与深度学习】监督方法的成功故事: 前置训练
  5. 广州房地产契税完税凭证在微信无法下载的解决办法
  6. 从ThinkPad E530到ThinkPad E531,15寸影音本的“+1”故事
  7. 【Python】平衡点和支配点问题
  8. SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH
  9. [美国经典冒险恐怖惊秫片][狂蟒之灾][BD-RMVB/1.13G][中英字幕]
  10. 处理器运算能力单位(TOPS)