真实标准坐标即我们获取到的坐标,真实坐标经经过国家测绘局进行加密后形成火星坐标(WGS-84),百度地图坐标,是在火星坐标的基础上再进行一次加密,形成了百度地图上的坐标,因此,直接将标准地球坐标显示在百度地图上是会有几百米的偏差的。按照此原理,标准GPS坐标经过两步的转换可得到百度坐标,百度在线的API可以实现,但有些项目环境是不需要百度在线API的,所以需要我们自己转换。
后台转换算法如下:

/*** pi: 圆周率。a: 卫星椭球坐标投影到平面地图坐标系的投影因子。ee: 椭球的偏心率。x_pi: 圆周率转换量。transformLat(lat, lon): 输入:横纵坐标,输出:转换后的横坐标。transformLon(lat, lon): 输入:横纵坐标,输出:转换后的纵坐标。wgs2gcj(lat, lon): WGS坐标转换为GCJ坐标。gcj2bd(lat, lon): GCJ坐标转换为百度坐标。*/
public class MapTest {static double pi = 3.14159265358979324;static double a = 6378245.0;static double ee = 0.00669342162296594323;public final static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;public double[] wgs2bd(double lat, double lon) {double[] wgs2gcj = wgs2gcj(lat, lon);double[] gcj2bd = gcj2bd(wgs2gcj[0], wgs2gcj[1]);return gcj2bd;}public static double[] gcj2bd(double lat, double lon) {double x = lon, y = 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 double[]{bd_lat, bd_lon};}public static double[] bd2gcj(double lat, double lon) {double x = lon - 0.0065, y = lat - 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 gg_lon = z * Math.cos(theta);double gg_lat = z * Math.sin(theta);return new double[]{gg_lat, gg_lon};}public static double[] wgs2gcj(double lat, double lon) {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;double[] loc = {mgLat, mgLon};return loc;}private static double transformLat(double lat, double lon) {double ret = -100.0 + 2.0 * lat + 3.0 * lon + 0.2 * lon * lon + 0.1 * lat * lon + 0.2 * Math.sqrt(Math.abs(lat));ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0;ret += (20.0 * Math.sin(lon * pi) + 40.0 * Math.sin(lon / 3.0 * pi)) * 2.0 / 3.0;ret += (160.0 * Math.sin(lon / 12.0 * pi) + 320 * Math.sin(lon * pi / 30.0)) * 2.0 / 3.0;return ret;}private static double transformLon(double lat, double lon) {double ret = 300.0 + lat + 2.0 * lon + 0.1 * lat * lat + 0.1 * lat * lon + 0.1 * Math.sqrt(Math.abs(lat));ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * 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 += (150.0 * Math.sin(lat / 12.0 * pi) + 300.0 * Math.sin(lat / 30.0 * pi)) * 2.0 / 3.0;return ret;}}public static void main(String args[]) {MapTest mapTest = new MapTest();double a[] = mapTest.wgs2bd(23.005633,113.073192);for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}public static void main(String args[]) {MapTest mapTest = new MapTest();double a[] = mapTest.wgs2bd(23.005633,113.073192);for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}

在线API的转换:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}#l-map{height:100%;width:78%;float:left;border-right:2px solid #bcbcbc;}#r-result{height:100%;width:20%;float:left;}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=9fb983ecd9b505f8fedcc9ab07c65e3e"></script>
<script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
<title>GPS转百度</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
//GPS坐标var xx = 113.073192;var yy = 23.005633;var gpsPoint = new BMap.Point(xx,yy);//地图初始化var bm = new BMap.Map("allmap");bm.centerAndZoom(gpsPoint, 15);bm.addControl(new BMap.NavigationControl());//添加谷歌marker和labelvar markergps = new BMap.Marker(gpsPoint);bm.addOverlay(markergps); //添加GPS标注var labelgps = new BMap.Label("我是GPS标注哦",{offset:new BMap.Size(20,-10)});markergps.setLabel(labelgps); //添加GPS标注var xx1 = 113.08517146657847;var yy1 = 23.00891816682947;var gpsPoint1 = new BMap.Point(xx1,yy1);var markergps1 = new BMap.Marker(gpsPoint1);bm.addOverlay(markergps1); //添加GPS标注var labelgps1 = new BMap.Label("我是离线标注哦",{offset:new BMap.Size(30,-10)});markergps1.setLabel(labelgps1); //添加GPS标注//坐标转换完之后的回调函数translateCallback = function (point){var marker = new BMap.Marker(point);bm.addOverlay(marker);var label = new BMap.Label("我是百度标注哦",{offset:new BMap.Size(20,-10)});marker.setLabel(label); //添加百度labelbm.setCenter(point);alert("转化为百度坐标为:"+point.lng + "," + point.lat);}setTimeout(function(){BMap.Convertor.translate(gpsPoint,0,translateCallback);     //真实经纬度转成百度坐标}, 2000);
</script>

