BBASMMapAdapterProtocol.h 8.61 KB
//
//  BBASMMapAdapterProtocol.h
//  SWAN
//
//  Created by baidu on 2018/9/10.
//  Copyright © 2018年 baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
#import "BBASMAdapterBaseImplement.h"
#import <BBASchemeDispatcher/BBASchemeDispatcher.h>

typedef NS_ENUM(NSInteger, BBASMMapRegionChangeReason) {
    BBASMMapRegionChangeReasonUnknown   = -1,   // 默认值, 未获取正确原因时使用的值.
    BBASMMapRegionChangeReasonGesture   = 1,    // 手势触发导致地图区域变化,如双击、拖拽、滑动地图
    BBASMMapRegionChangeReasonEvent     = 2,    // 地图上控件事件,如点击指南针返回2D地图。
    BBASMMapRegionChangeReasonAPIs      = 3,    // 开发者调用接口、设置地图参数等导致地图区域变化
};

@protocol BBASMMapMarkerProtocol;
@protocol BBASMMapPolylineProtocol;
@protocol BBASMMapPolygonsProtocol;
@protocol BBASMMapCircleProtocol;
@protocol BBASMMapControlViewProtocol;
@protocol BBASMMapUIAdapterProtocol;

@protocol BBASMMapPolylineViewProtocol<NSObject>
@property (strong) UIColor *fillColor;
@property (strong) UIColor *strokeColor;
@end


@protocol BBASMMapAdapterProtocol;
@protocol BBASMMapKitControllerDelegate <NSObject>
/**
 获取相对路径的全路径
 
 @param controller id<BBASMMapAdapterProtocol>
 @param path path
 @return 全路径
 */
- (NSString *)mapKitController:(id<BBASMMapAdapterProtocol>)controller
        fullPathOfRelativePath:(NSString *)path;
/**
 定位授权
 
 @param complete 请求系统授权完成回调
 */
- (void)requestLocationAuthFinish:(void(^)(BOOL result))complete;

@optional

@property (nonatomic, strong) NSString *appId;
/**
 控件点击回调
 */
- (void)mapKitController:(id<BBASMMapAdapterProtocol>)controller didClickedControl:(id<BBASMMapControlViewProtocol>)control;

//点击标记点时触发
- (void)mapKitController:(id<BBASMMapAdapterProtocol>)controller didClickedMarker:(id<BBASMMapMarkerProtocol>)marker;

//当点击annotation view弹出的泡泡时,调用此接口
- (void)mapKitController:(id<BBASMMapAdapterProtocol>)controller didClickedCallOut:(id<BBASMMapMarkerProtocol>)callOut;
//视野发生变化
- (void)regionWillChange:(id<BBASMMapAdapterProtocol>)controller;
//视野发生变化时触发
- (void)regionDidChange:(id<BBASMMapAdapterProtocol>)controller;

/**
 
 地图显示区域变化时触发,
 
 @param controller 触发 regionChange 的来源 controller.
 @param reason 触发 regionChange 的原因.
 */
- (void)regionDidChange:(id<BBASMMapAdapterProtocol>)controller reason:(BBASMMapRegionChangeReason)reason;

//渲染完成
- (void)mapViewDidFinishRendering:(id<BBASMMapAdapterProtocol>)controller;

//地图点击
- (void)mapKitController:(id<BBASMMapAdapterProtocol>)controller didClickedMap:(CLLocationCoordinate2D)coordinate;

//用户位置改变
- (void)userLocationChanged:(id<BBASMMapAdapterProtocol>)controller;

// 点中地图Poi标注
- (void)mapKitController:(id<BBASMMapAdapterProtocol>)controller onClickedMapPoiName:(NSString *)name PoiCoordinate:(CLLocationCoordinate2D)coordinate;

/**
 * @brief 请求权限
 * @param appId appId
 * @param complete 完成回调
 */
- (void)requestLocationAuthWithAppId:(NSString *)appId completionBlock:(void(^)(BOOL result))complete;

@end

@protocol BBASMMapKitUserLocationProtocol<NSObject>
/// 位置更新状态,如果正在更新位置信息,则该值为YES
@property (readonly, nonatomic, getter=isUpdating) BOOL updating;

/// 位置信息,尚未定位成功,则该值为nil
@property (readonly, nonatomic,strong) CLLocation *location;

/// heading信息,尚未定位成功,则该值为nil
@property (readonly, nonatomic, strong) CLHeading *heading;

/// 定位标注点要显示的标题信息
@property (copy, nonatomic) NSString *title;

/// 定位标注点要显示的子标题信息.
@property (copy, nonatomic) NSString *subtitle;

@end

@protocol BBASMMapAdapterProtocol <NSObject>

@property (nonatomic, strong) NSString *appId;

/**
 绑定上下文信息
 */
@property(nonatomic,strong)id context;
/**
 地图ID
 */
@property(nonatomic,copy)NSString *mapID;

/**
 比例尺的位置,设定坐标以MapView左上角为原点,向右向下增长
 */
@property (nonatomic) CGPoint mapScaleBarPosition;

/**
端能力派发器
*/
@property (nonatomic, strong) BBASchemeDispatcher *dispatcher;
/**
 代理
 */
@property(nonatomic,weak)id<BBASMMapKitControllerDelegate> delegate;

