我做的這個項目接觸到了地圖,有地圖就有導(dǎo)航(后面會詳細(xì)講解百度地圖使用方法)。關(guān)于導(dǎo)航百度地圖里面有導(dǎo)航的API瞳收,但是我覺得自己嵌入的話很麻煩倍靡,就是用了其他程序來完成導(dǎo)航猴伶。
我這邊默認(rèn)檢測的地圖APP只有蘋果地圖、百度地圖塌西、高德地圖他挎。
檢測手機(jī)內(nèi)是否安裝百度app,返回布爾類型
URL Schemes:baidumap://
Schemes捡需,表示的是一個 URL 中的一個位置——最初始的位置办桨,即://之前的那段字符。比如http://www.apple.com這個網(wǎng)址的Schemes是http
[[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"baidumap://"]]
這里插入一個小細(xì)節(jié)站辉,在IOS9之后呢撞,蘋果進(jìn)一步完善了安全機(jī)制贸街,必須在plist里面設(shè)置url scheme白名單,不然無法打開對應(yīng)的應(yīng)用
我這里并沒有添加系統(tǒng)地圖哦
手機(jī)內(nèi)未安裝百度地圖客戶端將不會顯示在UIAlertController內(nèi)(蘋果地圖狸相、高德地圖同理)
//百度地圖
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 = @"成都市青羊區(qū)天府廣場";//測試使用中文也可以找到經(jīng)緯度具體的可以多嘗試看看~
[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后彈出輸入框薛匪,讓用戶鍵入終點地址
這里就不貼全部代碼了,只說怎么將中文地址轉(zhuǎn)位經(jīng)緯度吧
//將中文地點轉(zhuǎn)換為坐標(biāo)系
//起點
CLGeocoder *myGeocoder = [[CLGeocoder alloc]init];
[myGeocodergeocode AddressString:@“成都市青羊區(qū)天府廣場” completionHandler:^(NSArray*placemarks,NSError*error) {
//CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];
_endPlacemark= [placemarksobjectAtIndex:0];//獲取終點坐標(biāo)
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",@"公務(wù)用車",@"GongWuYongChe",_endPlacemark.location.coordinate.latitude,_endPlacemark.location.coordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];
}