Files
OrderScheduling/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapView.h
2024-09-10 16:58:27 +08:00

1122 lines
40 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// MAMapView.h
// MAMapKit
//
// Created by 翁乐 on 3/17/16.
// Copyright © 2016 Amap. All rights reserved.
//
#import "MAConfig.h"
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "MAOverlay.h"
#import "MAOverlayRenderer.h"
#import "MAAnnotationView.h"
#import "MACircle.h"
#import "MAUserLocation.h"
#import "MAMapStatus.h"
#import "MAIndoorInfo.h"
#import "MAUserLocationRepresentation.h"
#import "MAMapCustomStyleOptions.h"
#import <AMapFoundationKit/AMapServices.h>
#import "MABaseEngineOverlay.h"
#import "MAPoiFilter.h"
///地图类型
typedef NS_ENUM(NSInteger, MAMapType)
{
MAMapTypeStandard = 0, ///< 普通地图
MAMapTypeSatellite, ///< 卫星地图
MAMapTypeStandardNight, ///< 夜间视图
MAMapTypeNavi, ///< 导航视图
MAMapTypeBus, ///< 公交视图
MAMapTypeNaviNight ///< 导航夜间视图
};
///用户跟踪模式
typedef NS_ENUM(NSInteger, MAUserTrackingMode)
{
MAUserTrackingModeNone = 0, ///< 不追踪用户的location更新
MAUserTrackingModeFollow = 1, ///< 追踪用户的location更新
MAUserTrackingModeFollowWithHeading = 2 ///< 追踪用户的location与heading更新
};
///交通拥堵状态
typedef NS_ENUM(NSInteger, MATrafficStatus)
{
MATrafficStatusSmooth = 1, ///< 1 通畅
MATrafficStatusSlow, ///< 2 缓行
MATrafficStatusJam, ///< 3 阻塞
MATrafficStatusSeriousJam, ///< 4 严重阻塞
MATrafficStatusExtremelySmooth, ///< 5 极度通畅
};
///绘制overlay的层级
typedef NS_ENUM(NSInteger, MAOverlayLevel) {
MAOverlayLevelAboveRoads = 0, ///< 在地图底图标注和兴趣点图标之下绘制overlay
MAOverlayLevelAboveLabels ///< 在地图底图标注和兴趣点图标之上绘制overlay
};
#pragma mark - 动画相关的key
///中心点(MAMapPoint)key, 封装成[NSValue valueWithMAMapPoint:]
extern NSString * const kMAMapLayerCenterMapPointKey;
///缩放级别key, 范围[minZoomLevel, maxZoomLevel], 封装成NSNumber
extern NSString * const kMAMapLayerZoomLevelKey;
///旋转角度key, 范围[0, 360), 封装成NSNumber
extern NSString * const kMAMapLayerRotationDegreeKey;
///摄像机俯视角度, 范围[0, 45], 封装成NSNumber
extern NSString * const kMAMapLayerCameraDegreeKey;
@protocol MAMapViewDelegate;
@interface MAMapView : UIView
///标记是否开启metal默认NO. 注意:因机型或系统限制(要求机型最低5S,系统最低iOS10)开启metal可能失败。
@property (nonatomic, assign, class) BOOL metalEnabled;
///是否打开地形图默认NO. 注意:需在地图创建前设置 since 8.2.0
@property (nonatomic, assign, class) BOOL terrainEnabled;
///是否有地形图授权默认YES. 如果没有授权会回调MAMapViewDelegate的 - (void)mapView:(MAMapView *)mapView didFailLoadTerrainWithError:(NSError *)error 方法 since 9.3.1
@property (nonatomic, assign, readonly) BOOL terrainAuth;
///地图view的delegate
@property (nonatomic, weak) id<MAMapViewDelegate> delegate;
///地图类型。注意自定义样式优先级高于mapType如开启了自定义样式要关闭自定义样式后mapType才生效
@property (nonatomic) MAMapType mapType;
///当前地图的中心点,改变该值时,地图的比例尺级别不会发生变化
@property (nonatomic) CLLocationCoordinate2D centerCoordinate;
///当前地图的经纬度范围,设定的该范围可能会被调整为适合地图窗口显示的范围
@property (nonatomic) MACoordinateRegion region;
///可见区域, 设定的该范围可能会被调整为适合地图窗口显示的范围
@property (nonatomic) MAMapRect visibleMapRect;
///设置可见地图区域的矩形边界,如限制地图只显示北京市范围
@property (nonatomic, assign) MACoordinateRegion limitRegion;
///设置可见地图区域的矩形边界,如限制地图只显示北京市范围
@property (nonatomic, assign) MAMapRect limitMapRect;
///缩放级别默认3-19有室内地图时为3-20
@property (nonatomic) CGFloat zoomLevel;
///最小缩放级别
@property (nonatomic) CGFloat minZoomLevel;
///最大缩放级别有室内地图时最大为20否则为19
@property (nonatomic) CGFloat maxZoomLevel;
///设置地图旋转角度(逆时针为正向)
@property (nonatomic) CGFloat rotationDegree;
///设置地图相机角度(范围为[0.f, 60.f]但高于40度的角度需要在16级以上才能生效)
@property (nonatomic) CGFloat cameraDegree;
///是否以screenAnchor点作为锚点进行缩放默认为YES。如果为NO则以手势中心点作为锚点
@property (nonatomic, assign) BOOL zoomingInPivotsAroundAnchorPoint;
///是否支持缩放, 默认YES
@property (nonatomic, getter = isZoomEnabled) BOOL zoomEnabled;
///是否支持平移, 默认YES
@property (nonatomic, getter = isScrollEnabled) BOOL scrollEnabled;
///是否支持旋转, 默认YES
@property (nonatomic, getter = isRotateEnabled) BOOL rotateEnabled;
///是否支持camera旋转, 默认YES
@property (nonatomic, getter = isRotateCameraEnabled) BOOL rotateCameraEnabled;
///是否显示楼块默认为YES
@property (nonatomic, getter = isShowsBuildings) BOOL showsBuildings;
///是否显示底图标注, 默认为YES
@property (nonatomic, assign, getter = isShowsLabels) BOOL showsLabels;
///是否显示交通路况图层, 默认为NO
@property (nonatomic, getter = isShowTraffic) BOOL showTraffic;
///设置实时交通颜色,key为 MATrafficStatus
@property (nonatomic, copy) NSDictionary <NSNumber *, UIColor *> *trafficStatus __attribute((deprecated("已废弃 since 7.8.0")));
///是否支持单击地图获取POI信息(默认为YES), 对应的回调是 -(void)mapView:(MAMapView *) didTouchPois:(NSArray *)
@property (nonatomic, assign) BOOL touchPOIEnabled;
///是否显示指南针, 默认YES
@property (nonatomic, assign) BOOL showsCompass;
///指南针原点位置
@property (nonatomic, assign) CGPoint compassOrigin;
///指南针的宽高
@property (nonatomic, readonly) CGSize compassSize;
///是否显示比例尺, 默认YES
@property (nonatomic, assign) BOOL showsScale;
///比例尺原点位置
@property (nonatomic, assign) CGPoint scaleOrigin;
///比例尺的最大宽高
@property (nonatomic, readonly) CGSize scaleSize;
///logo位置, 必须在mapView.bounds之内否则会被忽略
@property (nonatomic, assign) CGPoint logoCenter;
///logo的宽高
@property (nonatomic, readonly) CGSize logoSize;
///在当前缩放级别下, 基于地图中心点, 1 screen point 对应的距离(单位是米)
@property (nonatomic, readonly) double metersPerPointForCurrentZoom;
///标识当前地图中心位置是否在中国范围外。此属性不是精确判断,不能用于边界区域
@property (nonatomic, readonly) BOOL isAbroad;
///最大帧数有效的帧数为60、30、20、10等能被60整除的数。默认为60
@property (nonatomic, assign) NSUInteger maxRenderFrame;
///是否允许降帧默认为YES
@property (nonatomic, assign) BOOL isAllowDecreaseFrame;
///停止/开启 OpenGLES绘制, 默认NO. 对应回调是 - (void)mapView:(MAMapView *) didChangeOpenGLESDisabled:(BOOL)
@property (nonatomic, assign) BOOL openGLESDisabled __attribute((deprecated("已废弃since 7.9.0请使用renderringDisabled属性")));
///停止/开启 地图绘制, 默认NO.
@property (nonatomic, assign) BOOL renderringDisabled;
///地图的视图锚点。坐标系归一化,(0, 0)为MAMapView左上角(1, 1)为右下角。默认为(0.5, 0.5),即当前地图的视图中心 since 5.0.0
@property (nonatomic, assign) CGPoint screenAnchor;
///地图渲染的runloop mode默认为NSRunLoopCommonModes。如果是和UIScrollView一起使用且不希望地图在scrollView拖动时渲染请设置此值为NSDefaultRunLoopMode。since 5.1.0
@property (nonatomic, copy) NSRunLoopMode runLoopMode;
///设置语言。中文:@0: 英文:@1. 英文使用注意事项1、不能和自定义地图样式同时使用2、英文状态只在MAMapTypeStandard生效
@property (nonatomic, strong) NSNumber *mapLanguage;
/**
* @brief 设定当前地图的经纬度范围,该范围可能会被调整为适合地图窗口显示的范围
* @param region 要设定的经纬度范围
* @param animated 是否动画设置
*/
- (void)setRegion:(MACoordinateRegion)region animated:(BOOL)animated;
/**
* @brief 根据当前地图视图frame的大小调整region范围
* @param region 要调整的经纬度范围
* @return 调整后的经纬度范围
*/
- (MACoordinateRegion)regionThatFits:(MACoordinateRegion)region;
/**
* @brief 设置可见区域
* @param mapRect 要设定的可见区域
* @param animated 是否动画设置
*/
- (void)setVisibleMapRect:(MAMapRect)mapRect animated:(BOOL)animated;
/**
* @brief 重新计算可见地图矩形区域,使之匹配mapview长宽比
* @param mapRect 要调整的地图矩形区域
* @return 调整后的地图矩形区域
*/
- (MAMapRect)mapRectThatFits:(MAMapRect)mapRect;
/**
* @brief 根据边缘插入来调整地图矩形区域使之匹配mapview加insets后的长宽比
* @param mapRect 要调整的地图矩形区域
* @param insets 边缘插入
* @return 调整后的地图矩形区域
*/
- (MAMapRect)mapRectThatFits:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets;
/**
* @brief 设置可见地图矩形区域
* @param insets 边缘插入
* @param mapRect 要显示的地图矩形区域
* @param animated 是否动画效果
*/
- (void)setVisibleMapRect:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated;
/**
* @brief 设置可见地图矩形区域
* @param insets 边缘插入
* @param mapRect 要显示的地图矩形区域
* @param animated 是否动画效果
* @param duration 动画时长,单位秒
*/
- (void)setVisibleMapRect:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated duration:(CFTimeInterval)duration;
/**
* @brief 设置当前地图的中心点,改变该值时,地图的比例尺级别不会发生变化
* @param coordinate 要设置的中心点
* @param animated 是否动画设置
*/
- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;
/**
* @brief 设置缩放级别默认3-19有室内地图时为3-20
* @param zoomLevel 要设置的缩放级别
* @param animated 是否动画设置
*/
- (void)setZoomLevel:(CGFloat)zoomLevel animated:(BOOL)animated;
/**
* @brief 根据指定的枢纽点来缩放地图
* @param zoomLevel 缩放级别
* @param pivot 枢纽点(基于地图view的坐标系)
* @param animated 是否动画
*/
- (void)setZoomLevel:(CGFloat)zoomLevel atPivot:(CGPoint)pivot animated:(BOOL)animated;
/**
* @brief 设置地图旋转角度(逆时针为正向)
* @param rotationDegree 旋转角度, 如当前角度是0720表示逆时针旋转2周-720表示正时针旋转2周
* @param animated 动画
* @param duration 动画时间
*/
- (void)setRotationDegree:(CGFloat)rotationDegree animated:(BOOL)animated duration:(CFTimeInterval)duration;
/**
* @brief 设置地图相机角度(范围为[0.f, 60.f]但高于40度的角度需要在16级以上才能生效)
* @param cameraDegree 要设置的相机角度
* @param animated 是否动画
* @param duration 动画时间
*/
- (void)setCameraDegree:(CGFloat)cameraDegree animated:(BOOL)animated duration:(CFTimeInterval)duration;
/**
* @brief 获取地图状态
* @return 地图状态
*/
- (MAMapStatus *)getMapStatus;
/**
* @brief 设置地图状态
* @param status 要设置的地图状态
* @param animated 是否动画
*/
- (void)setMapStatus:(MAMapStatus *)status animated:(BOOL)animated;
/**
* @brief 设置地图状态
* @param status 要设置的地图状态
* @param animated 是否动画
* @param duration 动画时间默认动画时间为0.35s
*/
- (void)setMapStatus:(MAMapStatus *)status
animated:(BOOL)animated
duration:(CFTimeInterval)duration;
/**
* @brief 设置指南针的图片
* @param image 新的指南针图片
*/
- (void)setCompassImage:(UIImage *)image;
/**
* @brief 在指定区域内截图(默认会包含该区域内的annotationView),注意不要在地图回调方法内直接调用
* @param rect 指定的区域
* @return 截图image
*/
- (UIImage *)takeSnapshotInRect:(CGRect)rect __attribute((deprecated("已废弃请使用takeSnapshotInRect:withCompletionBlock:方法 since 6.0.0")));
/**
* @brief 异步在指定区域内截图(默认会包含该区域内的annotationView), 地图载入完整时回调
* @param rect 指定的区域
* @param block 回调block(resultImage:返回的图片,state0载入不完整1完整
*/
- (void)takeSnapshotInRect:(CGRect)rect withCompletionBlock:(void (^)(UIImage *resultImage, NSInteger state))block;
/**
* @brief 异步在指定区域内截图(默认会包含该区域内的annotationView), 地图载入完整时回调 (since 7.8.0)
* @param rect 指定的区域
* @param timeout 超时时间
* @param block 回调block(resultImage:返回的图片,state0载入不完整1完整
*/
- (void)takeSnapshotInRect:(CGRect)rect timeoutInterval:(NSTimeInterval)timeout completionBlock:(void (^)(UIImage *resultImage, NSInteger state))block;
/**
* @brief 在指定的缩放级别下, 基于地图中心点, 1 screen point 对应的距离(单位是米).
* @param zoomLevel 指定的缩放级别, 在[minZoomLevel, maxZoomLevel]范围内.
* @return 对应的距离(单位是米)
*/
- (double)metersPerPointForZoomLevel:(CGFloat)zoomLevel;
/**
* @brief 将经纬度转换为指定view坐标系的坐标
* @param coordinate 经纬度
* @param view 指定的view
* @return 基于指定view坐标系的坐标
*/
- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view;
/**
* @brief 将指定view坐标系的坐标转换为经纬度
* @param point 指定view坐标系的坐标
* @param view 指定的view
* @return 经纬度
*/
- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view;
/**
* @brief 将经纬度region转换为指定view坐标系的rect
* @param region 经纬度region
* @param view 指定的view
* @return 指定view坐标系的rect
*/
- (CGRect)convertRegion:(MACoordinateRegion)region toRectToView:(UIView *)view;
/**
* @brief 将指定view坐标系的rect转换为经纬度region
* @param rect 指定view坐标系的rect
* @param view 指定的view
* @return 经纬度region
*/
- (MACoordinateRegion)convertRect:(CGRect)rect toRegionFromView:(UIView *)view;
/**
* @brief 重新加载地图
*
* 将离线地图解压到 Documents/3dvmap/ 目录下后,调用此函数使离线数据生效,
* 对应的回调分别是 offlineDataWillReload:(MAMapView *)mapView, offlineDataDidReload:(MAMapView *)mapView.
*/
- (void)reloadMap;
/**
* @brief 清除所有磁盘上缓存的地图数据(不包括离线地图)
*/
- (void)clearDisk;
/**
* @brief 重新加载内部纹理在纹理被错误释放时可以执行此方法。since 5.4.0
*/
- (void)reloadInternalTexture;
/**
* @brief 获取地图审图号。如果启用了“自定义样式”功能(customMapStyleEnabled 为 YES)则返回nil。since 5.4.0
* @return 地图审图号
*/
- (NSString *)mapContentApprovalNumber;
/**
* @brief 获取卫星图片审图号。since 5.4.0
* @return 卫星图片审图号
*/
- (NSString *)satelliteImageApprovalNumber;
/**
* @brief 获取地形图审图号。since 8.2.0
* @return 地形图审图号
*/
- (NSString *)terrainApprovalNumber;
/**
* @brief 添加CAKeyframeAnimation动画。since 6.0.0
* @param mapCenterAnimation 地图中心点动画
* @param zoomAnimation 放大缩小动画
* @param rotateAnimation 旋转动画
* @param cameraDegreeAnimation 仰角动画
*/
- (void)addAnimationWith:(CAKeyframeAnimation *)mapCenterAnimation
zoomAnimation:(CAKeyframeAnimation *)zoomAnimation
rotateAnimation:(CAKeyframeAnimation *)rotateAnimation
cameraDegreeAnimation:(CAKeyframeAnimation *)cameraDegreeAnimation;
/**
* @brief 强制刷新。since 6.0.0
*/
- (void)forceRefresh;
/**
* @brief 设置在建道路图层是否显示。默认NOsince 7.7.0
* @param enabled 是否显示
*/
- (void)setConstructingRoadEnable:(BOOL)enabled;
#pragma mark - Privacy 隐私合规
/**
* @brief 更新App是否显示隐私弹窗的状态隐私弹窗是否包含高德SDK隐私协议内容的状态. 注意必须在MAMapView实例化之前调用 since 8.1.0
* @param showStatus 隐私弹窗状态
* @param containStatus 包含高德SDK隐私协议状态
*/
+ (void)updatePrivacyShow:(AMapPrivacyShowStatus)showStatus privacyInfo:(AMapPrivacyInfoStatus)containStatus;
/**
* @brief 更新用户授权高德SDK隐私协议状态. 注意必须在MAMapView实例化之前调用 since 8.1.0
* @param agreeStatus 用户授权高德SDK隐私协议状态
*/
+ (void)updatePrivacyAgree:(AMapPrivacyAgreeStatus)agreeStatus;
@end
@interface MAMapView (Annotation)
///所有添加的标注, 注意从5.3.0开始返回数组内不再包含定位蓝点userLocation
@property (nonatomic, readonly) NSArray *annotations;
///处于选中状态的标注数据数据(其count == 0 或 1)
@property (nonatomic, copy) NSArray *selectedAnnotations;
///annotation 可见区域
@property (nonatomic, readonly) CGRect annotationVisibleRect;
/**
* @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 获取指定投影矩形范围内的标注
* @param mapRect 投影矩形范围
* @return 标注集合
*/
- (NSSet *)annotationsInMapRect:(MAMapRect)mapRect;
/**
* @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。注意如果annotation对应的annotationView因不在屏幕范围内而被移入复用池为了完成选中操作会将对应的annotationView添加到地图上并将地图中心点移至annotation.coordinate的位置。
* @param annotation 标注数据
* @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 设置地图使其可以显示数组中所有的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;
@end
@interface MAMapView (UserLocation)
///是否显示用户位置
@property (nonatomic) BOOL showsUserLocation;
///当前的位置数据
@property (nonatomic, readonly) MAUserLocation *userLocation;
///是否自定义用户位置精度圈(userLocationAccuracyCircle)对应的 view, 默认为 NO.\n 如果为YES: 会调用 - (MAOverlayRenderer *)mapView (MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay 若返回nil, 则不加载.\n 如果为NO : 会使用默认的样式.
@property (nonatomic) BOOL customizeUserLocationAccuracyCircleRepresentation;
///用户位置精度圈 对应的overlay
@property (nonatomic, readonly) MACircle *userLocationAccuracyCircle;
///定位用户位置的模式, 注意在follow模式下设置地图中心点、设置可见区域、滑动手势、选择annotation操作会取消follow模式并触发 - (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated;
@property (nonatomic) MAUserTrackingMode userTrackingMode;
///当前位置再地图中是否可见
@property (nonatomic, readonly, getter=isUserLocationVisible) BOOL userLocationVisible;
///设定定位的最小更新距离。默认为kCLDistanceFilterNone会提示任何移动
@property (nonatomic) CLLocationDistance distanceFilter;
///设定定位精度。默认为kCLLocationAccuracyBest
@property (nonatomic) CLLocationAccuracy desiredAccuracy;
///设定最小更新角度。默认为1度设定为kCLHeadingFilterNone会提示任何角度改变
@property (nonatomic) CLLocationDegrees headingFilter;
///指定定位是否会被系统自动暂停
@property (nonatomic) BOOL pausesLocationUpdatesAutomatically;
///是否允许后台定位。默认为NO。只在iOS 9.0之后起作用。\n 设置为YES的时候必须保证 Background Modes 中的 Location updates处于选中状态否则会抛出异常。\n 注意定位必须在停止的状态下设置showsUserLocation = NO否则无效
@property (nonatomic) BOOL allowsBackgroundLocationUpdates;
/**
* @brief 设置定位用户位置的模式
* @param mode 要设置的模式
* @param animated 是否动画设置
*/
- (void)setUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated;
/**
* @brief 设定UserLocationView样式。如果用户自定义了userlocation的annotationView或者该annotationView还未添加到地图上此方法将不起作用
* @param representation 样式信息对象
*/
- (void)updateUserLocationRepresentation:(MAUserLocationRepresentation *)representation;
@end
@interface MAMapView (Overlay)
///所有添加的Overlay
@property (nonatomic, readonly) NSArray *overlays;
/**
* @brief 取位于level下的overlays
* @param level 层级
*/
- (NSArray *)overlaysInLevel:(MAOverlayLevel)level;
/**
* @brief 向地图窗口添加Overlay。
* 需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer。
* 默认添加层级MAGroundOverlay默认层级为MAOverlayLevelAboveRoads其余overlay类型默认层级为MAOverlayLevelAboveLabels
* @param overlay 要添加的overlay
*/
- (void)addOverlay:(id <MAOverlay>)overlay;
/**
* @brief 向地图窗口添加一组Overlay需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer
* 默认添加层级MAOverlayLevelAboveLabels
* @param overlays 要添加的overlay数组
*/
- (void)addOverlays:(NSArray *)overlays;
/**
* @brief 向地图窗口添加Overlay需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer
* @param overlay 要添加的overlay
* @param level 添加的overlay所在层级
*/
- (void)addOverlay:(id <MAOverlay>)overlay level:(MAOverlayLevel)level;
/**
* @brief 向地图窗口添加一组Overlay需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer
* @param overlays 要添加的overlay数组
* @param level 添加的overlay所在层级
*/
- (void)addOverlays:(NSArray *)overlays level:(MAOverlayLevel)level;
/**
* @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 指定的索引
* @param level 指定的层级
* 注:各个层级的索引分开计数;
* 若index大于level层级的最大索引则添加至level层级的最大索引之后。
*/
- (void)insertOverlay:(id <MAOverlay>)overlay atIndex:(NSUInteger)index level:(MAOverlayLevel)level;
/**
* @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 overlay 要添加的overlay
* @param index 指定的索引
*/
- (void)insertOverlay:(id <MAOverlay>)overlay atIndex:(NSUInteger)index;
/**
* @brief 在MAOverlayLevelAboveLabels上交换指定索引处的Overlay
* @param index1 索引1
* @param index2 索引2
*/
- (void)exchangeOverlayAtIndex:(NSUInteger)index1 withOverlayAtIndex:(NSUInteger)index2;
/**
* @brief 交换指定索引处的Overlay
* @param index1 索引1
* @param index2 索引2
* @param level 所处层级
*/
- (void)exchangeOverlayAtIndex:(NSUInteger)index1 withOverlayAtIndex:(NSUInteger)index2 atLevel:(MAOverlayLevel)level;
/**
* @brief 交换两个overlay
* @param overlay1 overlay1
* @param overlay2 overlay2
*/
- (void)exchangeOverlay:(id <MAOverlay>)overlay1 withOverlay:(id <MAOverlay>)overlay2;
/**
* @brief 查找指定overlay对应的Renderer如果该View尚未创建返回nil
* @param overlay 指定的overlay
* @return 指定overlay对应的Renderer
*/
- (MAOverlayRenderer *)rendererForOverlay:(id <MAOverlay>)overlay;
/**
* @brief 设置地图使其可以显示数组中所有的overlay, 如果数组中只有一个则直接设置地图中心为overlay的位置。
* @param overlays 需要显示的overlays
* @param animated 是否执行动画
*/
- (void)showOverlays:(NSArray *)overlays animated:(BOOL)animated;
/**
* @brief 设置地图使其可以显示数组中所有的overlay, 如果数组中只有一个则直接设置地图中心为overlay的位置。
* @param overlays 需要显示的overlays
* @param insets insets 嵌入边界
* @param animated 是否执行动画
*/
- (void)showOverlays:(NSArray *)overlays edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated;
/**
* @brief 获取点击选中的polylineRenderer, 注意开启polylineRenderer的点击选中功能需设置userInteractionEnabled=YES。since 7.1.0
* @param tappedCoord 点击点的坐标
* @param traverseAll 如果有polyline重合情况是否返回多个。NO: 只返回最上面的 YES:返回所有
* @return 返回选中的polylineRenderer数组最上面的在第一个
* */
- (NSArray*)getHittedPolylinesWith:(CLLocationCoordinate2D)tappedCoord traverseAll:(BOOL)traverseAll;
@end
#if MA_INCLUDE_INDOOR
@interface MAMapView (Indoor)
///是否显示室内地图, 默认NO
@property (nonatomic, getter = isShowsIndoorMap) BOOL showsIndoorMap;
///是否显示室内地图默认控件, 默认YES
@property (nonatomic, getter = isShowsIndoorMapControl) BOOL showsIndoorMapControl;
///默认室内地图控件的最大宽高
@property (nonatomic, readonly) CGSize indoorMapControlSize;
/**
* @brief 设置默认室内地图控件位置
* @param origin 左上角点位置
*/
- (void)setIndoorMapControlOrigin:(CGPoint)origin;
/**
* @brief 设置当前室内地图楼层数
* @param floorIndex 要设置的楼层数
*/
- (void)setCurrentIndoorMapFloorIndex:(NSInteger)floorIndex;
/**
* @brief 清空室内地图缓存
*/
- (void)clearIndoorMapCache;
@end
#endif
///自定义样式
@interface MAMapView (CustomMapStyle)
///是否开启自定义样式, 默认NO. since 5.0.0
@property (nonatomic, assign) BOOL customMapStyleEnabled;
/**
* @brief 自定义地图样式设置,可以支持分级样式配置,如控制不同级别显示不同的颜色(自7.0.0开始样式有更新,旧的样式文件不能继续使用,必须到官网重新导出新样式文件。 自6.6.0开始使用新版样式旧版样式无法在新版接口setCustomMapStyleOptions:(MAMapCustomStyleOptions *)styleOptions中使用请到官网(lbs.amap.com)更新新版样式文件.)
* @param styleOptions 自定义样式options. since 6.6.0
*/
- (void)setCustomMapStyleOptions:(MAMapCustomStyleOptions *)styleOptions;
@end
/// 建筑物操作 @since 9.6.0
@interface MAMapView (Buildings)
/**
* @brief 隐藏建筑物
* @param polygon 围栏的经纬度信息
* @param polygonSize 围栏的size需 >= 3 否则无法构成围栏)
* @return 隐藏成功返回当前的operationId>= 0 失败返回-1
*/
- (NSInteger)hideBuildingsWithPolygon:(CLLocationCoordinate2D *)polygon polygonSize:(NSUInteger)polygonSize;
/**
* @brief 显示建筑物
* @param operationId 操作Id隐藏建筑物接口的返回值
*/
- (void)showHiddenBuildingsWithOperationId:(NSInteger)operationId;
@end
@interface MAMapView (EngineOverlay)
/**
* @brief 向地图窗口添加Overlay。
* @param overlay 要添加的engine overlay
*/
- (void)addEngineOverlay:(MABaseEngineOverlay *)overlay;
@end
@interface MAMapView (PoiFilter)
/**
* @brief 添加poi避让框
* @param poiFilter
*/
- (void)addPoiFilter:(MAPoiFilter *)poiFilter;
/**
* @brief 移除poi避让框
* @param keyName 名称
*/
- (void)removePoiFilter:(NSString *)keyName;
/**
* @brief 清除poi避让框
*/
- (void)clearPoiFilter;
@end
#pragma mark - MAMapViewDelegate
@protocol MAMapViewDelegate <NSObject>
@optional
/**
* @brief 地图区域改变过程中会调用此接口 since 4.6.0
* @param mapView 地图View
*/
- (void)mapViewRegionChanged:(MAMapView *)mapView;
/**
* @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 地图区域即将改变时会调用此接口如实现此接口则不会触发回掉mapView:regionWillChangeAnimated:
* @param mapView 地图View
* @param animated 是否动画
* @param wasUserAction 标识是否是用户动作
*/
- (void)mapView:(MAMapView *)mapView regionWillChangeAnimated:(BOOL)animated wasUserAction:(BOOL)wasUserAction;
/**
* @brief 地图区域改变完成后会调用此接口如实现此接口则不会触发回掉mapView:regionDidChangeAnimated:
* @param mapView 地图View
* @param animated 是否动画
* @param wasUserAction 标识是否是用户动作
*/
- (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated wasUserAction:(BOOL)wasUserAction;
/**
* @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
*/
- (void)mapViewWillStartLoadingMap:(MAMapView *)mapView;
/**
* @brief 地图加载成功
* @param mapView 地图View
*/
- (void)mapViewDidFinishLoadingMap:(MAMapView *)mapView;
/**
* @brief 地图加载失败
* @param mapView 地图View
* @param error 错误信息
*/
- (void)mapViewDidFailLoadingMap:(MAMapView *)mapView withError:(NSError *)error;
/**
* @brief 地形图加载失败
* @param mapView 地图View
* @param error 错误信息
*/
- (void)mapView:(MAMapView *)mapView didFailLoadTerrainWithError:(NSError *)error;
/**
* @brief 根据anntation生成对应的View。
注意:
1、5.1.0后由于定位蓝点增加了平滑移动功能如果在开启定位的情况先添加annotation需要在此回调方法中判断annotation是否为MAUserLocation从而返回正确的View。
if ([annotation isKindOfClass:[MAUserLocation class]]) {
return nil;
}
2、请不要在此回调中对annotation进行select和deselect操作此时annotationView还未添加到mapview。
* @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 view时调用此接口. 注意如果已经是选中状态,再次点击不会触发此回调。取消选中需调用-(void)deselectAnnotation:animated:
* @param mapView 地图View
* @param view 选中的annotation view
*/
- (void)mapView:(MAMapView *)mapView didSelectAnnotationView:(MAAnnotationView *)view;
/**
* @brief 当取消选中一个annotation view时调用此接口
* @param mapView 地图View
* @param view 取消选中的annotation view
*/
- (void)mapView:(MAMapView *)mapView didDeselectAnnotationView:(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 当plist配置NSLocationAlwaysUsageDescription或者NSLocationAlwaysAndWhenInUseUsageDescription并且[CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined会调用代理的此方法。
此方法实现调用后台权限API即可 该回调必须实现 [locationManager requestAlwaysAuthorization] ; since 6.8.0
* @param locationManager 地图的CLLocationManager。
*/
- (void)mapViewRequireLocationAuth:(CLLocationManager *)locationManager;
/**
* @brief 定位失败后,会调用此函数
* @param mapView 地图View
* @param error 错误号参考CLError.h中定义的错误号
*/
- (void)mapView:(MAMapView *)mapView didFailToLocateUserWithError:(NSError *)error;
/**
* @brief 拖动annotation view时view的状态变化
* @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 renderers时调用此接口
* @param mapView 地图View
* @param overlayRenderers 新添加的overlay renderers
*/
- (void)mapView:(MAMapView *)mapView didAddOverlayRenderers:(NSArray *)overlayRenderers;
/**
* @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整体点击时触发该回调。只有使用默认calloutview时才生效。
* @param mapView 地图的view
* @param view calloutView所属的annotationView
*/
- (void)mapView:(MAMapView *)mapView didAnnotationViewCalloutTapped:(MAAnnotationView *)view;
/**
* @brief 标注view被点击时触发该回调。since 5.7.0
* @param mapView 地图的view
* @param view annotationView
*/
- (void)mapView:(MAMapView *)mapView didAnnotationViewTapped:(MAAnnotationView *)view;
/**
* @brief 当userTrackingMode改变时调用此接口
* @param mapView 地图View
* @param mode 改变后的mode
* @param animated 动画
*/
- (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated;
/**
* @brief 当openGLESDisabled变量改变时调用此接口
* @param mapView 地图View
* @param openGLESDisabled 改变后的openGLESDisabled
*/
- (void)mapView:(MAMapView *)mapView didChangeOpenGLESDisabled:(BOOL)openGLESDisabled __attribute((deprecated("已废弃since 7.9.0")));
/**
* @brief 当touchPOIEnabled == YES时单击地图使用该回调获取POI信息
* @param mapView 地图View
* @param pois 获取到的poi数组(由MATouchPoi组成)
*/
- (void)mapView:(MAMapView *)mapView didTouchPois:(NSArray *)pois;
/**
* @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 地图初始化完成(在此之后,可以进行坐标计算)
* @param mapView 地图View
*/
- (void)mapInitComplete:(MAMapView *)mapView;
#if MA_INCLUDE_INDOOR
/**
* @brief 室内地图出现,返回室内地图信息
*
* @param mapView 地图View
* @param indoorInfo 室内地图信息
*/
- (void)mapView:(MAMapView *)mapView didIndoorMapShowed:(MAIndoorInfo *)indoorInfo;
/**
* @brief 室内地图楼层发生变化,返回变化的楼层
*
* @param mapView 地图View
* @param indoorInfo 变化的楼层
*/
- (void)mapView:(MAMapView *)mapView didIndoorMapFloorIndexChanged:(MAIndoorInfo *)indoorInfo;
/**
* @brief 室内地图消失后,返回室内地图信息
*
* @param mapView 地图View
* @param indoorInfo 室内地图信息
*/
- (void)mapView:(MAMapView *)mapView didIndoorMapHidden:(MAIndoorInfo *)indoorInfo;
#endif //end of MA_INCLUDE_INDOOR
/**
* @brief 离线地图数据将要被加载, 调用reloadMap会触发该回调离线数据生效前的回调.
* @param mapView 地图View
*/
- (void)offlineDataWillReload:(MAMapView *)mapView;
/**
* @brief 离线地图数据加载完成, 调用reloadMap会触发该回调离线数据生效后的回调.
* @param mapView 地图View
*/
- (void)offlineDataDidReload:(MAMapView *)mapView;
@end