绘制导航路线
1. 理论支持
- 路线也是一个覆盖层
- 在地图上操作覆盖层,其实操作的是覆盖层的数据模型
1. 添加覆盖层:在地图上添加覆盖层数据模型
2. 删除覆盖层:在地图上移除覆盖层数据模型
2. 添加导航路线到地图
获取几何路线的数据模型 (id <MKOverlay>)overlay
-
地图添加覆盖层(几何路线也是一个覆盖层), 直接添加覆盖层数据模型
[self.mapView addOverlay:overlay];
设置地图代理, 代理遵循协议 MKMapViewDelegate
-
实现地图添加覆盖层数据模型时, 回调的代理方法; 通过此方法, 返回对应的渲染图层
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay { // 创建折线渲染对象 if ([overlay isKindOfClass:[MKPolyline class]]) { MKPolylineRenderer *lineRenderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay]; // 设置线宽 lineRenderer.lineWidth = 6; // 设置线颜色 lineRenderer.strokeColor = [UIColor redColor]; return lineRenderer; } }
3. 添加圆形覆盖层到地图
-
创建圆形区域覆盖层的数据模型
MKCircle *circle = [MKCircle circleWithCenterCoordinate:self.mapView.centerCoordinate radius:1000000];
-
添加覆盖层数据模型
[self.mapView addOverlay:circle];
-
实现代理方法
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay { // 创建圆形区域渲染对象 if ([overlay isKindOfClass:[MKCircle class]]) { MKCircleRenderer *circleRender = [[MKCircleRenderer alloc] initWithOverlay:overlay]; circleRender.fillColor = [UIColor cyanColor]; circleRender.alpha = 0.6; return circleRender; } return nil; }
### 4. 测试环境
1. 地图加载需要联网
2. XCode版本不限
3. iOS系统版本不限
### 5. 常见问题总结
1. 东西太多, 记不住?
只需要记得一个思想, 按照MVC的原则, 我们操作覆盖层, 就是操作覆盖层数据模型; 然后地图, 会调用其对应的代理方法, 获取对应的覆盖层渲染层;
类记不住没关系, 主要记住大致思路就可以.
----