高德地图初步使用-显示
阅读原文时间:2021年04月25日阅读:1

#import "ViewController.h"

#import

#import "CustomAnnotationView.h"

#import "CustomCalloutView.h"

@interface ViewController ()<MAMapViewDelegate>

@property(nonatomic, strong)MAMapView *mapView;

@end

@implementation ViewController

-(void)viewDidAppear:(BOOL)animated

{

    [super viewDidAppear:animated];

    /**

     *cocoapods导入高德地图包

     *更改plist配置

*为了能正常调起高德地图App的功能plist里增加:

                    LSApplicationQueriesSchemes

                   

                    iosamap

                   

     字段.

     */

#warning 1.首先声明MAPointAnnotation 来确定大头针位置及点击大头针弹出气泡的内容(默认只有title和subtitle)

    /**

每一个大头针里面都自带一个calloutView 点击就显示出来,我们设置MApointAnnotation实质上是在设置callout内容和大头针的位置,不过自定义了气泡的话则需要从新给气泡的其他属性赋值,在customAnnotationview里有写到

     */

//间接制作弹出气泡(相当于 给cell赋值的Model) ,如果自定义气泡则需要单独给定义的气泡写其他赋值的属性(除这两个之外的)

MAPointAnnotation *pointAnnotation = [[MAPointAnnotation alloc]init];

    pointAnnotation.coordinate = CLLocationCoordinate2DMake(39.989631, 116.481018);

    pointAnnotation.title = @"小A";

    pointAnnotation.subtitle = @"假的";

MAPointAnnotation *pointAnnotation1 = [[MAPointAnnotation alloc]init];

    pointAnnotation1.coordinate = CLLocationCoordinate2DMake(40.389631, 116.481018);

    pointAnnotation1.title = @"小B";

    pointAnnotation1.subtitle = @"真的";

MAPointAnnotation *pointAnnotation2 = [[MAPointAnnotation alloc]init];

    pointAnnotation2.coordinate = CLLocationCoordinate2DMake(36.989631, 116.481018);

    pointAnnotation2.title = @"小C";

    pointAnnotation2.subtitle = @"哈哈";

MAPointAnnotation *pointAnnotation3 = [[MAPointAnnotation alloc]init];

    pointAnnotation3.coordinate = CLLocationCoordinate2DMake(39.989631, 116.081018);

    pointAnnotation3.title = @"小D";

    pointAnnotation3.subtitle = @"吼吼";

//添加给mapView

    [_mapView addAnnotations:@[pointAnnotation, pointAnnotation1,pointAnnotation2,pointAnnotation3]];

}

- (void)viewDidLoad {

[super viewDidLoad];

#warning 2.初始化 签代理 添加到View

//初始化一个地图View(可以理解成是一个tableView)

_mapView = [[MAMapView alloc]initWithFrame:self.view.frame];

//代理千万别忘了签

_mapView.delegate = self;

//    _mapView.language = MAMapLanguageEn;//可以设置语言!

//添加到View上

    [self.view addSubview:_mapView];

//地图logo 默认开启

_mapView.logoCenter = _mapView.logoCenter = CGPointMake(CGRectGetWidth(self.view.bounds)-55, 450);

//指南针 默认开启

_mapView.showsCompass= YES; // 设置成NO表示关闭指南针;YES表示显示指南针

_mapView.compassOrigin= CGPointMake(_mapView.compassOrigin.x, 22); //设置指南针位置

//比例尺 默认开启

_mapView.showsScale = YES;//设置成NO表示不显示比例尺;YES表示显示比例尺

_mapView.scaleOrigin= CGPointMake(_mapView.scaleOrigin.x, 22); //设置比例尺位置

//可以添加手势 略

    /**

iOS SDK支持对选定的屏幕地图区域(CGRect)进行截屏,截取的内容包括:地图、地图覆盖物、弹出气泡。

说明:地图截屏功能依赖于地图显示,即:只有内容先显示在地图上,才能进行截屏。

     使用 MAMapView 中的 takeSnapshotInRect 方法进行截屏,该方法返回UIImage对象

     */

    CGRect inRect = CGRectMake(80,142,160,284);

    UIImage *screenshotImage = [_mapView takeSnapshotInRect:inRect];

//实时交通图

//    _mapView.showTraffic = YES;

//构造折线数据对象

    CLLocationCoordinate2D commonPolylineCoords[4];

    commonPolylineCoords[0].latitude = 39.832136;

    commonPolylineCoords[0].longitude = 116.34095;

    commonPolylineCoords[1].latitude = 39.832136;

    commonPolylineCoords[1].longitude = 116.42095;

    commonPolylineCoords[2].latitude = 39.902136;

    commonPolylineCoords[2].longitude = 116.42095;

    commonPolylineCoords[3].latitude = 39.902136;

    commonPolylineCoords[3].longitude = 116.44095;

//构造折线对象

    MAPolyline *commonPolyline = [MAPolyline polylineWithCoordinates:commonPolylineCoords count:4];

//在地图上添加折线对象,然后去实现代理方法2

    [_mapView addOverlay: commonPolyline];

//还可构造多边形 圆 大地曲线 图片覆盖物

//还可设置自定义图层 这些都在开发指南上有详细的例子

}

