高德地圖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);//標注點的經(jīng)緯度
    self.annotation = anno;
    //添加標注點至地圖
    [self.mapView addAnnotation:self.annotation];
    //顯示標注點(會自動縮放地圖已到達顯示所有需要顯示的標注點戚哎,若不添加該句,地圖顯示為設置的縮放的等級)
    [self.mapView showAnnotations:@[self.annotation] animated:YES];
    4嫂用、設置經(jīng)緯度數(shù)組(根據(jù)數(shù)組數(shù)動態(tài)生成CLLocationCoordinate2D結構體數(shù)組的內存空間個數(shù))
    CLLocationCoordinate2D *coords = (CLLocationCoordinate2D *)malloc([array count] * sizeof(CLLocationCoordinate2D));
    5型凳、地圖狀態(tài)設置(可讓地圖根據(jù)某個角度動態(tài)的移動地圖)
    [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并傳遞相應的數(shù)值
/*

  • 軌跡糾偏
    */
  • (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;
    }

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末嘱函,一起剝皮案震驚了整個濱河市甘畅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌往弓,老刑警劉巖疏唾,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異函似,居然都是意外死亡槐脏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門撇寞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顿天,“玉大人,你說我怎么就攤上這事蔑担∨品希” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵啤握,是天一觀的道長鸟缕。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么懂从? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任授段,我火速辦了婚禮,結果婚禮上番甩,老公的妹妹穿的比我還像新娘畴蒲。我一直安慰自己,他們只是感情好对室,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布模燥。 她就那樣靜靜地躺著,像睡著了一般掩宜。 火紅的嫁衣襯著肌膚如雪蔫骂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天牺汤,我揣著相機與錄音辽旋,去河邊找鬼。 笑死檐迟,一個胖子當著我的面吹牛补胚,可吹牛的內容都是我干的。 我是一名探鬼主播追迟,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼溶其,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敦间?” 一聲冷哼從身側響起瓶逃,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廓块,沒想到半個月后厢绝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡带猴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年昔汉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拴清。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡靶病,死狀恐怖,靈堂內的尸體忽然破棺而出贷掖,到底是詐尸還是另有隱情嫡秕,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布苹威,位于F島的核電站,受9級特大地震影響驾凶,放射性物質發(fā)生泄漏牙甫。R本人自食惡果不足惜掷酗,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窟哺。 院中可真熱鬧泻轰,春花似錦、人聲如沸且轨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旋奢。三九已至泳挥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間至朗,已是汗流浹背屉符。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锹引,地道東北人矗钟。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像嫌变,于是被迫代替她去往敵國和親吨艇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348