GPS地图坐标转百度地图坐标相关推荐

  1. 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:中 ...

  2. 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.卫星 ...

  3. GPS坐标转百度地图坐标的方法

    转自:GPS坐标转百度地图坐标的方法 - 程序员大本营 首先需要认识一下GPS的坐标系.GPS坐标系遵循WGS-84标准,在这个标准下,GPS芯片可以发出不同的数据包格式.根据其数据帧帧头的不同,GP ...

  4. 腾讯地图转换成百度地图坐标

    https://www.jianshu.com/p/0fe30fcd4ae7 一.各个坐标系的概况 众所周知地球是一个不规则椭圆体,GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则 ...

  5. html转换图片位置不正确的是,html5+经纬度定位不准确,html5坐标转火星坐标,百度地图Convertor.translate...

    今天,我爱模板网在做APP考勤时,需要定位用户的位置,显示在地图上,于是就想到了用h5+的plus.geolocation.getCurrentPosition来获取经纬度,然后通过百度地图api将经 ...

  6. 地图相关知识-百度地图

    1.地图坐标系的分类 国测局坐标.百度坐标.WGS84坐标? 三种坐标系说明如下: (1)WGS84:表示GPS获取的坐标: (2)GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统.由WGS ...

  7. android 百度地图拖动定位,百度地图获取定位,实现拖动marker定位,返回具体的位置名...

    body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑"; ...

  8. android 百度地图 itemizedoverlay,[008] 百度地图API之ItemizedOverlay的使用(Android) .

    本篇文章主要介绍如何在百度地图上添加Overlay(即图层或覆盖物). Overlay简介 Overlay通常被译为"图层"或"覆盖物".那么对于地图而言,什么 ...

  9. android 百度地图 itemizedoverlay,[008] 百度地图API之ItemizedOverlay的使用(Android)

    本篇文章主要介绍如何在百度地图上添加Overlay(即图层或覆盖物). Overlay简介 Overlay通常被译为"图层"或"覆盖物".那么对于地图而言,什么 ...

  10. echarts地图api series_百度地图2.0离线版与echarts结合

    由于客户需求,之前使用的json形式的可钻取型地图被放弃了,要好看,没有网-,于是开启了打地鼠(bug)模式,总结如下: 网上搜索,百度离线地图资料很有限啊,可以用的几个要么年代久远,要么不能满足需求 ...

最新文章

  1. Nagios的安装和基本配置(三:Nagios-Client的安装)
  2. 快学Scala-第八章 继承
  3. CTF-练习平台-WEB之 签到题
  4. 希尔伯特曲线 java_Java中空间填充Hilbert曲线的递推算法
  5. javaweb学习总结九(xml解析以及调整JVM内存大小)
  6. IEEE1459功率理论计算方法
  7. 二进制 正数 负数 源码反码补码
  8. Java多线程学习二十五:阻塞和非阻塞队列的并发安全原理||如何选择适合自己的阻塞队列?
  9. wcf服务契约代理链
  10. 利用阿里云LAMP环境搭建搭建wiki知识库
  11. spring 的bean 作用域
  12. Helix QAC所提供的四种抑制方式
  13. python开发抢票软件_python自动抢票神器
  14. 对权力说真话:CEO萨蒂亚•纳德拉与微软的三两事
  15. Oracle中和计算总工资,Oracle求部门员工工资占总工资的比率
  16. 阳光直射对计算机有影响吗,办公电脑需要注意的风水
  17. linux中如何安装windows
  18. Java处理Word, Excel, PDF文档的4种开源系统的代码例子
  19. 【单片机】单片机课程设计(测温打铃)附完整代码和电路图
  20. 知识管理与竞争情报的联系

热门文章

  1. android手机浏览器测评,九款手机浏览器评测总结
  2. 【其他】微信双开、多开的几种方法
  3. PS系列之 -- 用通道抠图
  4. cmd命令行查看wifi密码
  5. Ps 初学者教程「68」如何创建海报?
  6. selenium测试框架快速搭建(ui自动化测试)
  7. 团队管理之绩效考核(OKR、KPI)
  8. field方法的用法
  9. python3读取dbf文件_python下用dbfread操作DBF文件
  10. PayPal注册和认证说明,招商银行信用卡和牡丹国际借记卡