实现导航有3种方法
- 将需要导航的位置丢给系统自带的地图APP进行导航
- 发送网络请求到公司服务器获取导航数据然后自己手动绘制导航(一般公司是不会这样做的)
- 利用三方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检索,可以搜索周边的吃住行等等。在这里我做简单的介绍吧
- 首先你他要称为百度的开发者
- 然后就可以创建应用,记住,有用的是key和你填写的安全码(具体怎么操作,百度会傻瓜式的教你)
- 然后就是百度的SDK下载,以及配置其环境。百度有官方文档http://lbsyun.baidu.com/index.php?title=iossdk/guide/buildproject 详情看官方,我就不翻译,免得出错
- 还是那句话,具体怎么应用,百度有demo以及文档