文档章节

iOS原生地图开发指南再续——地图覆盖物的应用

珲少
 珲少
发布于 2015/05/16 09:53
字数 735
阅读 705
收藏 1

iOS原生地图开发指南再续——地图覆盖物的应用

一、引言

在前两篇博客中,将iOS系统的地图框架MapKit中地图的设置与应用以及关于添加大头针和自定义大头针的相关操作做了详细的介绍。链接如下:http://my.oschina.net/u/2340880/blog/415360http://my.oschina.net/u/2340880/blog/415441。这篇博客中将进一步讨论关于地图添加覆盖物的使用方法。

二、添加地图覆盖物的逻辑原理

地图覆盖物其实就是在地图上画一些东西,例如路径,范围等等。添加地图覆盖物的逻辑原理其实和添加大头针很相似。首先所有可以成为覆盖物的对象必须遵守MKOverlay这个协议,通过

- (void)addOverlay:(id <MKOverlay>)overlay;

将覆盖物添加在地图上,然后地图会调用代理方法

 

-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay;

对覆盖物进行绘制,我们可以在这个方法中设置覆盖物,例如线宽,颜色等,注意,必须实现这个方法,覆盖物才会显示。

1、添加折线覆盖物

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //初始化地图对象
    MKMapView * _mapView = [[MKMapView alloc]initWithFrame:self.view.frame];
    //设置地图
    _mapView.region=MKCoordinateRegionMake(CLLocationCoordinate2DMake(33.23, 113.122), MKCoordinateSpanMake(10, 10));
    //设置代理
    _mapView.delegate=self;
    //下面是C的语法,创建一个结构体数组
    CLLocationCoordinate2D *coor;
    coor = malloc(sizeof(CLLocationCoordinate2D)*5);
    for (int i=0; i<5; i++) {
        CLLocationCoordinate2D po = CLLocationCoordinate2DMake(33.23+i*0.01, 113.112);
        coor[i]=po;
    }
    //创建一个折线对象
    MKPolyline * line = [MKPolyline polylineWithCoordinates:coor count:5];
    [_mapView addOverlay:line];
    [self.view addSubview:_mapView];
}
//覆盖物绘制的代理
-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay{
    //折线覆盖物提供类
    MKPolylineRenderer * render = [[MKPolylineRenderer alloc]initWithPolyline:overlay];
    //设置线宽
    render.lineWidth=3;
    //设置颜色
    render.strokeColor=[UIColor redColor];
    return render;
}

效果如下:

2、添加圆形覆盖物

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    MKMapView * _mapView = [[MKMapView alloc]initWithFrame:self.view.frame];
    _mapView.region=MKCoordinateRegionMake(CLLocationCoordinate2DMake(33.23, 113.122), MKCoordinateSpanMake(10, 10));
    _mapView.delegate=self;
    //创建圆形覆盖物对象
    MKCircle * cirle = [MKCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(33.23, 113.122) radius:500];
    [_mapView addOverlay:cirle];
    [self.view addSubview:_mapView];
}
-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay{
    MKCircleRenderer * render=[[MKCircleRenderer alloc]initWithCircle:overlay];
    render.lineWidth=3;
    //填充颜色
    render.fillColor=[UIColor greenColor];
    //线条颜色
    render.strokeColor=[UIColor redColor];
    return render;
}

效果如下:

3、添加多边形覆盖物

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    MKMapView * _mapView = [[MKMapView alloc]initWithFrame:self.view.frame];
    _mapView.region=MKCoordinateRegionMake(CLLocationCoordinate2DMake(33.23, 113.122), MKCoordinateSpanMake(10, 10));
    _mapView.delegate=self;
    CLLocationCoordinate2D *coor;
    coor = malloc(sizeof(CLLocationCoordinate2D)*6);
    for (int i=0; i<5; i++) {
        CLLocationCoordinate2D po = CLLocationCoordinate2DMake(33.23+i*0.01, 113.112+((i/2==0)?0.01:-0.01));
        coor[i]=po;
    }
    coor[5]=CLLocationCoordinate2DMake(33.23, 113.112);
    MKPolygon * gon = [MKPolygon polygonWithCoordinates:coor count:6];
    [_mapView addOverlay:gon];
    [self.view addSubview:_mapView];
}
-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay{
    MKPolygonRenderer * render = [[MKPolygonRenderer alloc]initWithPolygon:overlay];
    render.lineWidth=3;
    render.strokeColor=[UIColor redColor];
    return render;
}

