[关闭]
@SanMao 2015-08-06T00:28:04.000000Z 字数 1952 阅读 1258

导航/画线

定位/地图


调用系统自带地图导航

  1. // 获取地点的MKMapItem
  2. MKMapItem *startItem = [MKMapItem mapItemForCurrentLocation];
  1. // 拿到用户的输入
  2. NSString *address = self.textField.text;
  3. // 进行地理编码
  4. CLGeocoder *geocoorder = [[CLGeocoder alloc] init];
  5. [geocoorder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
  6. if (placemarks.count == 0 || error) return ;
  7. // 假设取出搜索后的数组中的第一个元素
  8. CLPlacemark *pm = [placemarks firstObject];
  9. // 导航需要起点MKMapItem和终点的MKMapItem
  10. MKPlacemark *mkpm = [[MKPlacemark alloc] initWithPlacemark:pm];
  11. // 获取终点的MKMapItem
  12. MKMapItem *destilationItem = [[MKMapItem alloc] initWithPlacemark:mkpm];
  1. // 包装起始点和目的地的item
  2. NSArray *items = @[sourceItem,destilationitem];
  3. // 包装options,(地图类型,前往方式,交通状况)
  4. NSDictionary *dict =@{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving,
  5. MKLaunchOptionsMapTypeKey : @(MKMapTypeStandard),
  6. MKLaunchOptionsShowsTrafficKey : @YES
  7. };
  8. // 打开系统地图开始导航
  9. [MKMapItem openMapsWithItems:items launchOptions:dict];

画线

  1. // 创建线路请求对象
  2. MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
  1. // 获取起点
  2. request.source = sourceItem;
  3. // 获取终点
  4. request.destination = destilationItem;
  1. // 创建线路对象
  2. MKDirections *direction = [[MKDirections alloc] initWithRequest:request];
  1. // 计算所有线路
  2. [direction calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
  3. if (response.routes.count == 0 || error) return ;
  4. // 遍历
  5. for (MKRoute *route in response.routes) {
  6. [self.mapView addOverlay:route.polyline];
  7. }
  8. }];
  1. #pragma mark - 渲染线段
  2. -(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(MKPolyline *) overlay{
  3. // 创建线段的渲染
  4. MKPolylineRenderer *render = [[MKPolylineRenderer alloc] initWithPolyline:overlay];
  5. // 设置线宽和颜色
  6. render.strokeColor = [UIColor blueColor];
  7. render.lineWidth = 5;
  8. return render;
  9. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注