/**
 开启地图服务,该服务仅开启一次
  */
+ (void)startMapService;

/**
 获取mapView
 
 @return 地图View
 */
- (UIView *)mapView;

/**
 创建map组件
 
 @param mapAttr map 配置
 @return 地图View
 */
- (UIView *)mapView:(id<BBASMMapUIAdapterProtocol>)mapAttr;
/**
 销毁map组件
 */
- (BOOL)destroy;
/**
 移动地图中心点到location位置 无动画
 
 @param location location
 */
- (void)moveToLocation:(CLLocationCoordinate2D)location;

/**
 移动地图中心点到location位置
 
 @param location location
 @param animated YES 带动画
 */
- (void)moveToLocation:(CLLocationCoordinate2D)location animated:(BOOL)animated;
/**
 获取当前地图的视野范围,返回西南角,东北角的经纬度
 
 @return @[西南角,东北角]
 */
- (NSArray<CLLocation*> *)getRegion;
/**
 获取当前地图的缩放级别
 
 @return float
 */
- (float)getScale;
/**
 获取当前地图中心的经纬度
 
 @return CLLocationCoordinate2D
 */
- (CLLocationCoordinate2D)getCenterLocation;



/**
 在地图上显示圆
 
 @param aCircle BBASMMapKitCircle
 */
- (BOOL)showCircle:(id<BBASMMapCircleProtocol>)aCircle;
/**
 在地图上画线 指定一系列坐标点,从数组第一项连线至最后一项
 
 @param polyline BBASMMapKitPolyline
 */
- (BOOL)showPolyline:(id<BBASMMapPolylineProtocol>)polyline;
/**
 在地图上画多边形
 
 @param polygons BBASMMapKitPolygons
 */
- (BOOL)showPolygons:(id<BBASMMapPolygonsProtocol>)polygons;
/**
 添加标记
 
 @param marker BBASMMapKitMarker
 */
- (BOOL)showMark:(id<BBASMMapMarkerProtocol>)marker;
/**
 在地图上添加控件
 
 @param control BBASMMapKitControl
 */
- (void)showControl:(id<BBASMMapControlViewProtocol>)control;
/**
 显示用户位置
 
 @param show YES显示
 */
- (void)showUserLocation:(BOOL)show;
/**
 用户所在位置经纬度
 
 @return CLLocationCoordinate2D
 */
- (CLLocationCoordinate2D)userLocation;

/**
 更新map配置
 
 @param attr BBASMMapKitMap
 */
- (void)update:(id<BBASMMapUIAdapterProtocol>)attr;
/**
 设置map参数
 
 @param attr BBASMMapKitMap
 */
- (void)setMapAttr:(id<BBASMMapUIAdapterProtocol>)attr;

/**
 平移marker
 
 @param markid markid
 @param destination destination 要移动到的点的坐标
 @param autoRotate 是否自动旋转 暂不支持
 @param rotate rotate 旋转角度 暂不支持
 @param duration duration 动画时长
 @param finish finish 动画完成回调
 
 */
- (void)translateMarker:(NSString *)markid
            destination:(CLLocationCoordinate2D)destination
             autoRotate:(BOOL)autoRotate
                 rotate:(double)rotate
               duration:(double)duration
                  finsh:(void(^)(void))finish;

/**
 缩放视野展示所有经纬度
 
 @param points 经纬度列表
 @param padding 坐标点形成的矩形边缘到地图边缘的距离
 @return YES成功
 */
- (BOOL)includePoints:(NSArray<CLLocation *> *)points padding:(UIEdgeInsets)padding;

/**
 获取当前用户位置
 
 @return id<BBASMMapKitUserLocationProtocol>
 */
- (id<BBASMMapKitUserLocationProtocol> )curUserLocation;


/**
 *当mapview即将被显式的时候调用,恢复之前存储的mapview状态。
 */
-(void)viewWillAppear;

/**
 *当mapview即将被隐藏的时候调用,存储当前mapview的状态。
 */
-(void)viewWillDisappear;

/**
 计算2个坐标的直线距离
 
 @param coordinate CLLocationCoordinate2D
 @param otherCoordinate CLLocationCoordinate2D
 @return CLLocationDistance
 */
- (CLLocationDistance)distanceBetween:(CLLocationCoordinate2D)coordinate
                        andCoordinate:(CLLocationCoordinate2D)otherCoordinate;

/**
 添加默认大头针标注
 
 @param coordinate CLLocationCoordinate2D
 @return YES 添加成功
 */
- (BOOL)addPointAnnotation:(CLLocationCoordinate2D)coordinate;


/**
 比例尺的宽高

 @return 比例尺的宽高
 */
- (CGSize) mapScaleBarSize;

/**
 返回地图的logo图片名称
 
 @return 地图的logo图片名称
 */
- (NSString *)logoImageName;


/**
 地图默认配置
 配置显示比例尺 地图logo位置等 
 @param mapView 地图View
 @param zoomLevel 缩放级别
 */
+ (void)configMapView:(UIView*)mapView zoomLevel:(float)zoomLevel;

/**
 关闭地图移动的手势
 @param scrollEnabled YES:可以移动 NO:禁止移动
 */
- (void)setMapGestureScrollEnabled:(BOOL)scrollEnabled;

@end