#warning 3.添加大头针

#pragma mark - 添加视图内的大头针

-(MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation

{//相当于tableView的cellForRow方法,可以实现重用的

    if ([annotation isKindOfClass:[MAPointAnnotation class]]) {

        static NSString *pointReuseIndentifier = @"pointReuseIndentifier";

//默认 制作一个大头针,相当于cell<还可以自定义,具体实现参考开发指南>

//        MAPinAnnotationView *annotationView = (MAPinAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:pointReuseIndentifier];

//        if (annotationView == nil) {

//            annotationView = [[MAPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:pointReuseIndentifier];

//        }

#warning 4.自定义气泡 需要自定义大头针继承MAAnnotationView或MAPinAnnotationView。若继承MAAnnotationView,则需要设置标注图标;若继承MAPinAnnotationView,使用默认的大头针标注。

        /**

        因为继承了AnnotationView所以会有annotation这个属性,第1 步设置会把值传给annotation(推测),所以把我们自定义的title和subtitle等于annotation.title和subtitle就行了,自定义的其他属性单独赋值就好

        */

// 自定义制作一个大头针,相当于cell<还可以自定义,具体实现参考开发指南>

        CustomAnnotationView *annotationView = (CustomAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:pointReuseIndentifier];

        if (annotationView == nil) {

            annotationView = [[CustomAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:pointReuseIndentifier];

        }

//默认 设置大头针属性

//        annotationView.canShowCallout = YES;//能弹出气泡

//        annotationView.animatesDrop = YES;//动画效果

//        annotationView.draggable = YES;//可移动

//        annotationView.pinColor = MAPinAnnotationColorPurple;

//默认 把大头针变图片

//        annotationView.image = [UIImage imageNamed:@"IMG_7476.jpg"];//设置图片的

//设置中心点偏移,使得标注底部中间点成为经纬度对应点

//        annotationView.centerOffset = CGPointMake(0, -18);

//自定义的大头针

        annotationView.draggable = YES;

        annotationView.canShowCallout = NO;//如果自定义了callout就要关掉自带的

        annotationView.image1 = [UIImage imageNamed:@"IMG_7476.jpg"];

        return annotationView;

    }

return nil;

}

#pragma mark - 协议中的mapView:viewForOverlay:回调函数,设置折线的样式

-(MAOverlayView *)mapView:(MAMapView *)mapView viewForOverlay:(id<MAOverlay>)overlay

{

    if ([overlay isKindOfClass:[MAPolyline class]])

    {

        MAPolylineView *polylineView = [[MAPolylineView alloc] initWithPolyline:overlay];

        polylineView.lineWidth = 10.f;

        polylineView.strokeColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:0.6];

        return polylineView;

    }

return nil;

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章