BMKMapView.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. /*
  2. * BMKMapView.h
  3. * BMapKit
  4. *
  5. * Copyright 2011 Baidu Inc. All rights reserved.
  6. *
  7. */
  8. #import <BaiduMapAPI_Base/BMKBaseComponent.h>
  9. #import "BMKAnnotation.h"
  10. #import "BMKAnnotationView.h"
  11. #import "BMKOverlayView.h"
  12. #import "UIKit/UIKit.h"
  13. #import "BMKMapStatus.h"
  14. #import "BMKLocationViewDisplayParam.h"
  15. #import "BMKHeatMap.h"
  16. #import "BMKBaseIndoorMapInfo.h"
  17. @protocol BMKMapViewDelegate;
  18. ///点击地图标注返回数据结构
  19. @interface BMKMapPoi : NSObject
  20. ///点标注的名称
  21. @property (nonatomic,strong) NSString* text;
  22. ///点标注的经纬度坐标
  23. @property (nonatomic,assign) CLLocationCoordinate2D pt;
  24. ///点标注的uid,可能为空
  25. @property (nonatomic,strong) NSString* uid;
  26. @end
  27. typedef enum {
  28. BMKUserTrackingModeNone = 0, /// 普通定位模式
  29. BMKUserTrackingModeHeading, /// 定位方向模式
  30. BMKUserTrackingModeFollow, /// 定位跟随模式
  31. BMKUserTrackingModeFollowWithHeading, /// 定位罗盘模式
  32. } BMKUserTrackingMode;
  33. ///枚举:logo位置
  34. typedef enum {
  35. BMKLogoPositionLeftBottom = 0, /// 地图左下方
  36. BMKLogoPositionLeftTop, /// 地图左上方
  37. BMKLogoPositionCenterBottom, /// 地图中下方
  38. BMKLogoPositionCenterTop, /// 地图中上方
  39. BMKLogoPositionRightBottom, /// 地图右下方
  40. BMKLogoPositionRightTop, /// 地图右上方
  41. } BMKLogoPosition;
  42. ///枚举:室内图切换楼层结果
  43. typedef enum {
  44. BMKSwitchIndoorFloorSuccess = 0, /// 切换楼层成功
  45. BMKSwitchIndoorFloorFailed, /// 切换楼层失败
  46. BMKSwitchIndoorFloorNotFocused, /// 地图还未聚焦到传入的室内图
  47. BMKSwitchIndoorFloorNotExist, /// 当前室内图不存在该楼层
  48. } BMKSwitchIndoorFloorError;
  49. ///地图View类,使用此View可以显示地图窗口,并且对地图进行相关的操作
  50. @interface BMKMapView : UIView
  51. /// 地图View的Delegate,此处记得不用的时候需要置nil,否则影响内存的释放
  52. @property (nonatomic, weak) id<BMKMapViewDelegate> delegate;
  53. /// 当前地图类型,可设定为标准地图、卫星地图
  54. @property (nonatomic) BMKMapType mapType;
  55. /// 当前地图的经纬度范围,设定的该范围可能会被调整为适合地图窗口显示的范围
  56. @property (nonatomic) BMKCoordinateRegion region;
  57. /// 限制地图的显示范围(地图状态改变时,该范围不会在地图显示范围外。设置成功后,会调整地图显示该范围)
  58. @property (nonatomic) BMKCoordinateRegion limitMapRegion;
  59. /// 指南针的位置,设定坐标以BMKMapView左上角为原点,向右向下增长
  60. @property (nonatomic) CGPoint compassPosition;
  61. /// 指南针的宽高
  62. @property (nonatomic, readonly) CGSize compassSize;
  63. /// 当前地图的中心点,改变该值时,地图的比例尺级别不会发生变化
  64. @property (nonatomic) CLLocationCoordinate2D centerCoordinate;
  65. /// 地图比例尺级别,在手机上当前可使用的级别为3-21级
  66. @property (nonatomic) float zoomLevel;
  67. /// 地图的自定义最小比例尺级别
  68. @property (nonatomic) float minZoomLevel;
  69. /// 地图的自定义最大比例尺级别
  70. @property (nonatomic) float maxZoomLevel;
  71. /// 地图旋转角度,在手机上当前可使用的范围为-180~180度
  72. @property (nonatomic) int rotation;
  73. /// 地图俯视角度,在手机上当前可使用的范围为-45~0度
  74. @property (nonatomic) int overlooking;
  75. ///设定地图是否现显示3D楼块效果
  76. @property(nonatomic, getter=isBuildingsEnabled) BOOL buildingsEnabled;
  77. ///设定地图是否显示底图poi标注(不包含室内图标注),默认YES
  78. @property(nonatomic, assign) BOOL showMapPoi;
  79. ///设定地图是否打开路况图层
  80. @property(nonatomic, getter=isTrafficEnabled) BOOL trafficEnabled;
  81. ///设定地图是否打开百度城市热力图图层(百度自有数据),注:地图层级大于11时,可显示热力图
  82. @property(nonatomic, getter=isBaiduHeatMapEnabled) BOOL baiduHeatMapEnabled;
  83. ///设定地图View能否支持所有手势操作
  84. @property(nonatomic) BOOL gesturesEnabled;
  85. ///设定地图View能否支持用户多点缩放(双指)
  86. @property(nonatomic, getter=isZoomEnabled) BOOL zoomEnabled;
  87. ///设定地图View能否支持用户缩放(双击或双指单击)
  88. @property(nonatomic, getter=isZoomEnabledWithTap) BOOL zoomEnabledWithTap;
  89. ///设定地图View能否支持用户移动地图
  90. @property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled;
  91. ///设定地图View能否支持俯仰角
  92. @property(nonatomic, getter=isOverlookEnabled) BOOL overlookEnabled;
  93. ///设定地图View能否支持旋转
  94. @property(nonatomic, getter=isRotateEnabled) BOOL rotateEnabled;
  95. /// 设定地图是否回调force touch事件,默认为NO,仅适用于支持3D Touch的情况,开启后会回调 - mapview:onForceTouch:force:maximumPossibleForce:
  96. @property(nonatomic) BOOL forceTouchEnabled;
  97. /// 设定是否显式比例尺
  98. @property (nonatomic) BOOL showMapScaleBar;
  99. /// 比例尺的位置,设定坐标以BMKMapView左上角为原点,向右向下增长
  100. @property (nonatomic) CGPoint mapScaleBarPosition;
  101. /// 比例尺的宽高
  102. @property (nonatomic, readonly) CGSize mapScaleBarSize;
  103. /// logo位置,默认BMKLogoPositionLeftBottom
  104. @property (nonatomic) BMKLogoPosition logoPosition;
  105. ///当前地图范围,采用直角坐标系表示,向右向下增长
  106. @property (nonatomic) BMKMapRect visibleMapRect;
  107. /**
  108. *地图预留边界,默认:UIEdgeInsetsZero。
  109. *注:设置后,会根据mapPadding调整logo、比例尺、指南针的位置。
  110. * 当updateTargetScreenPtWhenMapPaddingChanged==YES时,地图中心(屏幕坐标:BMKMapStatus.targetScreenPt)跟着改变
  111. */
  112. @property (nonatomic) UIEdgeInsets mapPadding;
  113. ///设置mapPadding时,地图中心(屏幕坐标:BMKMapStatus.targetScreenPt)是否跟着改变,默认YES
  114. @property (nonatomic) BOOL updateTargetScreenPtWhenMapPaddingChanged;
  115. ///设定地图View能否支持以手势中心点为轴进行旋转和缩放
  116. @property(nonatomic, getter=isChangeWithTouchPointCenterEnabled) BOOL ChangeWithTouchPointCenterEnabled;
  117. /**
  118. *设置自定义地图样式
  119. *注:必须在BMKMapView对象初始化之前调用
  120. *@param customMapStyleJsonFilePath 自定义样式文件所在路径,包含文件名
  121. */
  122. + (void)customMapStyle:(NSString*) customMapStyleJsonFilePath;
  123. /**
  124. * 自定义地图样式开关,影响所有BMKMapView对象
  125. *@param enable 自定义地图样式是否生效
  126. */
  127. + (void)enableCustomMapStyle:(BOOL) enable;
  128. /**
  129. * 2.10.0起废弃,空实现,逻辑由地图SDK控制
  130. *
  131. *当应用即将后台时调用,停止一切调用opengl相关的操作。
  132. */
  133. +(void)willBackGround __deprecated_msg("废弃方法(空实现),逻辑由地图SDK控制");
  134. /**
  135. * 2.10.0起废弃,空实现,逻辑由地图SDK控制
  136. *
  137. *当应用恢复前台状态时调用。
  138. */
  139. +(void)didForeGround __deprecated_msg("废弃方法(空实现),逻辑由地图SDK控制");
  140. /**
  141. *当mapview即将被显式的时候调用,恢复之前存储的mapview状态。
  142. */
  143. -(void)viewWillAppear;
  144. /**
  145. *当mapview即将被隐藏的时候调用,存储当前mapview的状态。
  146. */
  147. -(void)viewWillDisappear;
  148. /**
  149. *强制刷新mapview
  150. */
  151. - (void)mapForceRefresh;
  152. /**
  153. *放大一级比例尺
  154. *@return 是否成功
  155. */
  156. - (BOOL)zoomIn;
  157. /**
  158. *缩小一级比例尺
  159. *@return 是否成功
  160. */
  161. - (BOOL)zoomOut;
  162. /**
  163. *根据当前地图View的窗口大小调整传入的region,返回适合当前地图窗口显示的region,调整过程会保证中心点不改变
  164. *@param region 待调整的经纬度范围
  165. *@return 调整后适合当前地图窗口显示的经纬度范围
  166. */
  167. - (BMKCoordinateRegion)regionThatFits:(BMKCoordinateRegion)region;
  168. /**
  169. *设定当前地图的显示范围
  170. *@param region 要设定的地图范围,用经纬度的方式表示
  171. *@param animated 是否采用动画效果
  172. */
  173. - (void)setRegion:(BMKCoordinateRegion)region animated:(BOOL)animated;
  174. /**
  175. *设定地图中心点坐标
  176. *@param coordinate 要设定的地图中心点坐标,用经纬度表示
  177. *@param animated 是否采用动画效果
  178. */
  179. - (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;
  180. /**
  181. *获得地图当前可视区域截图
  182. *@return 返回view范围内的截取的UIImage
  183. */
  184. -(UIImage*) takeSnapshot;
  185. /**
  186. *获得地图区域区域截图
  187. *@return 返回指定区域的截取的UIImage
  188. */
  189. -(UIImage*) takeSnapshot:(CGRect)rect;
  190. /**
  191. *设置罗盘的图片
  192. *@param image 设置的图片
  193. */
  194. - (void)setCompassImage:(UIImage *)image;
  195. /**
  196. *设定当前地图的显示范围,采用直角坐标系表示
  197. *@param mapRect 要设定的地图范围,用直角坐标系表示
  198. *@param animate 是否采用动画效果
  199. */
  200. - (void)setVisibleMapRect:(BMKMapRect)mapRect animated:(BOOL)animate;
  201. /**
  202. *根据当前地图View的窗口大小调整传入的mapRect,返回适合当前地图窗口显示的mapRect,调整过程会保证中心点不改变
  203. *@param mapRect 待调整的地理范围,采用直角坐标系表示
  204. *@return 调整后适合当前地图窗口显示的地理范围,采用直角坐标系
  205. */
  206. - (BMKMapRect)mapRectThatFits:(BMKMapRect)mapRect;
  207. /**
  208. *设定地图的显示范围,并使mapRect四周保留insets指定的边界区域
  209. *@param mapRect 要设定的地图范围,用直角坐标系表示
  210. *@param insets 指定的四周边界大小
  211. *@param animate 是否采用动画效果
  212. */
  213. - (void)setVisibleMapRect:(BMKMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animate;
  214. /**
  215. *根据当前地图View的窗口大小调整传入的mapRect,返回适合当前地图窗口显示的mapRect,并且在该mapRect四周保留insets指定的边界区域
  216. *@param mapRect 待调整的地理范围,采用直角坐标系表示
  217. ×@param insets mapRect四周要预留的边界大小
  218. *@return 调整后适合当前地图窗口显示的地理范围,采用直角坐标系
  219. */
  220. - (BMKMapRect)mapRectThatFits:(BMKMapRect)mapRect edgePadding:(UIEdgeInsets)insets;
  221. /**
  222. *将经纬度坐标转换为View坐标
  223. *@param coordinate 待转换的经纬度坐标
  224. *@param view 指定相对的View
  225. *@return 转换后的View坐标
  226. */
  227. - (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view;
  228. /**
  229. *将View坐标转换成经纬度坐标
  230. *@param point 待转换的View坐标
  231. *@param view point坐标所在的view
  232. *@return 转换后的经纬度坐标
  233. */
  234. - (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view;
  235. /**
  236. *将经纬度矩形区域转换为View矩形区域
  237. *@param region 待转换的经纬度矩形
  238. *@param view 指定相对的View
  239. *@return 转换后的View矩形区域
  240. */
  241. - (CGRect)convertRegion:(BMKCoordinateRegion)region toRectToView:(UIView *)view;
  242. /**
  243. *将View矩形区域转换成经纬度矩形区域
  244. *@param rect 待转换的View矩形区域
  245. *@param view rect坐标所在的view
  246. *@return 转换后的经纬度矩形区域
  247. */
  248. - (BMKCoordinateRegion)convertRect:(CGRect)rect toRegionFromView:(UIView *)view;
  249. /**
  250. *将直角地理坐标矩形区域转换为View矩形区域
  251. *@param mapRect 待转换的直角地理坐标矩形
  252. *@param view 指定相对的View
  253. *@return 转换后的View矩形区域
  254. */
  255. - (CGRect)convertMapRect:(BMKMapRect)mapRect toRectToView:(UIView *)view;
  256. /**
  257. *将View矩形区域转换成直角地理坐标矩形区域
  258. *@param rect 待转换的View矩形区域
  259. *@param view rect坐标所在的view
  260. *@return 转换后的直角地理坐标矩形区域
  261. */
  262. - (BMKMapRect)convertRect:(CGRect)rect toMapRectFromView:(UIView *)view;
  263. /**
  264. *将BMKMapPoint转换为opengles可以直接使用的坐标
  265. @param mapPoint BMKMapPoint坐标
  266. @return opengles 直接支持的坐标
  267. */
  268. - (CGPoint)glPointForMapPoint:(BMKMapPoint)mapPoint;
  269. /**
  270. *批量将BMKMapPoint转换为opengles可以直接使用的坐标
  271. @param mapPoints BMKMapPoint坐标数据指针
  272. @param count 个数,count不能大于数组长度
  273. @return opengles 直接支持的坐标数据指针(需要调用者手动释放)
  274. */
  275. - (CGPoint *)glPointsForMapPoints:(BMKMapPoint *)mapPoints count:(NSUInteger)count;
  276. /**
  277. * 设置地图中心点在地图中的屏幕坐标位置
  278. * @param ptInScreen 要设定的地图中心点位置,为屏幕坐标,设置的中心点不能超过屏幕范围,否则无效
  279. */
  280. - (void)setMapCenterToScreenPt:(CGPoint)ptInScreen;
  281. /**
  282. * 获取地图状态
  283. *@return 返回地图状态信息
  284. */
  285. - (BMKMapStatus*)getMapStatus;
  286. /**
  287. * 设置地图状态
  288. * @param [in] mapStatus 地图状态信息
  289. */
  290. - (void)setMapStatus:(BMKMapStatus*)mapStatus;
  291. /**
  292. * 设置地图状态
  293. * @param [in] mapStatus 地图状态信息
  294. * @param [in] bAnimation 是否需要动画效果,true:需要做动画
  295. */
  296. - (void)setMapStatus:(BMKMapStatus*)mapStatus withAnimation:(BOOL)bAnimation;
  297. /**
  298. * 设置地图状态
  299. * @param [in] mapStatus 地图状态信息
  300. * @param [in] bAnimation 是否需要动画效果,true:需要做动画
  301. * @param [in] ulDuration 指定动画时间,单位:ms
  302. */
  303. - (void)setMapStatus:(BMKMapStatus*)mapStatus withAnimation:(BOOL)bAnimation withAnimationTime:(int)ulDuration;
  304. /**
  305. * 判断当前图区是否支持百度热力图(百度自有数据)
  306. * @return 支持返回YES,否则返回NO
  307. */
  308. - (BOOL)isSurpportBaiduHeatMap;
  309. @end
  310. @interface BMKMapView (IndoorMapAPI)
  311. /// 设定地图是否显示室内图(包含室内图标注),默认不显示
  312. @property (nonatomic, assign) BOOL baseIndoorMapEnabled;
  313. /// 设定室内图标注是否显示,默认YES,仅当显示室内图(baseIndoorMapEnabled为YES)时生效
  314. @property (nonatomic, assign) BOOL showIndoorMapPoi;
  315. /**
  316. * 设置室内图楼层
  317. * @param strFloor 楼层
  318. * @param strID 室内图ID
  319. * @return 切换结果
  320. */
  321. - (BMKSwitchIndoorFloorError)switchBaseIndoorMapFloor:(NSString*)strFloor withID:(NSString*)strID;
  322. /**
  323. * 获取当前聚焦的室内图信息
  324. * @return 当前聚焦的室内图信息。没有聚焦的室内图,返回nil
  325. */
  326. - (BMKBaseIndoorMapInfo*)getFocusedBaseIndoorMapInfo;
  327. @end
  328. @interface BMKMapView (LocationViewAPI)
  329. /// 设定是否显示定位图层
  330. @property (nonatomic) BOOL showsUserLocation;
  331. /// 设定定位模式,取值为:BMKUserTrackingMode
  332. @property (nonatomic) BMKUserTrackingMode userTrackingMode;
  333. /// 返回定位坐标点是否在当前地图可视区域内
  334. @property (nonatomic, readonly, getter=isUserLocationVisible) BOOL userLocationVisible;
  335. /**
  336. *动态定制我的位置样式
  337. * @param [in] locationViewDisplayParam 样式参数
  338. */
  339. - (void)updateLocationViewWithParam:(BMKLocationViewDisplayParam*)locationViewDisplayParam;
  340. /**
  341. *动态更新我的位置数据
  342. * @param [in] userLocation 定位数据
  343. */
  344. -(void)updateLocationData:(BMKUserLocation*)userLocation;
  345. @end
  346. @interface BMKMapView (AnnotationAPI)
  347. /// 当前地图View的已经添加的标注数组
  348. @property (nonatomic, readonly) NSArray *annotations;
  349. //设定是否总让选中的annotaion置于最前面
  350. @property (nonatomic, assign) BOOL isSelectedAnnotationViewFront;
  351. /**
  352. *向地图窗口添加标注,需要实现BMKMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View
  353. *@param annotation 要添加的标注
  354. */
  355. - (void)addAnnotation:(id <BMKAnnotation>)annotation;
  356. /**
  357. *向地图窗口添加一组标注,需要实现BMKMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View
  358. *@param annotations 要添加的标注数组
  359. */
  360. - (void)addAnnotations:(NSArray *)annotations;
  361. /**
  362. *移除标注
  363. *@param annotation 要移除的标注
  364. */
  365. - (void)removeAnnotation:(id <BMKAnnotation>)annotation;
  366. /**
  367. *移除一组标注
  368. *@param annotation 要移除的标注数组
  369. */
  370. - (void)removeAnnotations:(NSArray *)annotations;
  371. /**
  372. *查找指定标注对应的View,如果该标注尚未显示,返回nil
  373. *@param annotation 指定的标注
  374. *@return 指定标注对应的View
  375. */
  376. - (BMKAnnotationView *)viewForAnnotation:(id <BMKAnnotation>)annotation;
  377. /**
  378. *根据指定标识查找一个可被复用的标注View,一般在delegate中使用,用此函数来代替新申请一个View
  379. *@param identifier 指定标识
  380. *@return 返回可被复用的标注View
  381. */
  382. - (BMKAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier;
  383. /**
  384. *选中指定的标注,本版暂不支持animate效果
  385. *@param annotation 指定的标注
  386. *@param animated 本版暂不支持
  387. */
  388. - (void)selectAnnotation:(id <BMKAnnotation>)annotation animated:(BOOL)animated;
  389. /**
  390. *取消指定的标注的选中状态,本版暂不支持animate效果
  391. *@param annotation 指定的标注
  392. *@param animated 本版暂不支持
  393. */
  394. - (void)deselectAnnotation:(id <BMKAnnotation>)annotation animated:(BOOL)animated;
  395. /**
  396. *设置地图使显示区域显示所有annotations,如果数组中只有一个则直接设置地图中心为annotation的位置
  397. *@param annotations 指定的标注
  398. *@param animated 是否启动动画
  399. */
  400. - (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated;
  401. /**
  402. *获取矩形区域内的所有annotations
  403. *@param bounds 矩形区域(经纬度)
  404. *@return 该矩形区域内的所有annotations
  405. */
  406. - (NSArray *)annotationsInCoordinateBounds:(BMKCoordinateBounds) bounds;
  407. @end
  408. ///地图View类(和Overlay操作相关的接口)
  409. @interface BMKMapView (OverlaysAPI)
  410. /**
  411. *向地图窗口添加Overlay,需要实现BMKMapViewDelegate的-mapView:viewForOverlay:函数来生成标注对应的View
  412. *@param overlay 要添加的overlay
  413. */
  414. - (void)addOverlay:(id <BMKOverlay>)overlay;
  415. /**
  416. *向地图窗口添加一组Overlay,需要实现BMKMapViewDelegate的-mapView:viewForOverlay:函数来生成标注对应的View
  417. *@param overlays 要添加的overlay数组
  418. */
  419. - (void)addOverlays:(NSArray *)overlays;
  420. /**
  421. *移除Overlay
  422. *@param overlay 要移除的overlay
  423. */
  424. - (void)removeOverlay:(id <BMKOverlay>)overlay;
  425. /**
  426. *移除一组Overlay
  427. *@param overlays 要移除的overlay数组
  428. */
  429. - (void)removeOverlays:(NSArray *)overlays;
  430. /**
  431. *在指定的索引处添加一个Overlay
  432. *@param overlay 要添加的overlay
  433. *@param index 指定的索引
  434. */
  435. - (void)insertOverlay:(id <BMKOverlay>)overlay atIndex:(NSUInteger)index;
  436. /**
  437. *在交换指定索引处的Overlay
  438. *@param index1 索引1
  439. *@param index2 索引2
  440. */
  441. - (void)exchangeOverlayAtIndex:(NSUInteger)index1 withOverlayAtIndex:(NSUInteger)index2;
  442. /**
  443. *在指定的Overlay之上插入一个overlay
  444. *@param overlay 带添加的Overlay
  445. *@param sibling 用于指定相对位置的Overlay
  446. */
  447. - (void)insertOverlay:(id <BMKOverlay>)overlay aboveOverlay:(id <BMKOverlay>)sibling;
  448. /**
  449. *在指定的Overlay之下插入一个overlay
  450. *@param overlay 带添加的Overlay
  451. *@param sibling 用于指定相对位置的Overlay
  452. */
  453. - (void)insertOverlay:(id <BMKOverlay>)overlay belowOverlay:(id <BMKOverlay>)sibling;
  454. /// 当前mapView中已经添加的Overlay数组
  455. @property (nonatomic, readonly) NSArray *overlays;
  456. /**
  457. *查找指定overlay对应的View,如果该View尚未创建,返回nil
  458. *@param overlay 指定的overlay
  459. *@return 指定overlay对应的View
  460. */
  461. - (BMKOverlayView *)viewForOverlay:(id <BMKOverlay>)overlay;
  462. @end
  463. @interface BMKMapView (HeatMapAPI)
  464. /**
  465. *添加热力图
  466. * @param [BMKHeatMap*] heatMap 热力图绘制和显示数据
  467. */
  468. - (void)addHeatMap:(BMKHeatMap*)heatMap;
  469. /**
  470. *移除热力图
  471. */
  472. - (void)removeHeatMap;
  473. @end
  474. /// MapView的Delegate,mapView通过此类来通知用户对应的事件
  475. @protocol BMKMapViewDelegate <NSObject>
  476. @optional
  477. /**
  478. *地图初始化完毕时会调用此接口
  479. *@param mapview 地图View
  480. */
  481. - (void)mapViewDidFinishLoading:(BMKMapView *)mapView;
  482. /**
  483. *地图渲染完毕后会调用此接口
  484. *@param mapview 地图View
  485. */
  486. - (void)mapViewDidFinishRendering:(BMKMapView *)mapView;
  487. /**
  488. *地图渲染每一帧画面过程中,以及每次需要重绘地图时(例如添加覆盖物)都会调用此接口
  489. *@param mapview 地图View
  490. *@param status 此时地图的状态
  491. */
  492. - (void)mapView:(BMKMapView *)mapView onDrawMapFrame:(BMKMapStatus*)status;
  493. /**
  494. *地图区域即将改变时会调用此接口
  495. *@param mapview 地图View
  496. *@param animated 是否动画
  497. */
  498. - (void)mapView:(BMKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;
  499. /**
  500. *地图区域改变完成后会调用此接口
  501. *@param mapview 地图View
  502. *@param animated 是否动画
  503. */
  504. - (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;
  505. /**
  506. *根据anntation生成对应的View
  507. *@param mapView 地图View
  508. *@param annotation 指定的标注
  509. *@return 生成的标注View
  510. */
  511. - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation;
  512. /**
  513. *当mapView新添加annotation views时,调用此接口
  514. *@param mapView 地图View
  515. *@param views 新添加的annotation views
  516. */
  517. - (void)mapView:(BMKMapView *)mapView didAddAnnotationViews:(NSArray *)views;
  518. /**
  519. *当选中一个annotation views时,调用此接口
  520. *@param mapView 地图View
  521. *@param views 选中的annotation views
  522. */
  523. - (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view;
  524. /**
  525. *当取消选中一个annotation views时,调用此接口
  526. *@param mapView 地图View
  527. *@param views 取消选中的annotation views
  528. */
  529. - (void)mapView:(BMKMapView *)mapView didDeselectAnnotationView:(BMKAnnotationView *)view;
  530. /**
  531. *拖动annotation view时,若view的状态发生变化,会调用此函数。ios3.2以后支持
  532. *@param mapView 地图View
  533. *@param view annotation view
  534. *@param newState 新状态
  535. *@param oldState 旧状态
  536. */
  537. - (void)mapView:(BMKMapView *)mapView annotationView:(BMKAnnotationView *)view didChangeDragState:(BMKAnnotationViewDragState)newState
  538. fromOldState:(BMKAnnotationViewDragState)oldState;
  539. /**
  540. *当点击annotation view弹出的泡泡时,调用此接口
  541. *@param mapView 地图View
  542. *@param view 泡泡所属的annotation view
  543. */
  544. - (void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view;
  545. /**
  546. *根据overlay生成对应的View
  547. *@param mapView 地图View
  548. *@param overlay 指定的overlay
  549. *@return 生成的覆盖物View
  550. */
  551. - (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id <BMKOverlay>)overlay;
  552. /**
  553. *当mapView新添加overlay views时,调用此接口
  554. *@param mapView 地图View
  555. *@param overlayViews 新添加的overlay views
  556. */
  557. - (void)mapView:(BMKMapView *)mapView didAddOverlayViews:(NSArray *)overlayViews;
  558. /**
  559. *点中覆盖物后会回调此接口,目前只支持点中BMKPolylineView时回调
  560. *@param mapview 地图View
  561. *@param overlayView 覆盖物view信息
  562. */
  563. - (void)mapView:(BMKMapView *)mapView onClickedBMKOverlayView:(BMKOverlayView *)overlayView;
  564. /**
  565. *点中底图标注后会回调此接口
  566. *@param mapview 地图View
  567. *@param mapPoi 标注点信息
  568. */
  569. - (void)mapView:(BMKMapView *)mapView onClickedMapPoi:(BMKMapPoi*)mapPoi;
  570. /**
  571. *点中底图空白处会回调此接口
  572. *@param mapview 地图View
  573. *@param coordinate 空白处坐标点的经纬度
  574. */
  575. - (void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate;
  576. /**
  577. *双击地图时会回调此接口
  578. *@param mapview 地图View
  579. *@param coordinate 返回双击处坐标点的经纬度
  580. */
  581. - (void)mapview:(BMKMapView *)mapView onDoubleClick:(CLLocationCoordinate2D)coordinate;
  582. /**
  583. *长按地图时会回调此接口
  584. *@param mapview 地图View
  585. *@param coordinate 返回长按事件坐标点的经纬度
  586. */
  587. - (void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate;
  588. /**
  589. *3DTouch 按地图时会回调此接口(仅在支持3D Touch,且fouchTouchEnabled属性为YES时,会回调此接口)
  590. *@param mapview 地图View
  591. *@param coordinate 触摸点的经纬度
  592. *@param force 触摸该点的力度(参考UITouch的force属性)
  593. *@param maximumPossibleForce 当前输入机制下的最大可能力度(参考UITouch的maximumPossibleForce属性)
  594. */
  595. - (void)mapview:(BMKMapView *)mapView onForceTouch:(CLLocationCoordinate2D)coordinate force:(CGFloat)force maximumPossibleForce:(CGFloat)maximumPossibleForce;
  596. /**
  597. *地图状态改变完成后会调用此接口
  598. *@param mapview 地图View
  599. */
  600. - (void)mapStatusDidChanged:(BMKMapView *)mapView;
  601. /**
  602. *地图进入/移出室内图会调用此接口
  603. *@param mapview 地图View
  604. *@param flag YES:进入室内图; NO:移出室内图
  605. *@param info 室内图信息
  606. */
  607. - (void)mapview:(BMKMapView *)mapView baseIndoorMapWithIn:(BOOL)flag baseIndoorMapInfo:(BMKBaseIndoorMapInfo *)info;
  608. @end