MAMapView.h 21.5 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682
//
//  MAMapView.h
//  MAMapKit
//
//  Created by AutoNavi.
//  Copyright (c) 2013年 Amap. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "MAGeometry.h"
#import "MAOverlay.h"
#import "MAOverlayRenderer.h"
#import "MAAnnotationView.h"
#import "MAOverlayView.h"

typedef NS_ENUM(NSInteger, MAMapLanguage)
{
    MAMapLanguageZhCN = 0,  ///< 中文
    MAMapLanguageEn = 1,    ///< 英文
};

typedef NS_ENUM(NSInteger, MAMapType)
{
    MAMapTypeStandard,  ///< 普通地图
    MAMapTypeSatellite  ///< 卫星地图
};

typedef NS_ENUM(NSInteger, MAUserTrackingMode)
{
    MAUserTrackingModeNone              = 0,    ///< 不追踪用户的location更新
	MAUserTrackingModeFollow            = 1,    ///< 追踪用户的location更新
	MAUserTrackingModeFollowWithHeading = 2     ///< 追踪用户的location与heading更新
};

@protocol MAMapViewDelegate;

@class MAUserLocation;
@class MAAnnotationView;
@class MAUserLocationRepresentation;

@interface MAMapView : UIView

#pragma mark - Properties

///地图View的Delegate
@property (nonatomic, weak) id<MAMapViewDelegate> delegate;

///地图类型
@property (nonatomic, assign) MAMapType mapType;

///地图语言
@property (nonatomic, assign) MAMapLanguage language;

///是否显示交通,默认为NO
@property (nonatomic, assign, getter = isShowTraffic) BOOL showTraffic;

///是否支持平移,默认为YES
@property (nonatomic, assign, getter = isScrollEnabled) BOOL scrollEnabled;

///是否支持缩放,默认为YES
@property (nonatomic, assign, getter = isZoomEnabled) BOOL zoomEnabled;

///标识当前地图中心位置是否在中国范围外。此属性不是精确判断,不能用于边界区域
@property (nonatomic, readonly) BOOL isAbroad;

///是否允许对annotationView根据zIndex进行排序,默认为YES。当annotationView数量比较大时可能会引起性能问题,可以设置此属性为NO
@property (nonatomic, assign) BOOL allowsAnnotationViewSorting;

#pragma mark - Logo

///logo位置, 必须在mapView.bounds之内,否则会被忽略
@property (nonatomic) CGPoint logoCenter;

///logo的宽高
@property (nonatomic, readonly) CGSize logoSize;

#pragma mark - Compass

///是否显示罗盘,默认为YES
@property (nonatomic, assign) BOOL showsCompass;

///罗盘原点位置
@property (nonatomic) CGPoint compassOrigin;

///罗盘的宽高
@property (nonatomic, readonly) CGSize compassSize;


#pragma mark - Scale

///是否显示比例尺,默认为YES
@property (nonatomic) BOOL showsScale;

///比例尺原点位置
@property (nonatomic) CGPoint scaleOrigin;

///比例尺的最大宽高
@property (nonatomic, readonly) CGSize scaleSize;

///在当前缩放级别下, 基于地图中心点, 1 screen point 对应的距离(单位是米). 支持KVO
@property (nonatomic, readonly) CGFloat metersPerPointForCurrentZoomLevel;


#pragma mark - Movement

///当前地图的中心点经纬度坐标,改变该值时,地图缩放级别不会发生变化
@property (nonatomic, assign) CLLocationCoordinate2D centerCoordinate;

///当前地图的经纬度范围,设定的该范围可能会被调整为适合地图窗口显示的范围
@property (nonatomic, assign) MACoordinateRegion region;

///当前地图可见范围的map rect
@property (nonatomic, assign) MAMapRect visibleMapRect;

#pragma mark - Limitation

///设置可见地图区域的矩形边界,如限制地图只显示北京市范围
@property (nonatomic, assign) MACoordinateRegion limitRegion;

///设置可见地图区域的矩形边界,如限制地图只显示北京市范围
@property (nonatomic, assign) MAMapRect limitMapRect;

#pragma mark - Zoom

///缩放级别, [3, 20]
@property (nonatomic, assign) double zoomLevel;

///最小缩放级别, 最小值为3
@property (nonatomic, assign) double minZoomLevel;

///最大缩放级别,最大值为20
@property (nonatomic, assign) double maxZoomLevel;

#pragma mark - UserLocation

///是否显示用户位置
@property (nonatomic, assign, getter = isShowsUserLocation) BOOL showsUserLocation;

