美文网首页
ios ~ 高德地图:使用方法及示例

ios ~ 高德地图:使用方法及示例

作者: 阳光下的叶子呵 | 来源:发表于2022-08-31 10:27 被阅读0次

    相关文档【高德地图官方文档】:
    1、iOS 地图SDK
    2、iOS 定位SDK
    3、基础SDK介绍
    4、提交AppStore必读(用不用 广告符IDFA
    5、权限配置
    6、绘制点标记(自带大头针样式,可自定义图标、标记)
    7、绘制面:图片覆盖物(图片覆盖物类为 MAGroundOverlay)、绘制圆、绘制热力图、绘制overlay(自定义图层)
    (覆盖图片类、多边形、贝塞尔曲线、标记)

    8、示例:iOS 高德地图点平滑移动-暂停-再移动

    • 一、使用方法:

    CocoaPods导入:
    在Podfile文件中写入:

    # 高德地图:(功能:地图(分2D、3D)、定位、搜索)
      #pod 'AMap3DMap'
      #pod 'AMapSearch'  
      #pod 'AMapLocation' # 包含IDFA版的定位 SDK
    
      pod 'AMap3DMap-NO-IDFA'    # 无IDFA版
      pod 'AMapLocation-NO-IDFA' # 无IDFA版定位 SDK
      pod 'AMapSearch-NO-IDFA'   # 无IDFA版
    
    地图导入头文件:
    // 将上面步骤获取的高德Key,配置到代码中,以保证地图功能的正常运行。
    //需要引入AMapFoundationKit.h头文件()
    #import <AMapFoundationKit/AMapFoundationKit.h>
    // 加载3D矢量地图,初始化:
    #import <MAMapKit/MAMapKit.h> 
    // 实现持续定位:
    #import <AMapLocationKit/AMapLocationKit.h>
    
    

    [Objective-C]:

    1.配置Info.plist 文件

    由于需要申请定位权限,在 Info.plist 中加入 NSLocationAlwaysUsageDescription 字段。

    2.配置高德Key至AppDelegate.m文件

    将上面步骤获取的高德Key,配置到代码中,以保证定位功能的正常运行。代码如下

    #import <AMapFoundationKit/AMapFoundationKit.h>
    //需要引入AMapFoundationKit.h头文件
    .......
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {  
        [AMapServices sharedServices].apiKey = @"您的Key";
        .......
    }
    

    3.加载地图

    在ViewController.m文件相应的方法中进行地图初始化,初始化的步骤:

    1. import MAMapKit.h 头文件;
    2. 构造MAMapView对象;
    3. 将MAMapView添加到Subview中。

    对于3D矢量地图,在 viewDidLoad 方法中添加代码:

    #import <MAMapKit/MAMapKit.h>
    
    -(void) viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    
    ///初始化地图
    MAMapView *_mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
    
    ///把地图添加至view
        [self.view addSubview:_mapView];
    }
    
    
    4.实现持续定位

    代码如下:

    #import <AMapLocationKit/AMapLocationKit.h>
    //初始化AMapLocationManager对象,设置代理。
    
    - (void)viewDidLoad
    {
        self.locationManager = [[AMapLocationManager alloc] init];
        self.locationManager.delegate = self;
    }
    
    //调用AMapLocationManager提供的startUpdatingLocation方法开启持续定位。
    
    [self.locationManager startUpdatingLocation];
    
    //接收位置更新,实现AMapLocationManagerDelegate代理的amapLocationManager:didUpdateLocation方法,处理位置更新
    
    - (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode
    {
        NSLog(@"location:{lat:%f; lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);
        if (regeocode)
          {
              NSLog(@"reGeocode:%@", regeocode);
          }
    }
    
    
    • 一些问题及解决方法:

    问题:

    (1)、关于高德地图自定义标注的气泡时,不能响应单击事件吗?
    解决办法:

    // 在CustomAnnotationView.m中重写hittest方法:(这里的self.calloutView.navBtn 就是你需要点击的按钮)
    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
        UIView *view = [super hitTest:point withEvent:event];
        if (view == nil) {
            CGPoint tempoint = [self.calloutView.navBtn convertPoint:point fromView:self];
            if (CGRectContainsPoint(self.calloutView.navBtn.bounds, tempoint)) {
                view = self.calloutView.navBtn;
            }
        }
        return view;
    }
    
    • 二、示例:

    图片覆盖物:【气温】、【降水】
    点平滑移动:【台风】
    点标注+气泡标注:【自定义气泡标注】
    图片覆盖物,使用NSTimer,时间轴(时间刻度)循环更改图片覆盖物,原理:删除,置为nil,在重新创建

    if (self.groundOverlay != nil) {
          [self.mapView removeOverlay:self.groundOverlay]; // 点击台风的时候,删掉覆盖物层,在需要的时候重新创建
          self.groundOverlay = nil;
    }
    

    相关文章

      网友评论

          本文标题:ios ~ 高德地图:使用方法及示例

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