美文网首页
地图高级- 大头针基本使用

地图高级- 大头针基本使用

作者: 翻这个墙 | 来源:发表于2017-11-23 10:32 被阅读22次

地图高级- 大头针基本使用

1. 大头针

  1. 现实生活中的大头针(左图)


    大头针1.png
  • 地图上的大头针(右图)
    • 钉在某个具体位置,用来标识这个位置上有特定的事物(这里是导航起点和终点)


      大头针2.png
  • 在地图上操作大头针,实际上是控制大头针数据模型

    1. 添加大头针就是添加大头针数据模型
    2. 删除大头针就是删除大头针数据模型
  • 大头针的基本操作

    添加一个大头针模型
    - (void)addAnnotation:(id <MKAnnotation>)annotation;
    
    添加多个大头针模型
    - (void)addAnnotations:(NSArray *)annotations;
    
    移除一个大头针模型
    - (void)removeAnnotation:(id <MKAnnotation>)annotation;
    
    移除多个大头针模型
    - (void)removeAnnotations:(NSArray *)annotations;
    


### 2. MKAnnotation协议(大头针协议)
* 在IOS中,大头针数据模型必须遵守该协议

* 协议内容:
    ```objc
    /** 经纬度 */
    @property (nonatomic, assign) CLLocationCoordinate2D coordinate;

    @optional
    /** 标题 */
    @property (nonatomic, copy) NSString *title;
    /** 子标题 */
    @property (nonatomic, copy) NSString *subtitle;

    // 设置经纬度
    - (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate NS_AVAILABLE(10_9, 4_0);
    ```

### 3. MKUserLocation 大头针数据模型

* 系统大头针模型;
         1. 本质就是一个数据模型,不过此模型遵循了大头针要遵循的协议(MKAnnotation)
         2. 无法通过addAnnotation直接添加到地图上,而是通过设置地图showsUserLocation属性显示大头针
         3. 如果想手动处理大头针模型,只能自定义大头针模型

* 重要属性:
    ```objc
    location :  用户当前所在位置信息/大头针的位置(CLLocation对象),只读

    title   :  大头针标注要显示的标题(NSString对象)

    subtitle :  大头针标注要显示的子标题(NSString对象)
    ```


### 4. 在地图上添加大头针视图

1. 自定义大头针数据模型

        1) 创建继承自NSObject的数据模型XXXAnnotation, 遵循大头针数据模型必须遵循的协议(MKAnnotation)
        2) 注意将协议coordinate的readonly关键字去掉;

2. 创建大头针数据模型, 并初始化参数

    ```objc
    XXXAnnotation *annotation = [[XXXAnnotation alloc] init];
    annotation.coordinate = coordinate;
    annotation.title = @"嘻嘻";
    annotation.subtitle = @"嘻嘻哈哈";
    ```

3. 调用地图的添加大头针数据模型方法

    ```objc
    [self.mapView addAnnotation:annotation];
    ```

### 3. 移除大头针(所有大头针)
```objc
NSArray *annotations = self.mapView.annotations;
[self.mapView removeAnnotations:annotations];

4. 场景模拟

  1. 场景描述:

     鼠标点击在地图哪个位置, 就在对应的位置添加一个大头针, 并在标注弹框中显示对应的城市和街道;
    
  2. 实现步骤

        1. 获取触摸点在地图上对应的坐标
            UITouch *touch = [touches anyObject];
            CGPoint touchPoint = [touch locationInView:self.mapView];

        2. 将坐标转换成为经纬度
            CLLocationCoordinate2D center = [self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];

        3. 根据经纬度创建大头针数据模型, 并添加在地图上
            XXXAnnotation *annotation = [[XXXAnnotation alloc] init];
            annotation.coordinate = coordinate;
            annotation.title = @"嘻嘻";
            annotation.subtitle = @"嘻嘻哈哈";
            [self.mapView addAnnotation:annotation];

        4. 利用反地理编码, 获取该点对应的城市和街道名称, 然后修改大头针数据模型
            注意: 设置弹框数据时, 对应的大头针数据模型应有对应的占位数据(这样对应的UI才会生成,后面才能重新修改数据)

            // 以下是swift示例代码
            let location = CLLocation(latitude: center.latitude, longitude: center.longitude)
            geoc.reverseGeocodeLocation(location) { (clpls : [CLPlacemark]?, error : NSError?) -> Void in

            if error != nil {return}

            // 1.取出地标对象
            guard let clpl = clpls?.first else {return}

            // 2.设置大头针的标题和子标题
            annotation.title = clpl.locality
            annotation.subtitle = clpl.name

5. 测试环境

    1. 加载地图数据需要联网
    2. XCode版本不限
    3. iOS系统版本不限

6. 常见问题总结

    1. 反地理编码无法获取对应的数据
        第一: 检查是否有联网
        第二: 检查代码是否有误
        第三: 有时存在某些位置没有反地理编码结果, 换个点尝试, 如果都没有, 排除此原因

    2. 大头针协议的@property关键字?
        @property , 其实就是生成了get 和 set 方法;
        所以, 遵循这个协议, 等同于实现该属性的get, set方法

相关文章

  • iOS-MapKit文集目录

    前言 MapKit框架的导入 地图展示地图的基本使用-地图显示地图的中级使用-用户追踪地图高级-大头针基本使用地图...

  • 地图高级- 大头针基本使用

    地图高级- 大头针基本使用 1. 大头针 现实生活中的大头针(左图)大头针1.png 地图上的大头针(右图)钉在某...

  • 地图高级 - 自定义大头针

    地图高级 - 自定义大头针 1. 理论支撑 2. 模拟实现系统大头针 实现当添加大头针数据模型时,地图回调的代理方...

  • 高德地图---iOS笔记摘录

    概念 使用 地图显示 交互 显示 计算 其他 1.1 大头针 自定义大头针: MAPointAnnotation ...

  • iOS Mapkit的使用

    【iOS】Mapkit的使用:地图显示、定位、大头针、气泡等 标签:iOS地图mapkit 1.显示地图 (1)首...

  • iOS 使用高德地图正确姿势(三)

    iOS 使用高德地图正确姿势(一)iOS 使用高德地图正确姿势(二) 实现大头针始终在地图中心,拖动地图实时poi...

  • MapKit

    MapKit框架的基本使用 用于地图展示,例如大头针,路线、覆盖层展示等(着重界面展示)导入主头文件 #impo...

  • 地图大头针气泡点击事件

    地图大头针气泡点击事件 项目中需要实现点击地图中大头针点击后出现气泡的点击事件,使用系统的方法一直没办法实现,最后...

  • 高德地图缩小地图大头针位置不对

    使用高德地图时自定义大头针,缩小地图时大头针位置跟实际位置偏移严重 原因:没设置中心点偏移 解决方法:设置中心点偏移

  • 原生地图---iOS笔记摘录

    注意: 使用 1. 地图 1.1 大头针(即标注) 1.2 Overlay覆盖物 1.3 MKMapViewDel...

网友评论

      本文标题:地图高级- 大头针基本使用

      本文链接:https://www.haomeiwen.com/subject/graavxtx.html