开发 出行解决方案参考手册 客户端相关服务 行程前 推荐上车点-iOS

推荐上车点-iOS 最后更新时间: 2020年12月15日

1.MAHotSpotManager

用来设置key,发起上车点网络请求.

@interface MAHotSpotManager : NSObject
///服务授权的key
@property (nonatomic, copy) NSString *accessKey;
/**
 * @brief 单例方法
 * @return 单例对象
 */
+ (instancetype)sharedInstance;
/**
 * @brief 查询周围上车点
 * @param request 请求
 * @param callback 结果回调
 * @return NSOperation 对象
 */
- (NSOperation *)queryHotSpotsWith:(MAHotSpotQueryRequest *)request callback:(void(^)(MAHotSpotQueryResponse *response, NSError* error))callback;
@end

2. MAHotSpotController

和地图结合,内部封装了周围上车点请求发起、逆地理信息请求、上车点选取大头针及上车点在地图上的展示等逻辑,并提供相应delegate方法进行行为、展示的自定义.由于mapview的delegate对象只能有一个,需要在使用者实现以下的MAMapviewDelegate方法,并在内部调用MAHotSpotController的相应方法.

2.1 必须实现的MAMapviewDelegate方法

/**
 * @brief 在对应的地图delegate方法中调用此方法
 * @param mapView 地图
 * @param wasUserAction 是否用户触发
 */
- (void)mapView:(MAMapView *)mapView mapWillMoveByUser:(BOOL)wasUserAction;
/**
 * @brief 在对应的地图delegate方法中调用此方法
 * @param mapView 地图
 * @param wasUserAction 是否用户触发
 */
- (void)mapView:(MAMapView *)mapView mapDidMoveByUser:(BOOL)wasUserAction;
/**
 * @brief 在对应的地图delegate方法中调用此方法
 * @param mapView 地图 
 * @param wasUserAction 是否用户触发
 */
- (void)mapView:(MAMapView *)mapView mapDidZoomByUser:(BOOL)wasUserAction;
/**
 * @brief 在对应的地图delegate方法中调用此方法
 * @param mapView 地图
 * @param views annotationView
 */
- (void)mapView:(MAMapView *)mapView didAddAnnotationViews:(NSArray *)views;
/**
 * @brief 在对应的地图delegate方法中调用此方法
 * @param mapView 地图
 * @param annotation 标注
 * @return 返回上车点功能需要的annotationview,一类是上车点,一类是大头针锚点
 */
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation;

2.2 创建锚点大头针

必须实现下面MAHotSpotControllerDelegate方法,下面示例中返回一个地图提供的默认样式的大头针.当然您也可以返回任何希望样式的MAAnnotationView.