///当前的位置数据
@property (nonatomic, readonly) MAUserLocation *userLocation;

///定位用户位置的模式
@property (nonatomic) MAUserTrackingMode userTrackingMode;

///当前位置再地图中是否可见
@property (nonatomic, readonly, getter=isUserLocationVisible) BOOL userLocationVisible;

#pragma mark - Annotations

///标注数组
@property (nonatomic, readonly) NSArray *annotations;

///处于选中状态的标注数据数据(其count == 0 或 1)
@property (nonatomic, copy) NSArray *selectedAnnotations;

///annotation 可见区域
@property (nonatomic, readonly) CGRect annotationVisibleRect;

#pragma mark - Overlays

///Overlay数组
@property (nonatomic, readonly) NSArray *overlays;

#pragma mark - Compass func

/**
 * @brief 设置罗盘的图像
 * @param image 当设置图像非空时,指南针将呈现该图像,如果为nil时,则恢复默认
 */
- (void)setCompassImage:(UIImage *)image;

#pragma mark - Scale func

/**
 * @brief 在指定的缩放级别下, 基于地图中心点, 1 screen point 对应的距离(单位是米)
 * @param zoomLevel 指定的缩放级别, 在[minZoomLevel, maxZoomLevel]范围内
 * @return 对应的距离(单位是米)
 */
- (CGFloat)metersPerPointForZoomLevel:(CGFloat)zoomLevel;

#pragma mark - Movement func

/**
 * @brief 设定地图中心点经纬度
 * @param centerCoordinate 要设定的地图中心点经纬度
 * @param animated 是否采用动画效果
 */
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate animated:(BOOL)animated;

/**
 * @brief 设定当前地图的region
 * @param region 要设定的地图范围,用经纬度的方式表示
 * @param animated 是否采用动画效果
 */
- (void)setRegion:(MACoordinateRegion)region animated:(BOOL)animated;


/**
 * @brief 根据当前地图视图frame的大小调整region范围,返回适合当前地图frame的region,调整过程中当前地图的中心点不会改变
 * @param region 要调整的经纬度范围
 * @return 调整后的经纬度范围
 */
- (MACoordinateRegion)regionThatFits:(MACoordinateRegion)region;

/**
 * @brief 设置当前地图可见范围的map rect
 * @param mapRect 要调整的map rect
 * @param animated 是否采用动画效果
 */
- (void)setVisibleMapRect:(MAMapRect)mapRect animated:(BOOL)animated;

/**
 * @brief 设置当前地图可见范围的map rect
 * @param mapRect 要设置的map rect
 * @param insets 嵌入边界
 * @param animated 是否采用动画效果
 */
- (void)setVisibleMapRect:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated;

/**
 * @brief 调整map rect使其适合地图窗口显示的范围
 * @param mapRect 要调整的map rect
 * @return 调整后的maprect
 */
- (MAMapRect)mapRectThatFits:(MAMapRect)mapRect;

/**
 * @brief 调整map rect使其适合地图窗口显示的范围
 * @param mapRect 要调整的map rect
 * @param insets 嵌入边界
 * @return 调整后的map rect
 */
- (MAMapRect)mapRectThatFits:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets;

#pragma mark - Zoom func

/**
 * @brief 设置当前地图的缩放级别zoom level
 * @param newZoomLevel 要设置的zoom level
 * @param animated 是否采用动画效果
 */
- (void)setZoomLevel:(double)newZoomLevel animated:(BOOL)animated;

/**
 * @brief 设置当前地图的缩放级别zoom level
 * @param newZoomLevel 要设置的zoom level
 * @param pivot 指定缩放的锚点,屏幕坐标
 * @param animated 是否采用动画效果
 */
- (void)setZoomLevel:(double)newZoomLevel atPivot:(CGPoint)pivot animated:(BOOL)animated;

#pragma mark - Conversions func

/**
 * @brief 将经纬度坐标转化为相对于指定view的坐标
 * @param coordinate 要转化的经纬度坐标
 * @param view 指定的坐标系统的view
 * @return 指定view的坐标
 */
- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view;

/**
 * @brief 将相对于view的坐标转化为经纬度坐标
 * @param point 要转化的坐标
 * @param view point所基于的view
 * @return 转化后的经纬度坐标
 */
- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view;

/**
 * @brief 将map rect 转化为相对于view的坐标
 * @param region 要转化的 map rect
 * @param view 返回值所基于的view
 * @return 基于view的坐标
 */
- (CGRect)convertRegion:(MACoordinateRegion)region toRectToView:(UIView *)view;

/**
 * @brief 将相对于view的rectangle转化为region
 @param rect 要转化的rectangle
 @param view rectangle所基于的view
 @return 转化后的region
 */
- (MACoordinateRegion)convertRect:(CGRect)rect toRegionFromView:(UIView *)view;


#pragma mark - UserLocation func

/**
 * @brief 设置追踪用户位置的模式
 * @param mode 要使用的模式
 * @param animated 是否采用动画效果
 */
- (void)setUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated;

/**
 * @brief 设定UserLocationView样式。如果用户自定义了userlocation的annotationView,或者该annotationView还未添加到地图上,此方法将不起作用
 * @param representation 样式信息对象
 */
- (void)updateUserLocationRepresentation:(MAUserLocationRepresentation *)representation;

#pragma mark - Annotations func

/**
 * @brief 向地图窗口添加标注,需要实现MAMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View
 * @param annotation 要添加的标注
 */
- (void)addAnnotation:(id <MAAnnotation>)annotation;

/**
 * @brief 向地图窗口添加一组标注,需要实现MAMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View
 *@param annotations 要添加的标注数组
 */
- (void)addAnnotations:(NSArray *)annotations;

/**
 * @brief 移除标注
 * @param annotation 要移除的标注
 */
- (void)removeAnnotation:(id <MAAnnotation>)annotation;

/**
 * @brief 移除一组标注
 * @param annotations 要移除的标注数组
 */
- (void)removeAnnotations:(NSArray *)annotations;

/**
 * @brief 根据标注数据过去标注view
 * @param annotation 标注数据
 * @return 对应的标注view
 */
- (MAAnnotationView *)viewForAnnotation:(id <MAAnnotation>)annotation;

/**
 * @brief 从复用内存池中获取制定复用标识的annotation view
 * @param identifier 复用标识
 * @return annotation view
 */
