高德地图MAMapKit使用心得随笔

1、注册获取应用KEY(http://lbs.amap.com/api/ios-sdk/guide/create-project/get-key
2、添加MAMapView至需要的页面中

pragma mark - init

  • (MAMapView )mapView
    {
    if (!_mapView) {
    _mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
    _mapView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    _mapView.delegate = self;
    _mapView.showsScale = NO; //不显示比例尺
    // _mapView.showsCompass = NO; //关闭指南针
    _mapView.compassOrigin = CGPointMake(20
    kRating, 20*kRating);//指南针的左上角坐标点位置
    _mapView.centerCoordinate = CLLocationCoordinate2DMake(22.57, 113.90);//设置地图中心点
    _mapView.zoomLevel = 3;
    _mapView.minZoomLevel = 3;
    _mapView.rotateCameraEnabled = NO;
    //取出logo图标
    [_mapView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    if ([obj isKindOfClass:[UIImageView class]]) {
    UIImageView * logoM = obj;
    logoM.layer.contents = (__bridge id)[UIImage imageNamed:@""].CGImage;
    }
    }];
    }
    return _mapView;
    }
    //在viewDidLoad中添加
    [self.view addSubview:self.mapView];
    3、设置定点标注信息
    MAAnimatedAnnotation *anno = [[MAAnimatedAnnotation alloc] init];
    anno.coordinate = CLLocationCoordinate2DMake(positionModel.latitude, positionModel.longitude);//标注点的经纬度
    self.annotation = anno;
    //添加标注点至地图
    [self.mapView addAnnotation:self.annotation];
    //显示标注点(会自动缩放地图已到达显示所有需要显示的标注点,若不添加该句,地图显示为设置的缩放的等级)
    [self.mapView showAnnotations:@[self.annotation] animated:YES];
    4、设置经纬度数组(根据数组数动态生成CLLocationCoordinate2D结构体数组的内存空间个数)
    CLLocationCoordinate2D *coords = (CLLocationCoordinate2D *)malloc([array count] * sizeof(CLLocationCoordinate2D));
    5、地图状态设置(可让地图根据某个角度动态的移动地图)
    [self.mapView setMapStatus:[MAMapStatus statusWithCenterCoordinate:coors[1]
    zoomLevel:18
    rotationDegree:(360-self.vehicleModel.vehicle.direction)
    cameraDegree:0
    screenAnchor:CGPointMake(0.5, 0.5)]
    animated:YES
    duration:10];

6、在需要的地方调取configTrace并传递相应的数值
/*

  • 轨迹纠偏
    */
  • (NSArray *)positionTransformTraceLocation
    {
    NSMutableArray *array = [NSMutableArray array];
    if (self.historyModel.positions.count > 0) {
    for (ZJPositionModel *positionModel in self.historyModel.positions) {
    MATraceLocation *location = [[MATraceLocation alloc] init];
    location.loc = CLLocationCoordinate2DMake(positionModel.latitude, positionModel.longitude);
    location.speed = positionModel.speed;
    location.time = positionModel.gpsTime;
    location.angle = positionModel.direction;

          [array addObject:location];
      }
    

    }

    return array;
    }

  • (void)configTrace
    {
    if (self.historyModel.positions.count == 1) {//只有一个点不纠正轨迹
    if (self.processedOverlays && self.processedOverlays.count > 0) {
    [self.mapView removeOverlays:self.processedOverlays];
    [self.processedOverlays removeAllObjects];
    }

    } else {
    __weak typeof(self) weakSelf = self;

      MATraceManager *manager = [[MATraceManager alloc] init];
      NSOperation *operation = [manager queryProcessedTraceWith:[self positionTransformTraceLocation]
                                                           type:-1
                                             processingCallback:^(int index, NSArray<MATracePoint *> *points) {
                                                 [weakSelf addSubTrace:points toMapView:weakSelf.mapView];
                                                 
                                             } finishCallback:^(NSArray<MATracePoint *> *points, double distance) {
                                                 weakSelf.queryOperation = nil;
                                                 [weakSelf addFullTrace:points toMapView:weakSelf.mapView];
                                                 
                                             } failedCallback:^(int errorCode, NSString *errorDesc) {
                                                 NSLog(@"Error: %@", errorDesc);
                                                 weakSelf.queryOperation = nil;
                                                 
                                             }];
      self.queryOperation = operation;
    

    }
    }

  • (MAMultiPolyline )makePolyLineWith:(NSArray<MATracePoint> *)tracePoints {
    if(tracePoints.count == 0) {
    return nil;
    }

    CLLocationCoordinate2D *pCoords = malloc(sizeof(CLLocationCoordinate2D) * tracePoints.count);
    if(!pCoords) {
    return nil;
    }

    for(int i = 0; i < tracePoints.count; ++i) {
    MATracePoint *p = [tracePoints objectAtIndex:i];
    CLLocationCoordinate2D *pCur = pCoords + i;
    pCur->latitude = p.latitude;
    pCur->longitude = p.longitude;
    }

    MAMultiPolyline *polyline = [MAMultiPolyline polylineWithCoordinates:pCoords count:tracePoints.count drawStyleIndexes:@[@10, @60]];

    if(pCoords) {
    free(pCoords);
    }
    return polyline;
    }

  • (void)addFullTrace:(NSArray<MATracePoint*> *)tracePoints toMapView:(MAMapView *)mapView{
    MAMultiPolyline *polyline = [self makePolyLineWith:tracePoints];
    if(!polyline) {
    return;
    }
    [mapView removeOverlays:self.processedOverlays];
    [self.processedOverlays removeAllObjects];

    [mapView setVisibleMapRect:MAMapRectInset(polyline.boundingMapRect, -1000, -1000)];

    [self.processedOverlays addObject:polyline];
    [mapView addOverlays:self.processedOverlays];
    [mapView showOverlays:self.processedOverlays animated:YES];
    }

  • (void)addSubTrace:(NSArray<MATracePoint*> *)tracePoints toMapView:(MAMapView *)mapView {
    MAMultiPolyline *polyline = [self makePolyLineWith:tracePoints];
    if(!polyline) {
    return;
    }

    MAMapRect visibleRect = [mapView visibleMapRect];
    if(!MAMapRectContainsRect(visibleRect, polyline.boundingMapRect)) {
    MAMapRect newRect = MAMapRectUnion(visibleRect, polyline.boundingMapRect);
    [mapView setVisibleMapRect:newRect];
    }

    [self.processedOverlays addObject:polyline];
    [mapView addOverlay:polyline];
    [mapView showOverlays:@[polyline] animated:YES];
    }

pragma mark - mapview delegate

  • (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay
    {
    if ([overlay isKindOfClass:[MAMultiPolyline class]])
    {
    MAPolylineRenderer *polylineRenderer = [[MAPolylineRenderer alloc] initWithPolyline:(MAMultiPolyline *)overlay];
    polylineRenderer.lineWidth = 16.f;
    polylineRenderer.strokeImage = [UIImage imageNamed:@"car_trace"];

      return polylineRenderer;
    

    }

    return nil;
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342