百度地图WGS4转换真实GPS及逆向转换

http://hunray.iteye.com/blog/1404129


http://www.eoeandroid.com/forum.php?mod=viewthread&tid=185177


最近项目中碰见并解决了一个的问题 (内牛满面啊...)
主要需求是这样的:
在百度地图上仍然展示百度地图的坐标,但是提交数据是要上传精确的gps坐标 (客户那边是用google地图做的但客户要求android客户端用百度地图...) 

众所周知在我们的天朝GPS是不可能公开让所有人都知道的,所以百度google地图都会有一定的偏移量 ,只有加上偏移量之后 ,国家测绘地理信息什么协会,才会同意商用或者提供API接口

我们用百度地图时,默认获取的都是baidu09的百度坐标,如果想获取GPS就得转换了(当然也有别的办法,直接使用WGS坐标来定位,当然,显示的时候仍然要转换一下,转换方法下边有代码,自己参考)

昨天弄了一下午  今天仔细一行一行的调试 最终终于找到了这个bug  内牛满面啊。。。
没有文档上不起啊。。。
上代码 

?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
*
*<font color="\"#ff0000\""> </font><font color="\"#ff00\"">特别是这里x一定要传lon,y值传lat 传反了后果自负(我就是在这里栽跟头的 谨记谨记)</font>
*/
String bmapBase64Encode = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4<font color=" \"#ff0000\" ">&x=%1$s&y=%2$s" </font>;
/**
* 转换百度地图坐标
* @param baiduLat
* 百度地图坐标 纬度
* @param baiduLon
* 百度地图坐标 经度
* @throws IOException
* @throws HWNetException
* @throws JSONException
*/
private void tran( double baiduLat, double baiduLon) throws IOException,
HWNetException, JSONException {
//就一个普通个的url请求封装成Client而已
AndroidClient client = new AndroidClient();
//获取请求后数据
String json = client.doGetWithString(String.format(bmapBase64Encode,String.valueOf(baiduLon),String.valueOf(baiduLat)));
//得到JSON对象
JSONObject object = new JSONObject(json);
System.out.println(object);
Double lon1 = Double.parseDouble( new String(Base64.decodeBase64(object.getString( "x" ).getBytes())));
Double lat1 = Double.parseDouble( new String(Base64.decodeBase64(object.getString( "y" ).getBytes())));
System.out.println( "转换出来的百度坐标经度:" +lon1+ "纬度:" +lat1);
//这里的就是GPS坐标 经过下面算法转换 基本上合真实的GPS坐标相差无几  
super .gpsLat = baiduLat* 2 -lat1;
super .gpsLon = baiduLon* 2 -lon1;
System.out.println( "算法转算后的百度坐标经度:" +gpsLon+ "纬度:" +gpsLat);
}
  
知道GPS(WGS84)坐标转换百度地图坐标只需一句话
?
代码片段,双击复制
01
02
CoordinateConvert.bundleDecode(CoordinateConvert.fromWgs84ToBaidu(
new GeoPoint(( int )(gpsLat*1E6), ( int )(gpsLon*1E6))))

红色部分 血的教训啊。。。  
mark一下  分享一下 顺便总结一下 ... 


——————————————————————————————


百度地图API中,有GPS坐标转百度坐标的功能 
http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&0_6#0&6 

http接口是:http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=116.397428&y=39.90923&callback=BMap.Convertor.cbk_7594 
返回结果坐标是通过base64加密的。 
这个转换算法百度是不会公开的,而且百度也没有提供百度坐标转成GPS坐标功能,这里我用了取巧的办法。 

百度坐标和GPS坐标转换在很近的距离时偏差非常接近。 
假设你有百度坐标:x1=116.397428,y1=39.90923 
把这个坐标当成GPS坐标,通过接口获得他的百度坐标:x2=116.41004950566,y2=39.916979519873 

通过计算就可以得到GPS的坐标: 
x = 2*x1-x2,y = 2*y1-y2 
x=116.38480649434001 
y=39.901480480127 

在http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&0_6#0&6 将此坐标输入GPS数据项中得到的结果是:116.39743826208,39.909194650838 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值