地图的使用

地图的基本使用

  • 设置地图类型
// 1.设置地图显示类型
    //  MKMapTypeStandard = 0, // 标准地图
    //  MKMapTypeSatellite, // 卫星云图
    //  MKMapTypeHybrid, // 混合(在卫星云图上加了标准地图的覆盖层)
    //  MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体
    //  MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D混合
    // 设置地图显示样式(必须注意,设置时 注意对应的版本)

    self.mapView.mapType = MKMapTypeStandard;
  • 设置地图的其他属性(操作项)
    • 注意:设置对应的属性时,注意该属性是从哪个系统版本开始引入的,做好不同系统版本的适配
// 是否可以缩放
self.customMapView.zoomEnabled = NO;

// 是否可以滚动
self.customMapView.scrollEnabled = NO;

// 是否可以旋转
self.customMapView.rotateEnabled = NO;

// 是否显示3D
self.customMapView.pitchEnabled = NO;
  • 设置地图其它属性(显示项)
// 是否显示指南针
self.customMapView.showsCompass = YES;

// 是否显示比例尺
self.customMapView.showsScale = YES;

// 是否显示交通
self.customMapView.showsTraffic = YES;

// 是否显示建筑物
self.customMapView.showsBuildings = YES;
  • 设置地图显示用户位置( 需要请求用户授权 
    • 效果: 会在地图上显示一个蓝色圆点(大头针),标示用户当前所在位置, 地图不会跟着用户移动而移动
    • 代码: self.customMapView.showsUserLocation = YES;
  • 设置地图的用户追踪模式( 需要请求用户授权 

    • 效果: 会在地图上显示一个蓝色圆点(大头针),标示用户当前所在位置, 地图会跟着用户移动而移动, 而且自动放大地图到合适比例
    1. 创建CLLocationManager对象请求授权
 -(CLLocationManager *)locationM
{
    if (!_locationM) {
        _locationM = [[CLLocationManager alloc] init];

        if ([_locationM respondsToSelector:@selector(requestAlwaysAuthorization)]) {
            [_locationM requestAlwaysAuthorization];
        }
    }

    return _locationM;
}
    1. 设置地图的用户追踪模式
      • 注意:设置此属性会使用到用户的位置隐私,所以需要请求用户授权,否则没有效果
/**
     MKUserTrackingModeNone = 0, // 不跟随
    MKUserTrackingModeFollow, // 跟随用户位置
    MKUserTrackingModeFollowWithHeading, // 跟随用户位置,并跟随用户方向
*/
    [self locationM];
    self.customMapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;

地图的中级使用

  • 查看当前用户位置信息
      1. 设置地图代理,并实现代理方法,在代理方法中获取用户当前位置(注意:iOS8.0之后要请求授权!!)
      1. 将地图显示中心调整为用户当前所在位置(iOS8.0之前,地图不会自动移动到用户所在位置
      1. 调整当前地图显示的区域(可使用对应代理方法查看当前地图跨度,然后调整到合适跨度即可)
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    /**
        MKUserLocation:被称作“大头针模型”,其实喊什么都行,本质就是一个数据模型,只不过此模型遵循了大头针要遵循的协议(MKAnnotation)
        location:  用户当前所在位置信息(CLLocation对象)
        title:     大头针标注要显示的标题(NSString对象)
        subtitle:  大头针标注要显示的子标题(NSString对象)
    */
    // 根据用户当前位置的经纬度,设置地图显示中心
    /**
        存在弊端:地图显示比例过大,无法调整
        解决方案:直接使用对应的调整地图“显示区域”的API
    */
    //    [mapView setCenterCoordinate:userLocation.coordinate animated:YES];
    /**
        MKCoordinateSpan 跨度解释:
        latitudeDelta:纬度跨度,因为南北纬各90度,所以此值的范围是(0---180);此值表示,整个地图视图宽度,显示多大跨度
        longitudeDelta:经度跨度,因为东西经各180度,所以此值范围是(0---360):此值表示,整个地图视图高度,显示多大跨度
        注意:地图视图显示,不会更改地图的比例,会以地图视图高度或宽度较小的那个为基准,按比例调整
    */
    //    MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
    //    MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.coordinate, span);
    //    [mapView setRegion:region animated:YES];
}

// 当地图区域(跨度)改变时调用
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
    {
        NSLog(@"%f---%f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta);
}

大头针基本使用

  • 必须理解: 在地图上操作大头针,实际上是控制大头针数据模型
    • 添加大头针就是添加大头针数据模型
    • 删除大头针就是删除大头针数据模型
  • 添加一个/多个大头针
      1. 自定义大头针模型(需要遵循MKAnnotation协议)
#import <MapKit/MapKit.h>

@interface XMGAnnotation : NSObject <MKAnnotation>
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy, nullable) NSString *title;
@property (nonatomic, copy, nullable) NSString *subtitle;
@end
  • 2.创建自定义大头针模型,并添加到地图上
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 如果我们仅仅添加大头针数据模型,地图上会自动添加系统默认的大头针视图
    XMGAnnotation *annotation = [[XMGAnnotation alloc] init];
    //    annotation.coordinate = self.mapView.centerCoordinate;

    // 1. 获取当前点的位置
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.mapView];

     // 把点转换成对应的经纬度
    CLLocationCoordinate2D coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];

    // TODO:使用反地理编码,获取对应大头针的所在的位置信息,通过标注显示出来
    annotation.coordinate = coordinate;
    annotation.title = @"龙少";
    annotation.subtitle = @"青苹果园欢迎您";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值