效果如下:

 

疏漏之处 欢迎指正

学习使用 欢迎转载

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

© 著作权归作者所有

珲少

珲少

粉丝 886
博文 394
码字总数 475753
作品 0
上海
程序员
私信 提问
加载中

评论(1)

兲烎
为什么我的rendererForOverlay这个方法不走
iOS原生地图开发指南续——大头针与自定义标注

iOS原生地图开发指南续——大头针与自定义标注 在上一篇博客中http://my.oschina.net/u/2340880/blog/415360系统总结了iOS原生地图框架MapKit中主体地图的设置与应用。这篇是上一篇的一个后续...

珲少
2015/05/15
1K
2
iOS原生地图开发进阶——使用导航和附近兴趣点检索

iOS原生地图开发进阶——使用导航和附近兴趣点检索 iOS中的mapKit框架对国际化的支持非常出色。在前些篇博客中,对这个地图框架的基础用法和标注与覆盖物的添加进行了详细的介绍,这篇博客将...

珲少
2015/05/18
1K
0
SegmentFault D-Day 2015 北京:iOS 站

SegmentFault D-Day 介绍 SegmentFault D-Day,是由国内最前沿的开发者社区 SegmentFault 主办的技术沙⻰,于2014年正式启动。2015年上半年D-Day已在北、上、广、深、杭等城市成功举办9场,活...

文洁洁洁
2015/11/26
245
0
SegmentFault D-Day 2015 北京:iOS 站

SegmentFault D-Day 介绍 SegmentFault D-Day,是由国内最前沿的开发者社区 SegmentFault 主办的技术沙⻰,于2014年正式启动。2015年上半年D-Day已在北、上、广、深、杭等城市成功举办9场,活...

文洁洁洁
2015/11/26
13
0
使用 React Native 一年后的感受

当我在面试Discord的时候,技术主管Stanislav跟我说: React Native代表着未来。等它一发布,我们就会用它从零构建iOS应用。 作为一名原生iOS开发者,基于先前使用PhoneGap的经验,我非常怀疑...

oschina
2016/06/22
68K
31

没有更多内容

加载失败,请刷新页面

加载更多

从AnnotationTransactionAspect开始rushSpring事务

0. Spring 事务 with LTW 0.1. Spring 事务 With LTW的原因: Pure Proxy-base mode有缺陷,其失效原因分析及使用方法及运行机制(LoadTimeWeaverBeanDefinitionParser和 AspectJWeavingEnable......

Aruforce
5分钟前
2
0
mac 安装protobuf 2.5.0

下载安装包 目前protobuf的最新版本是3.9.1,但是hadoop等好多框架依然依赖的是2.5.0,因此,最好不要安装最新的。 https://github.com/protocolbuffers/protobuf/releases/tag/v2.5.0 编译安...

hexiaoming123
9分钟前
3
0
Qt编写自定义控件52-颜色下拉框

一、前言 这个控件写了很久了,元老级别的控件之一,开发之初主要是自己的好几个项目要用到,比如提供一个颜色下拉框设置对应的曲线或者时间颜色,视频监控项目中经常用到的OSD标签设置,这个...

飞扬青云
17分钟前
2
0
Shell脚本应用 – for、while循环语句

通过Shell脚本应用(二)学习到了if条件条件语句的使用方法等。Shell作为一种脚本编程语言,同样了包含了循环,分支等其他程序控制结构,从而能够轻松完成更加复杂、强大的功能。我们今天就来...

Linux就该这么学
22分钟前
3
0
Sqoop之导入到Hive时特殊字符导致数据变乱

问题是这样的: Sqoop从关系型数据库导入数据到Hive时,发现数据量增多了,查找之后发现是由于源数据中含义\r\t\n特殊字符的数据,这样Hive遇到之后就将其视为换行,所以导入到Hive后数据条数...

克虏伯
23分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部