绘制导航路线

2017-11-23  本文已影响32人  翻这个墙

绘制导航路线

1. 理论支持

  1. 路线也是一个覆盖层
  2. 在地图上操作覆盖层,其实操作的是覆盖层的数据模型
    1. 添加覆盖层:在地图上添加覆盖层数据模型
    2. 删除覆盖层:在地图上移除覆盖层数据模型

2. 添加导航路线到地图

  1. 获取几何路线的数据模型 (id <MKOverlay>)overlay

  2. 地图添加覆盖层(几何路线也是一个覆盖层), 直接添加覆盖层数据模型

    [self.mapView addOverlay:overlay];
    
  3. 设置地图代理, 代理遵循协议 MKMapViewDelegate

  4. 实现地图添加覆盖层数据模型时, 回调的代理方法; 通过此方法, 返回对应的渲染图层

    - (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. 添加圆形覆盖层到地图

  1. 创建圆形区域覆盖层的数据模型

    MKCircle *circle = [MKCircle circleWithCenterCoordinate:self.mapView.centerCoordinate radius:1000000];
    
  2. 添加覆盖层数据模型

    [self.mapView addOverlay:circle];
    
  3. 实现代理方法

    - (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的原则, 我们操作覆盖层, 就是操作覆盖层数据模型; 然后地图, 会调用其对应的代理方法, 获取对应的覆盖层渲染层;
            类记不住没关系, 主要记住大致思路就可以.

----

上一篇下一篇

猜你喜欢

热点阅读