///创建大头针锚点view
- (MAAnnotationView *)createAnchorPinViewWith:(MAPointAnnotation *)annotation reuseIdentifier:(NSString *)reuseIdentifier controller:(MAHotSpotController *)controller {
    MAPinAnnotationView *view = [[MAPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
    view.canShowCallout = YES;
    view.pinColor = MAPinAnnotationColorGreen;
    return view;
}

2.3 创建上车点annotationview

必须实现下面MAHotSpotControllerDelegate方法,下面代码示例中返回了一个MAHotSpotAnnotationView实例.当然您也可以设置MAHotSpotAnnotationView的一些属性为您希望的样式,或者继承MAHotSpotAnnotationView进行更深度的修改.

///创建上车点view
- (MAAnnotationView *)createHotSpotViewWith:(MAHotSpotAnnotation *)annotation reuseIdentifier:(NSString *)reuseIdentifier controller:(MAHotSpotController *)controller {
    MAHotSpotAnnotationView *ret = [[MAHotSpotAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
    ret.animatingCircleImage = [UIImage imageNamed:@"spotCircle"];
    ret.centerDotImage = [UIImage imageNamed:@"centerDot"];
    return ret;
}

2.4 请求上车点行为自定义

可以实现下面delegate方法,自定义是否发起新的请求上车点.不实现则执行默认策略.

默认策略是:zoomLevel<15不请求,移动超过1000米清空上车点;zoomLevel>=15, 锚点和已有上车点屏幕距离50像素内,自动吸附且不请求新的,否则不清空原来的且请求新的.

///如果返回NO,preCoord为上次请求的中心点坐标,absorbedAnno返回指定要自动吸附到的上车点,
///clearPrevAnnos返回是否删除上次的上车点。
///如不实现则执行默认策略:zoomLevel<15:不请求,移动超过1000米清空上车点;
///zoomLevel>=15: 锚点和已有上车点屏幕距离50像素内,自动吸附且不请求新的,否则不清空原来的且请求新的。
- (BOOL)shouldSendSpotQueryRequest:(CLLocationCoordinate2D)centerCoord
                          preCoord:(CLLocationCoordinate2D)preCoord
                      absorbedAnno:(MAHotSpotAnnotation **)absorbedAnno
                    clearPrevAnnos:(BOOL*)clearPrevAnnos
                        controller:(MAHotSpotController *)controller;

2.5 请求上车点返回后是否自动吸附上车点行为自定义.

可以实现下面delegate方法,自定义是否发起新的请求上车点.不实现则执行默认策略.

默认策略是:如果地图zoomLevel小于15则返回NO,zoomLevel不小于15且地图中心点距离上车点距离小于50屏幕坐标返回YES.

///请求返回后,判断要不要自动吸附到最近上车点, 
///如不实现则执行默认策略:如果地图zoomLevel小于15则返回NO,zoomLevel不小于15且地图中心点距离上车点距离小于50屏幕坐标返回YES。
- (BOOL)shouldAutoAbsorbedToAnnotation:(MAHotSpotAnnotation *)anno controller:(MAHotSpotController *)controller;

2.6 控制是否发起逆地理请求

///如不实现此代理方法,当做返回YES处理
- (BOOL)shouldSendRegeoQueryRequest:(CLLocationCoordinate2D)centerCoord controller:(MAHotSpotController *)controller;

2.7 大头针跳动动画

///大头针锚点跳动动画回调, 如不实现则走默认动画效果
- (void)startAnchorPinViewAnimating:(MAAnnotationView *)anchorPinView controller:(MAHotSpotController *)controller;

2.8 区域面信息处理

自1.3.0,上车点sdk支持区域信息.

(1)区域信息回调:

///区域信息选择回调,如机场航站楼的国内到达、国内出发、国际到达、国际出发  since 1.3.0
- (void)chooseAreaFrom:(NSArray<MAHotSpotAreaInfo*>*)areaArr
        resultCallback:(void(^)(MAHotSpotAreaInfo *resultArea))resultCallback
            controller:(MAHotSpotController *)controller;

(2)选择区域信息:

/**
 *@brief 选择某个区域  since 1.3.0
 *@param area 待选择区域
 */
- (void)chooseArea:(MAHotSpotAreaInfo*)area;

(3)区域展示设置

///区域面展示设置.  since 1.3.0
@property (nonatomic, strong) MAHotSpotAreaOptions *areaOptions;

2.9 外部设置数据源

///如果实现此方法,内部将不请求附近上车点,改由外部通过回调返回上车点信息
- (void)queryHotSpotsWith:(CLLocationCoordinate2D)centerCoord
              sucCallback:(void(^)(NSArray<MAHotSpotInfo*> *resultSpots))sucCallback
             failCallback:(void(^)(BOOL isCancelled, NSString* errDescription))failCallback
               controller:(MAHotSpotController *)controller;
/**
 *@brief 外部传入上车点信息做更新,适用于外部自己控制上车点获取
 */
- (void)updateHotSpotsWith:(NSArray<MAHotSpotInfo*> *)spots;

2.10 设置显示级别

///上车点允许获取和显示的最小地图缩放级别,默认15
@property (nonatomic, assign) CGFloat minMapZoomLevel;

2.11 设置请求推荐上⻋点数量

///返回上车点个数,最大支持3个
@property (nonatomic, assign) int spotSearchCount;

2.12 其他optional delegate方法

///如不实现,当做返回formattedAddress处理
- (NSString *)regeoDisplayStringWith:(AMapReGeocodeSearchResponse *)response controller:(MAHotSpotController *)controller;
///错误回调, 如果errorcode==MAHotSpotErrorSpots时为请求上车点错误,其他为逆地理查询错误
- (void)hotSpotController:(MAHotSpotController *)controller didFailWithError:(NSError *)


2.13 其他controller属性方法

///包含上车点annotation的数组
@property (nonatomic, strong, readonly) NSArray<MAHotSpotAnnotation *> *spotAnnoArray;
///大头针annotation
@property (nonatomic, strong, readonly) MAPointAnnotation *pinAnnotation;
///基于中心点搜索上车点的半径范围,默认200
@property (nonatomic, assign) int spotSearchRadius;
///逆地理搜索的半径范围,默认200
@property (nonatomic, assign) int regeoSearchRadius;
///上车点自动吸附距离阈值,<此值自动吸附,单位屏幕点坐标,默认50.  since 1.3.0
@property (nonatomic, assign) CGFloat absorbThreshHold;
///上车点自动吸附距离阈值单位,1:米 2:屏幕点, 默认2.  since 1.3.0
@property (nonatomic, assign) NSInteger absorbThreshHoldUnit;
///请求到新的上车点后是否自动吸附到第一个。NO:根据absorbThreshHold判断是否吸附到最近上车点 YES:吸到第一个点。默认YES since 1.3.0
@property (nonatomic, assign) BOOL autoAbsorbedToFirstSpot;
返回顶部 示例中心 常见问题 智能客服 公众号
二维码