百度导航的一个坑

最近项目中需要用到百度导航,大家都觉的导入百度的导航SDK比较麻烦,就直接跳转到了百度导航。

在百度上找到了app调用百度导航的代码基本一样,如下:

NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",[info.dzwd doubleValue],[info.dzjd doubleValue]] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://map/"]])
 {
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
 }
 else
 {
       [[[UIAlertView alloc]initWithTitle:@"没有安装百度地图" message:@"" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil,nil] show];
 }

开始时百度地图定位坐标


百度导航的一个坑_第1张图片
百度定位坐标.PNG

开始导航,跳转到百度导航,会发现位置发生了漂移。


百度导航的一个坑_第2张图片
坐标漂移.PNG

是不是有点坑!!!反复查看了下贴代码人的注解,都说coord_type=gcj02这个都不要改。

查相关资料才知道,百度定位和百度导航使用的是不同的坐标系
gcj02:表示定位成功后返回国测局经纬度坐标系坐标;
bd09:表示定位成功后返回百度墨卡托坐标系坐标;
bd09ll:表示定位成功后返回百度经纬度坐标系坐标。
即gcj02就是告诉百度导航我们使用国测局的坐标表示,而我们定位到的坐标是bd09ll坐标,坑啊!!!!将coord_type=gcj02改为coord_type=bd09ll, 导航坐标成功显示,无漂移。

百度导航的一个坑_第3张图片
bd09ll坐标.PNG

总结:目前国内项目中多使用百度定位坐标,如果需要将百度定位坐标在百度导航上正确显示,需要将coord_type设置为bd09ll。

你可能感兴趣的:(百度导航的一个坑)