因为项目需求,要在应用内部调用百度地图API进行路线规划,之后再调用手机自带的地图进行导航,但是将从百度地图获取到的经纬度传过去之后就出现了坐标偏移现象,然后一直在网上查询如何把百度地图的坐标转换成火星坐标,看到比较靠谱的就是
http://blog.youkuaiyun.com/xiaobaismiley/article/details/3757630 这篇文章,
还有一种我觉得也比较靠谱的是百度文库中的
http://wenku.baidu.com/link?url=4TQ-ExLBlfo63SNMQMnd_D2FXLGuZcHJXyEJ4n8HdwnOjDrE6cCSxQrh8iVueANZ5supfp6coXGX2EKMOXjtW-CVxB56gTN-NtSgMpvlGuO
我没有试过这种方法,因为我觉得为了一个偏移量还要下那么大的数据库划不来,但是感兴趣的盆友可以试一下。
第一种方法比较容易,但是这样做出来之后和百度API中的
BDLocation bdLocation = new BDLocation();
bdLocation.setLatitude(endLng.latitude);
bdLocation.setLongitude(endLng.longitude);
BDLocation location = mLocClient.getBDLocationInCoorType(bdLocation,BDLocation.BDLOCATION_BD09LL_TO_GCJ02);
这样的实现方法得出的坐标是差不多的,偏移量比较大,所以我想了一个比较笨的办法,自己亲自测试的,这些方法中偏移量最小的方法,就是花了一个下午的时间,根据自己所剩无几的地理知识硬生生的把偏移量给调出来了,其实特别简单的,就是在得到的经纬度上做个加减,虽然不是100%准确 ,但是还是可以解决燃眉之急。 好了,废话不多说了,直接上代码:
BDLocation bdLocation = new BDLocation();
bdLocation.setLatitude(endLng.latitude);
bdLocation.setLongitude(endLng.longitude);
BDLocation location = mLocClient.getBDLocationInCoorType(bdLocation, BDLocation.BDLOCATION_BD09LL_TO_GCJ02);
StringBuffer sb = new StringBuffer();
sb.append("geo:").append(location.getLatitude() + 0.003).append(",")
.append(location.getLongitude() - 0.0011).append("?").append("q=").append(address);
Uri mUri = Uri.parse(sb.toString());
Intent mIntent = new Intent(Intent.ACTION_VIEW, mUri);
try {
startActivity(mIntent);
} catch (ActivityNotFoundException e) {
showToast(getString(R.string.no_map_application));
}
用百度地图、高德地图和腾讯地图(用这种方法调腾讯地图好像只认传过去的地址,和坐标好像没什么关系)测试了几个坐标,偏移很小,虽然比较笨,但是暂时性的解决了项目中的问题,希望日后有大神能帮忙彻底的解决下这个问题。