我做的这个项目接触到了地图,有地图就有导航(后面会详细讲解百度地图使用方法)。关于导航百度地图里面有导航的API,但是我觉得自己嵌入的话很麻烦,就是用了其他程序来完成导航。
我这边默认检测的地图APP只有苹果地图、百度地图、高德地图。
检测手机内是否安装百度app,返回布尔类型
URL Schemes:baidumap://
Schemes,表示的是一个 URL 中的一个位置——最初始的位置,即://之前的那段字符。比如http://www.apple.com这个网址的Schemes是http
[[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"baidumap://"]]
这里插入一个小细节,在IOS9之后,苹果进一步完善了安全机制,必须在plist里面设置url scheme白名单,不然无法打开对应的应用
info.plist我这里并没有添加系统地图哦
手机内未安装百度地图客户端将不会显示在UIAlertController内(苹果地图、高德地图同理)
//百度地图
UIAlertAction *baiDUMap;
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
baiDUMap = [UIAlertActionactionWithTitle:@"百度地图"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*_Nonnullaction) {
//CLLocationCoordinate2D start_loc = CLLocationCoordinate2DMake(30.99957127410806,105.8939575078758);
_mapAppName=@"百度地图";
[selfalertTextfield];
}];
[alertControlleraddAction:baiDUMap];
}
UIAlertController全部代码:
#pragma弹出alertController
-(void)alertChangeMapAppView{
UIAlertController*alertController = [[UIAlertControlleralertControllerWithTitle:@"检测到适合的地图软件"message:@"推荐使用高德地图"preferredStyle:UIAlertControllerStyleActionSheet]init];
UIAlertAction*cameraAction = [UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancelhandler:^(UIAlertAction*action) {
}];
UIAlertAction*iPhoneMapAction = [UIAlertActionactionWithTitle:@"苹果地图"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*action) {
_mapAppName=@"苹果地图";
//NSString *oreillyAddress = @"成都市青羊区天府广场";//测试使用中文也可以找到经纬度具体的可以多尝试看看~
[selfalertTextfield];
}];
//百度地图
UIAlertAction*baiDUMap;
if([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"baidumap://"]]) {
baiDUMap = [UIAlertActionactionWithTitle:@"百度地图"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*_Nonnullaction) {
//CLLocationCoordinate2D start_loc = CLLocationCoordinate2DMake(30.99957127410806,105.8939575078758);
_mapAppName=@"百度地图";
[selfalertTextfield];
}];
[alertControlleraddAction:baiDUMap];
}
//高德地图
UIAlertAction*gaoDeDUMap;
if([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"iosamap://"]]) {
gaoDeDUMap = [UIAlertActionactionWithTitle:@"高德地图"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*_Nonnullaction) {
_mapAppName=@"高德地图";
[selfalertTextfield];
}];
[alertControlleraddAction:gaoDeDUMap];
}
[alertControlleraddAction:cameraAction];
[alertControlleraddAction:iPhoneMapAction];
[selfpresentViewController:alertControlleranimated:YEScompletion:nil];
}
选择地图APP后弹出输入框,让用户键入终点地址
这里就不贴全部代码了,只说怎么将中文地址转位经纬度吧
//将中文地点转换为坐标系
//起点
CLGeocoder *myGeocoder = [[CLGeocoder alloc]init];
[myGeocodergeocode AddressString:@“成都市青羊区天府广场” completionHandler:^(NSArray*placemarks,NSError*error) {
//CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];
_endPlacemark= [placemarksobjectAtIndex:0];//获取终点坐标
if([placemarkscount] >0&& error ==nil)
{
if([_mapAppNameisEqualToString:@"苹果地图"]) {
[selfopenAppleMap];
}elseif([_mapAppNameisEqualToString:@"百度地图"]){
[selfopenBaiDuMap];
}elseif([_mapAppNameisEqualToString:@"高德地图"]){
[selfopenGaoDeMap];
}
}
elseif([placemarkscount] ==0&& error ==nil)
{
NSLog(@"Found no placemarks.");
}
elseif(error !=nil)
{
NSLog(@"An error occurred = %@", error);
}
}];
打开百度地图
#pragma打开百度地图
-(void)openBaiDuMap{
//CLLocationCoordinate2D end_loc = CLLocationCoordinate2DMake(_endPlacemark.location.coordinate.latitude,_endPlacemark.location.coordinate.longitude);
NSString*urlString = [[NSStringstringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=%@&mode=driving&coord_type=bd09ll",_endPlacemark.location.coordinate.latitude,_endPlacemark.location.coordinate.longitude,_end_textfield.text]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];
}
打开高德地图
#pragma打开高德地图
-(void)openGaoDeMap{
//CLLocationCoordinate2D end_loc = CLLocationCoordinate2DMake(_endPlacemark.location.coordinate.latitude,_endPlacemark.location.coordinate.longitude);
NSString*urlString = [[NSStringstringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=%@&lat=%f&lon=%f&dev=0&style=2",@"公务用车",@"GongWuYongChe",_endPlacemark.location.coordinate.latitude,_endPlacemark.location.coordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];
}
网友评论