IOS开发之地图导航

一、问题描述

  现在很多的APP 都开始引入了地图和定位功能,包括一些餐饮业,团购等。他们都过定位和地图来让用户更加方便的根据自己的位置找到合适的目标,也就是说,现在地图定位已经不再是导航工具类,地图工具类所特有的了,本文将着重介绍下如何自行导航。运行效果图如下:

二、实现步骤

  <一>通过故事版添加地图界面,以及导航按钮(由于操作过于简单本文不便列出)

  <二>要想完成导航必须要了解起始的位置,不然无法完成导航,本文采用两个特殊的地名作为例子,实际开发中可以根据网络定位当前的位置,这里我们引入类CLGeocoder来进行地理编码,通过地理编码来获取我们的有用信息。

// 两地名称,代码如下
NSString * sourceName=@"新疆";
NSString * destinationName=@"烟台";
[self.geocoder geocodeAddressString:sourceName completionHandler:^(NSArray *sourcemarks, NSError *error) {
        [self.geocoder geocodeAddressString:destinationName completionHandler:^(NSArray *destmarks, NSError *error) {
CLPlacemark * sourceMark=[sourcemarks firstObject];
 CLPlacemark * toMark=[destmarks firstObject];
 }];
}];

  <三>添加起始地和目的地大头针并将自定义大头针代码写在上面地理编码完成之后的代码块里面

  增加自定义大头针

            JRAnnotation * source=[[JRAnnotation alloc] init];
            source.title=sourceName;
            source.subtitle=sourceMark.name;  source.coordinate=sourceMark.location.coordinate;
            [self.mapView addAnnotation:source];
          JRAnnotation * dest=[[JRAnnotation alloc] init];
            dest.title=destinationName;
            dest.subtitle=toMark.name;                              dest.coordinate=toMark.location.coordinate;
[self.mapView addAnnotation:dest];

  效果图:

  <四>进行导航之前的划线,此代码我抽取了个方法,仍然是要在上面的地理编码完成块里面调用

#pragma mark  - 导航之前划线

- (void)_mapGuilderFromMark:(CLPlacemark * ) sourceMark toMark:(CLPlacemark *) destMark{

   //1 定义方向请求
    MKDirectionsRequest * request=[[MKDirectionsRequest alloc] init];
   //2 定义开始和结束位置
    //1> 开始
    MKPlacemark *sourcemkpm=[[MKPlacemark alloc] initWithPlacemark:sourceMark];
    MKMapItem * sourceItem=[[MKMapItem alloc] initWithPlacemark:sourcemkpm];
    request.source=sourceItem;
    self.sourceItem=sourceItem;
    //2> 结束
    MKPlacemark *destmkpm=[[MKPlacemark alloc] initWithPlacemark:destMark];
    MKMapItem * destItem=[[MKMapItem alloc] initWithPlacemark:destmkpm];
    request.destination=destItem;
    self.destItem=destItem;
   //3 根据方向请求获取方向
    MKDirections *dirction=[[MKDirections alloc] initWithRequest:request];

   //4 计算路线模型
    [dirction calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
        if(error) return ;
        NSArray * routesArray=response.routes;
        for (MKRoute * root in routesArray) {
       //添加路线遮盖,传递路线遮盖模型
        [self.mapView addOverlay:root.polyline];
        }
    }];
}

  效果图:

  <五>调用苹果自带的地图进行导航,当点击导航按钮的时候调用

#pragma mark - 导航
- (IBAction)beginGuiding:(id)sender {
    //1 设置起始item
    NSArray * array=@[self.sourceItem,self.destItem];
    //2 设置导航模式,走路还是开车,以及是否显示路况
    NSDictionary * dic=@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsShowsTrafficKey:@YES};
    //3 打开苹果地图开始导航
    [MKMapItem openMapsWithItems:array launchOptions:dic];
}

  另外附两个渲染器代理方法

#pragma mark - mapViewDelegate
//返回遮盖渲染器
-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay{

MKPolylineRenderer * render=[[MKPolylineRenderer alloc]initWithPolyline:overlay];
    render.lineWidth=5;
    render.strokeColor=[UIColor blueColor];

    return render;
}

//返回大头针渲染器

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{

    static  NSString * identy=@"big";
    MKPinAnnotationView * pinView=(MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identy];
    if(pinView==nil){
        pinView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identy];
        pinView.canShowCallout=YES;//设置点击出明细
    }
 pinView.pinColor=MKPinAnnotationColorGreen;//设置大头针颜色
    return pinView;

}

  想要进一步了解的同学,可以点击查看源代码,亲自运行体验!

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

时间: 2024-10-07 21:05:43

IOS开发之地图导航的相关文章

iOS开发百度地图常见问题及解决办法

1.64bit模拟器不能正常工作 解决:请将Xcode5 的 Project -> Edit Active Target -> Build Settings -> Linking -> Other Linker Flags 中的"-ObjC"修改为"-all_load" 2.程序死在 _mapView = [[BMKMapView alloc] init]; 解决:很可能是由于没有在appDelegate里面初始化_mapManager 3.

iOS开发UI篇—导航控制器属性和基本使用

IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController *nav=[[UINavigationControlleralloc]init]; 2.设置导航控制器为window的根视图 self.window.rootViewController=nav; 3.添加 YYOneViewController  *one = [[YYOneViewContro

iOS开发之地图代理不起作用(提示vImage decode failed, falling back to CG path.)

项目中用到了地图相关的东西,就把以前的demo搬了出来,结果发现直接运行之前的demo没有问题,在xcode5下新建项目再把代码粘贴过来就会提示 May 5 11:36:21 infomedia-iPod-touch TestLocation[1465] <Error>: CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component c

IOS开发UI篇—导航控制器属性和基本使用 - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3768622.html IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) UINavigationController *nav=[[ UINavigationController alloc ] init ]; 2.设置导航控制器为window的根视图 self . window . rootViewController =nav

ios开发系统地图知识

现在很多社交.电商.团购应用都引入了地图和定位功能,地图功能不再是地图应用和导航应用所特有的.目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图开发. 一.Core Location定位使用 在iOS中通过Core Location框架进行定位操作.Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图开发要配合定位框架使用.在Core Location中主要包含了定位.地理编码(包括反编码)功能. 定位是一个很常用的功

iOS开发系列--地图与定位

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

iOS开发之地图-----01定位CoreLocation

1.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 2.在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发 Map Kit :用于地图展示 Core Location :用于地理定位 3.2个热门专业术语 LBS :Location Based Service SoLoMo :Social Local Mobile(索罗门) 2.经纬度 1.经纬度的各种定义 本初

转-iOS开发系列--地图与定位

来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用

iOS开发系列--地图与定位-ios8

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO