您的位置:首页 > 其它

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包下载

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();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