GPS经纬度如何转百度经纬度?
本来在Service中直接GPS定位的,发现定位数据在百度地图上偏移比较严重啊,后来才知道百度地图经纬度经过加密了。
在网上搜到可以将GPS经纬度转百度经纬度的
GeoPoint p = new GeoPoint(x, y);
GeoPoint p2 = CoordinateConvert.bundleDecode(CoordinateConvert.fromWgs84ToBaidu(p));
转出来的数据也不是很靠谱啊。
有没有哪位知道手机GPS定位经纬度转百度经纬度的正确方法啊?
或者能否在Service中直接用百度直接定位呢?
------解决方案--------------------
引用:这个好解决,你只要用百度地图定下位,获取到经纬度,
然后用gps定下位,获取到经纬度,作一下对比,算出两者各自差值, 然后用gps获取的经纬度加上差值即可
亲 这个值不是固定的、、、随机的。。。
------解决方案--------------------
不。。。 这是有规律的 。。。。。。。。。。。。。。。。。。信不信由你,反正我信了
我之前是用 android api 获取经纬度 加上差值 精确的显示在百度地图上
试一试,
------解决方案--------------------
这个算法是国家秘密,转换需要在线连到百度进行,下面是我的苦心研究结果,快给分吧:
protected void runTest() throws Throwable {
try {
BaiduLocation bl = new BaiduLocation();
bl.gpsx = 120;//经度
bl.gpsy = 30;//纬度
GetBaiduLocation(bl);
if(bl.ok) {
int baidux = (int)(bl.baidux*1E6);
int baiduy = (int)(bl.baiduy*1E6);
// 转换成功,这个坐标是百度专用的
}
else {
/// 转换失败
}
}
catch(Exception ex) {
}
}
class BaiduLocation {
public float gpsx, gpsy;
public float baidux, baiduy;
public boolean ok = false;
}
public static String GetBaiduLocation(float x, float y) throws MalformedURLException, IOException {
String url = String.format("http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=%f&y=%f", x, y);
HttpURLConnection urlConnection = (HttpURLConnection)(new URL(url).openConnection());
urlConnection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String lines = reader.readLine();
reader.close();
urlConnection.disconnect();
return lines;
}
public static boolean GetBaiduLocation(BaiduLocation bl) {
try {
bl.ok = false;
String res = GetBaiduLocation(bl.gpsx, bl.gpsy);
if(res.startsWith("{") && res.endsWith("}")) {
res = res.substring(1, res.length() - 2).replace("\"", "");
String[] lines = res.split(",");
for(String line : lines) {
String[] items = line.split(":");
if(items.length == 2) {
if("error".equals(items[0])) {
bl.ok = "0".equals(items[1]);
}
if("x".equals(items[0])) {
bl.baidux = ConvertBase64(items[1]);
}
if("y".equals(items[0])) {
bl.baiduy = ConvertBase64(items[1]);
}
}
}
}
} catch (Exception e) {
bl.ok = false;
}
return bl.ok;
}
private static float ConvertBase64(String str) {
byte[] bs = Base64.decode(str);
return Float.valueOf(new String(bs));
}