- (MAAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier;

/**
 * @brief 选中标注数据对应的view
 * @param annotation 标注数据
 8 @param animated 是否有动画效果
 */
- (void)selectAnnotation:(id <MAAnnotation>)annotation animated:(BOOL)animated;

/**
 * @brief 取消选中标注数据对应的view
 * @param annotation 标注数据
 * @param animated 是否有动画效果
 */
- (void)deselectAnnotation:(id <MAAnnotation>)annotation animated:(BOOL)animated;

/**
 * @brief 获取指定投影矩形范围内的标注
 * @param mapRect 投影矩形范围
 * @return 标注集合
 */
- (NSSet *)annotationsInMapRect:(MAMapRect)mapRect;

/**
 * @brief 设置地图使其可以显示数组中所有的annotation, 如果数组中只有一个则直接设置地图中心为annotation的位置
 * @param annotations 需要显示的annotation
 * @param animated 是否执行动画
 */
- (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated;

/**
 * @brief 设置地图使其可以显示数组中所有的annotation, 如果数组中只有一个则直接设置地图中心为annotation的位置
 * @param annotations 需要显示的annotation
 * @param insets insets 嵌入边界
 * @param animated 是否执行动画
 */
- (void)showAnnotations:(NSArray *)annotations edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated;

#pragma mark - Overlays func

/**
 * @brief 查找指定overlay对应的Renderer,如果该Renderer尚未创建,返回nil
 * @param overlay 指定的overlay
 * @return 指定overlay对应的Renderer
 */
- (MAOverlayRenderer *)rendererForOverlay:(id <MAOverlay>)overlay;
- (MAOverlayView *)viewForOverlay:(id <MAOverlay>)overlay __attribute__ ((deprecated("use - (MAOverlayRenderer *)rendererForOverlay:(id <MAOverlay>)overlay instead")));

/**
 * @brief 向地图添加Overlay,需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer
 * @param overlay 要添加的overlay
 */
- (void)addOverlay:(id <MAOverlay>)overlay;

/**
 * @brief 向地图添加一组Overlay,需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer
 * @param overlays 要添加的overlay数组
 */
- (void)addOverlays:(NSArray *)overlays;

/**
 * @brief 移除Overlay
 * @param overlay 要移除的overlay
 */
- (void)removeOverlay:(id <MAOverlay>)overlay;

/**
 * @brief 移除一组Overlay
 * @param overlays 要移除的overlay数组
 */
- (void)removeOverlays:(NSArray *)overlays;

/**
 * @brief 在指定的索引处添加一个Overlay
 * @param overlay 要添加的overlay
 * @param index 指定的索引
 */
- (void)insertOverlay:(id <MAOverlay>)overlay atIndex:(NSUInteger)index;

/**
 * @brief 在交换指定索引处的Overlay
 * @param index1 索引1
 * @param index2 索引2
 */
- (void)exchangeOverlayAtIndex:(NSUInteger)index1 withOverlayAtIndex:(NSUInteger)index2;

/**
 * @brief 在指定的Overlay之上插入一个overlay
 * @param overlay 带添加的Overlay
 * @param sibling 用于指定相对位置的Overlay
 */
- (void)insertOverlay:(id <MAOverlay>)overlay aboveOverlay:(id <MAOverlay>)sibling;

/**
 * @brief 在指定的Overlay之下插入一个overlay
 * @param overlay 带添加的Overlay
 * @param sibling 用于指定相对位置的Overlay
 */
- (void)insertOverlay:(id <MAOverlay>)overlay belowOverlay:(id <MAOverlay>)sibling;

/**
 * @brief 设置地图使其可以显示数组中所有的overlay
 * @param overlays 需要显示的overlays
 * @param animated 是否执行动画
 */
- (void)showOverlays:(NSArray *)overlays animated:(BOOL)animated;

/**
 * @brief 设置地图使其可以显示数组中所有的overlay
 * @param overlays 需要显示的overlays
 * @param insets insets 嵌入边界
 * @param animated 是否执行动画
 */
- (void)showOverlays:(NSArray *)overlays edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated;

#pragma mark - Cache

/**
 * @brief 清除所有磁盘上缓存的地图数据
 */
- (void)clearDisk;

@end


#pragma mark - Snapshots

///地图view关于截图的类别
@interface MAMapView (Snapshot)

/**
 * @brief 在指定区域内截图(默认会包含该区域内的annotationView)
 * @param rect 指定的区域
 * @return 截图image
 */
- (UIImage *)takeSnapshotInRect:(CGRect)rect;

/**
 * @brief 获得地图当前可视区域截图
 * @param rect 指定截图区域
 * @param block 回调block
 */
- (void)takeSnapshotInRect:(CGRect)rect withCompletionBlock:(void (^)(UIImage *resultImage, CGRect rect))block;

@end

#pragma mark - LocationOption

///定位相关参数的类别
@interface MAMapView (LocationOption)

///设定定位的最小更新距离。默认为kCLDistanceFilterNone,会提示任何移动
@property (nonatomic) CLLocationDistance distanceFilter;

///设定定位精度。默认为kCLLocationAccuracyBest
@property (nonatomic) CLLocationAccuracy desiredAccuracy;

///设定最小更新角度。默认为1度,设定为kCLHeadingFilterNone会提示任何角度改变
@property (nonatomic) CLLocationDegrees headingFilter;

///指定定位是否会被系统自动暂停。默认为YES。只在iOS 6.0之后起作用
@property (nonatomic) BOOL pausesLocationUpdatesAutomatically;

///是否允许后台定位。默认为NO。只在iOS 9.0之后起作用。设置为YES的时候必须保证 Background Modes 中的 Location updates处于选中状态,否则会抛出异常
@property (nonatomic) BOOL allowsBackgroundLocationUpdates;

@end

#pragma mark - MAMapViewDelegate

///地图view的delegate
@protocol MAMapViewDelegate <NSObject>
@optional

/**
 * @brief 地图区域即将改变时会调用此接口
 * @param mapView 地图View
 * @param animated 是否动画
 */
- (void)mapView:(MAMapView *)mapView regionWillChangeAnimated:(BOOL)animated;

/**
 * @brief 地图区域改变完成后会调用此接口
 * @param mapView 地图View
 * @param animated 是否动画
 */
- (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated;

/**
 * @brief 地图将要发生移动时调用此接口
 * @param mapView 地图view
 * @param wasUserAction 标识是否是用户动作
 */
- (void)mapView:(MAMapView *)mapView mapWillMoveByUser:(BOOL)wasUserAction;

/**
 * @brief 地图移动结束后调用此接口
 * @param mapView 地图view
 * @param wasUserAction 标识是否是用户动作
 */
- (void)mapView:(MAMapView *)mapView mapDidMoveByUser:(BOOL)wasUserAction;

/**
 * @brief 地图将要发生缩放时调用此接口
 * @param mapView       地图view
 * @param wasUserAction 标识是否是用户动作
 */
- (void)mapView:(MAMapView *)mapView mapWillZoomByUser:(BOOL)wasUserAction;

/**
 * @brief 地图缩放结束后调用此接口
 * @param mapView       地图view
 * @param wasUserAction 标识是否是用户动作
 */
- (void)mapView:(MAMapView *)mapView mapDidZoomByUser:(BOOL)wasUserAction;

/**
 * @brief 单击地图底图调用此接口
 * @param mapView    地图View
 * @param coordinate 点击位置经纬度
 */
- (void)mapView:(MAMapView *)mapView didSingleTappedAtCoordinate:(CLLocationCoordinate2D)coordinate;

/**
 * @brief 长按地图底图调用此接口
 * @param mapView    地图View
 * @param coordinate 长按位置经纬度
 */
- (void)mapView:(MAMapView *)mapView didLongPressedAtCoordinate:(CLLocationCoordinate2D)coordinate;

/**
 * @brief 根据anntation生成对应的View
 * @param mapView 地图View
 * @param annotation 指定的标注
 * @return 生成的标注View
 */
- (MAAnnotationView*)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation;

/**
 * @brief 当mapView新添加annotation views时调用此接口
 * @param mapView 地图View
 * @param views 新添加的annotation views
 */
- (void)mapView:(MAMapView *)mapView didAddAnnotationViews:(NSArray *)views;

/**
 * @brief 当选中一个annotation views时调用此接口
 * @param mapView 地图View
 * @param view 选中的annotationView
 */
- (void)mapView:(MAMapView *)mapView didSelectAnnotationView:(MAAnnotationView *)view;

/**
 * @brief 当取消选中一个annotation views时调用此接口
 * @param mapView 地图View
 * @param view 取消选中的annotationView
 */
- (void)mapView:(MAMapView *)mapView didDeselectAnnotationView:(MAAnnotationView *)view;

/**
 * @brief 标注view的accessory view(必须继承自UIControl)被点击时调用此接口
 * @param mapView 地图View
 * @param view callout所属的标注view
 * @param control 对应的control
 */
- (void)mapView:(MAMapView *)mapView annotationView:(MAAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control;

/**
 * @brief 标注view的calloutview整体点击时调用此接口
 * @param mapView 地图的view
 * @param view calloutView所属的annotationView
 */
- (void)mapView:(MAMapView *)mapView didAnnotationViewCalloutTapped:(MAAnnotationView *)view;

/**
 * @brief 在地图View将要启动定位时调用此接口
 * @param mapView 地图View
 */
- (void)mapViewWillStartLocatingUser:(MAMapView *)mapView;

/**
 * @brief 在地图View停止定位后调用此接口
 * @param mapView 地图View
 */
- (void)mapViewDidStopLocatingUser:(MAMapView *)mapView;

/**
 * @brief 位置或者设备方向更新后调用此接口
 * @param mapView 地图View
 * @param userLocation 用户定位信息(包括位置与设备方向等数据)
 * @param updatingLocation 标示是否是location数据更新, YES:location数据更新 NO:heading数据更新
 */
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation;

/**
 * @brief 定位失败后调用此接口
 * @param mapView 地图View
 * @param error 错误号,参考CLError.h中定义的错误号
 */
- (void)mapView:(MAMapView *)mapView didFailToLocateUserWithError:(NSError *)error;

/**
 * @brief 当userTrackingMode改变时调用此接口
 * @param mapView 地图View
 * @param mode 改变后的mode
 * @param animated 动画
 */
- (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated;

/**
 * @brief 拖动annotation view时view的状态变化,ios3.2以后支持
 * @param mapView 地图View
 * @param view annotation view
 * @param newState 新状态
 * @param oldState 旧状态
 */
- (void)mapView:(MAMapView *)mapView annotationView:(MAAnnotationView *)view didChangeDragState:(MAAnnotationViewDragState)newState fromOldState:(MAAnnotationViewDragState)oldState;

/**
 * @brief 根据overlay生成对应的Renderer
 * @param mapView 地图View
 * @param overlay 指定的overlay
 * @return 生成的覆盖物Renderer
 */
- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay;

/**
 * @brief 当mapView新添加overlay renderer时调用此接口
 * @param mapView 地图View
 * @param renderers 新添加的overlay renderers
 */
- (void)mapView:(MAMapView *)mapView didAddOverlayRenderers:(NSArray *)renderers;

#pragma mark - Deprecated

- (MAOverlayView *)mapView:(MAMapView *)mapView viewForOverlay:(id <MAOverlay>)overlay __attribute__ ((deprecated("use - (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay instead")));

- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation __attribute__ ((deprecated("use -(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation instead")));

- (void)mapView:(MAMapView *)mapView didAddOverlayViews:(NSArray *)overlayViews __attribute__ ((deprecated("use - (void)mapView:(MAMapView *)mapView didAddOverlayRenderers:(NSArray *)renderers instead")));


@end