导航

实现导航有3种方法
  1. 将需要导航的位置丢给系统自带的地图APP进行导航
  2. 发送网络请求到公司服务器获取导航数据然后自己手动绘制导航(一般公司是不会这样做的)
  3. 利用三方SDK实现导航(百度)
首先介绍系统自带的app导航,这里用到的类是:MKMapItem

主要方法是:

+ (void)opnenMapsWithItems:(NSArray *) launchOptions:(NSDictionary *);

具体实现

[self.geocoder geocodeAddressString:startStr completionHandler:^(NSArray *placemarks, NSError *error) {
    //获取出发点
    if(!placemarks.count) return;
    CLPlacemark *startclpm = [placemarks firstObject];
    [self.geocoder geocodeAddressString:endStr completionHandler:^(NSArray *placemarks, NSError *error) {
        // 获取目的地
        if(!placemarks.count) return;
        CLPlacemark *endclpm = [placemarks firstObject];
            //设置item参数
            MKPlacemark *startpm = [[MKPlacemark alloc] initWithPlacemark:startclpm];
            MKMapItem *startItem = [[MKMapItem alloc] initWithPlacemark:startpm];
            MKPlacemark *endpm = [[MKPlacemark alloc] initWithPlacemark:endclpm];
            MKMapItem *endItem = [[MKMapItem alloc] initWithPlacemark:endpm];
            NSArray *items = @[startItem, endItem];
            //设置launchOptions参数
            NSMutableDictionary *md = [NSMutableDictionary dictionary];
            md[MKLaunchOptionsDirectionsModeKey] = MKLaunchOptionsDirectionsModeDriving;//导航
            md[MKLaunchOptionsMapTypeKey] = @(MKMapTypeHybrid);//混合

            [MKMapItem openMapsWithItems:items launchOptions:md];
    }

    ]

}]
获取导航路线信息

需要用到的对象是:MKDirections
具体实现:

MKDirectionRequest *request = [MKDirectionsRequest alloc] init];
request.source = startItem; //这里的item都是上面所得到的MKMapItem对象
request.destination = endItem;
// 创建MKDirections对象
MKdirections *directions = [MKDirections alloc] initWithRequest:request];

[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
        NSArray *routes = response.routes;
        for (MKRoute *route in routes) {
            //每条路线
            NSArray *steps = route.steps;
            for (MKRouteStep *step in steps) {
                //每个步骤
            }

        }

}]
绘制导航路线(本质:往地图上添加覆盖)

用到的方法是 addoverlay:
然后就会调用代理方法
话不多说,直接上代码

//在之前代码的基础上
[self.mapView addOverlay:route.polyline];

//然后再外面监听代理方法
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
    MKPolylineRenderer *line = [[MKPolylineRenderer alloc] initWithPolyline:overlay];
    line.lineWidth = 5; // 路线的宽度
    line.strokeColor = [UIColor redColor];// 路线的颜色

    // 返回路线
    return line;
}

集成百度地图

讲真,百度地图,直接看百度的官方介绍就可以了,答题方法也差不多,不过百度最好用的还是poi检索,可以搜索周边的吃住行等等。在这里我做简单的介绍吧

  1. 首先你他要称为百度的开发者
  2. 然后就可以创建应用,记住,有用的是key和你填写的安全码(具体怎么操作,百度会傻瓜式的教你)
  3. 然后就是百度的SDK下载,以及配置其环境。百度有官方文档http://lbsyun.baidu.com/index.php?title=iossdk/guide/buildproject 详情看官方,我就不翻译,免得出错
  4. 还是那句话,具体怎么应用,百度有demo以及文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值