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

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

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

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

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

/**
*
*<font color="#00f000"> </font><font color="#00ff00">特别是这里x一定要传lon,y值传lat 传反了后果自负(我就是在这里栽跟头的 谨记谨记)</font>
*/
String bmapBase64Encode = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4<font color=" #00f000 ">&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)坐标转换百度地图坐标只需一句话

 

CoordinateConvert.bundleDecode(CoordinateConvert.fromWgs84ToBaidu(
new GeoPoint(( int )(gpsLat*1E6), ( int )(gpsLon*1E6))))
 

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

 

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

你可能感兴趣的:(百度地图WGS4转换真实GPS及逆向转换)