GPS经纬度及谷歌地图坐标转换为百度地图坐标,解决地图显示经纬度的偏移问题
2013-07-30 22:42
781 查看
最近做项目中遇到的一个问题,即测量得到的经纬度值在百度地图上出现了偏移,是所有经纬度点整体的偏移,上网搜了,得知如下的情况:
国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。国际经纬度坐标标准为WGS-84,国内必须至少使用国家测绘局制定的GCJ-02对地理位置进行首次加密。百度地图在此基础上,进行了BD-09二次加密措施,因此百度地图对外接口的坐标系并不是GPS采集的真实经纬度,而是有较大偏移。(GCJ-02是由中国国家测绘局制订的地理信息系统的坐标系统。它是一种对经纬度数据的加密算法,即加入随机的偏差。)
百度提供了转换的http接口:http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=116.397428&y=39.90923&callback=BMap.Convertor.cbk_759
返回结果坐标是通过base64加密的。这个转换算法百度是不公开的,而且百度也没有提供百度坐标转成GPS坐标功能。
这里是一个处理转换的main函数GpsToBaidu.java:(需要引入base64的包和json的一些包,链接在下方)
json相关jar包:json相关jar包下载
javabase64的jar包:javabase64jar包下载
国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。国际经纬度坐标标准为WGS-84,国内必须至少使用国家测绘局制定的GCJ-02对地理位置进行首次加密。百度地图在此基础上,进行了BD-09二次加密措施,因此百度地图对外接口的坐标系并不是GPS采集的真实经纬度,而是有较大偏移。(GCJ-02是由中国国家测绘局制订的地理信息系统的坐标系统。它是一种对经纬度数据的加密算法,即加入随机的偏差。)
百度提供了转换的http接口:http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=116.397428&y=39.90923&callback=BMap.Convertor.cbk_759
返回结果坐标是通过base64加密的。这个转换算法百度是不公开的,而且百度也没有提供百度坐标转成GPS坐标功能。
这里是一个处理转换的main函数GpsToBaidu.java:(需要引入base64的包和json的一些包,链接在下方)
json相关jar包:json相关jar包下载
javabase64的jar包:javabase64jar包下载
public class GpsToBaiDu { public static void main(String[] args) { // 转换前的GPS坐标 double x = 116.350241303468; double y = 39.960621618134; // google 坐标转百度链接 // //http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x=116.32715863448607&y=39.990912172420714&callback=BMap.Convertor.cbk_3694 // gps坐标的type=0 // google坐标的type=2 // baidu坐标的type=4 String path = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=" + x + "+&y=" + y + "&callback=BMap.Convertor.cbk_7594"; try { // 使用http请求获取转换结果 URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5 * 1000); InputStream inStream = conn.getInputStream(); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = inStream.read(buffer)) != -1) { outStream.write(buffer, 0, len); } // 得到返回的结果 String res = outStream.toString(); System.out.println(res); // 处理结果 if (res.indexOf("(") > 0 && res.indexOf(")") > 0) { String str = res.substring(res.indexOf("(") + 1, res.indexOf(")")); String err = res.substring(res.indexOf("error") + 7, res.indexOf("error") + 8); if ("0".equals(err)) { JSONObject js = JSONObject.fromObject(str); // 编码转换 String x1 = new String(Base64.decode(js.getString("x"))); String y1 = new String(Base64.decode(js.getString("y"))); System.out.println(x1 + " " + y1); } } } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- 地图经纬度偏移解决办法:GPS纠偏数据库纠偏,经纬度纠偏问题
- Android移动开发-通过自定义算法代码来纠偏地图由GPS定位到的经纬度在地图上显示或解析位置时出现偏移的问题
- HTML5 调用 GPSAPI 获取当前位置的坐标 显示在地图上(有包括百度地图与谷歌地图)
- 解决Android使用百度定位坐标显示到地图上偏移过大问题
- 度分 格式 转换 GPS 经纬度定义、经纬度格式、GDAL中地理坐标转换及地理坐标屏幕显示
- 【转】TB(TerraBuilder)转换日志:解决影像数据坐标转换后,在Skyline平台不能显示的问题
- Google地图百度地图GPS经纬度偏移转换(JAVA)
- iOS 使用百度地图地图画成功了,但是没有图层显示问题解决。
- (百度、谷歌)地图经纬度gps偏移解决办法:gps纠偏数据库纠偏
- 百度地图多个兴趣点(经纬度、坐标点)需要同时显示在地图上,如何设置自动缩放等级
- Echarts结合百度地图绘制散点图,toolpit显示位置错位偏移问题解决
- [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
- 百度地图经纬度转换+反地址解析+显示可视区域内标注点+地图自动刷新+标注的聚合
- (百度、谷歌)地图经纬度gps偏移解决办法:gps纠偏数据库纠偏
- 将GPS坐标转换成百度地图坐标,将baidu 经纬度 转换为google经纬度
- 关于 android百度地图 调用 地理位置 经纬度坐标,只调用一次的解决方法,通知栏不总是 搜索 GPS 。。。
- 百度地图、高德地图、谷歌地图 地图以及定位 签名后定位不成功,地图不显示问题
- 转 Google地图百度地图GPS经纬度偏移转换(JAVA) 转
- Google地图百度地图GPS经纬度偏移转换(JAVA)
- 百度地图自定义坐标标识覆盖物,随地图缩放偏移解决办法