百度地圖經常使用功能

參考:http://www.jianshu.com/p/9f00911bf530git

前言:之前作項目用高德地圖SDK,須要註冊帳號和AppID,而後下載SDK集成到項目中,比較麻煩,看了下蘋果自帶的MapKit框架,感受挺好用,官方文檔也介紹得很詳細,實現地圖的顯示、顯示用戶當前位置、放置大頭針、彈出氣泡等基本功能。但願能幫到剛接觸MapKit的朋友~乾貨點這裏數組

導入主頭文件:
框架

#importui

MapKit框架使用須知:atom

MapKit框架中全部數據類型的前綴都是MK。代理

MapKit有一個比較重要的UI控件 :MKMapView,專門用於地圖顯示。對象

跟蹤顯示用戶的位置blog

設置MKMapView的userTrackingMode屬性能夠跟蹤顯示用戶的當前位置圖片

MKUserTrackingModeNone:不跟蹤用戶的位置              ip

MKUserTrackingModeFollow:跟蹤並在地圖上顯示用戶的當前位置

MKUserTrackingModeFollowWithHeading:跟蹤並在地圖上顯示用戶的當前位置,地圖會跟隨用戶的前進方向進行旋轉                                                                                      

藍色發光圓點就是用戶的當前位置                                                                                     藍色發光原點,專業術語叫作「大頭針」

地圖的類型

能夠經過設置MKMapView的mapType設置地圖類型                           MKMapTypeStandard:普通地圖

MKMapTypeSatellite:衛星雲圖

MKMapTypeHybrid:混合模式(普通地圖覆蓋於衛星雲圖之上)

MKMapTypeSatelliteFlyover:3D立體衛星(iOS9.0)

MKMapTypeHybridFlyover:3D立體混合(iOS9.0)

設置地圖的其餘屬性

1.操做項:

<1.>是否可縮放 :zoomEnabled

<2.>是否可滾動 :scrollEnabled

<3.>是否可旋轉 :rotateEnabled

2.顯示項:

<1.>是否顯示指南針 :showsCompass (iOS9.0)

<2.>是否顯示比例尺 :showsScale (iOS9.0)

<3.>是否顯示交通 :showsTraffic (iOS9.0)

<4.>是否顯示建築 :showsBuildings

使用注意:設置對應的屬性時,注意該屬性是從哪一個系統版本開始引入的,作好不一樣系統版本的適配

 


 

追蹤用戶的位置

設置MKMapView的userTrackingMode屬性能夠跟蹤顯示用戶的當前位置

MKUserTrackingModeNone:不跟蹤用戶的位置

MKUserTrackingModeFollow:跟蹤並在地圖上顯示用戶的當前位置

MKUserTrackingModeFollowWithHeading:跟蹤並在地圖上顯示用戶的當前位置,地圖會跟隨用戶的前進方向進行旋轉

注意:iOS8.0以後,追蹤用戶位置須要用戶進行定位受權

備註:

iOS8.0-,地圖不會自動滾動到用戶所在位置

iOS8.0+,地圖會自動放大到合適比例,並顯示出用戶位置

MKMapView的代理

MKMapView能夠設置一個代理對象,用來監聽地圖的相關行爲

常見的代理方法有

1.調用很是頻繁,不斷監測用戶的當前位置每次調用,都會把用戶的最新位置(userLocation參數)傳進來                                                                                                              - (void)mapView:(MKMapView*)mapViewdidUpdateUserLocation:(MKUserLocation*)userLocation;

2.地圖的顯示區域即將發生改變的時候調用                                                                        - (void)mapView:(MKMapView*)mapViewregionWillChangeAnimated:(BOOL)animated;

3.地圖的顯示區域已經發生改變的時候調用                                                                      - (void)mapView:(MKMapView*)mapViewregionDidChangeAnimated:(BOOL)animated;

MKUserLocation(MKUserLocation實際上是個大頭針模型,包括如下屬性)

@property(nonatomic,copy)NSString*title;顯示在大頭針上的標題

@property(nonatomic,copy)NSString*subtitle;顯示在大頭針上的子標題

@property(readonly,nonatomic)CLLocation*location;地理位置信息(大頭針釘在什麼地方?)

設置地圖的顯示

經過MKMapView的下列方法,能夠設置地圖顯示的位置和區域

1.設置地圖的中心點位置          @property(nonatomic)CLLocationCoordinate2DcenterCoordinate;

- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;

2.設置地圖的顯示區域                                           @property(nonatomic)MKCoordinateRegionregion;                                                                - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;

 


 

 

大頭針的基本操做

添加一個大頭針:- (void)addAnnotation:(id)annotation;

添加多個大頭針:- (void)addAnnotations:(NSArray*)annotations;

移除一個大頭針:- (void)removeAnnotation:(id)annotation;

移除多個大頭針:- (void)removeAnnotations:(NSArray*)annotations;

(id)annotation參數是什麼東西?                                                                                       大頭針模型對象:用來封裝大頭針的數據,好比大頭針的位置、標題、子標題等數據

大頭針模型

新建一個大頭針模型類

#import

@interfaceMJTuangouAnnotation :NSObject

/**座標位置*/                    @property(nonatomic,assign)CLLocationCoordinate2Dcoordinate;

/**標題*/                                                              @property(nonatomic,copy)NSString*title;

/**子標題*/                                                      @property(nonatomic,copy)NSString*subtitle;

@end

添加大頭針

EdTuangouAnnotation*anno = [[MJTuangouAnnotationalloc]init];

anno.title=@"熱愛iOS的狗";

anno.subtitle=@"所有課程15折,會員20折,老學員30折";

anno.coordinate=CLLocationCoordinate2DMake(40,116);

[self.mapViewaddAnnotation:anno];

MKAnnotationView:地圖上的大頭針控件是MKAnnotationView

MKAnnotationView的屬性

@property(nonatomic,strong)id annotation :大頭針模型

@property(nonatomic,strong)UIImage*image:顯示的圖片

@property(nonatomic)BOOLcanShowCallout:是否顯示標註

@property(nonatomic)CGPointcalloutOffset:標註的偏移量

@property(strong,nonatomic)UIView*rightCalloutAccessoryView:標註右邊顯示什麼控件

@property(strong,nonatomic)UIView*leftCalloutAccessoryView:標註左邊顯示什麼控件

MKPinAnnotationView

MKPinAnnotationView是MKAnnotationView的子類

MKPinAnnotationView比MKAnnotationView多了2個屬性

@property(nonatomic)MKPinAnnotationColorpinColor:大頭針顏色

@property(nonatomic)BOOLanimatesDrop:大頭針第一次顯示時是否從天而降


 

 

MKMapItem調用系統APP進行導航

主要方法:[MKMapItem openMapsWithItems:items launchOptions:md];

示例代碼

1.根據兩個地標對象進行調用系統導航                                                                                         - (void)beginNavWithBeginPlacemark:(CLPlacemark*)beginPlacemark andEndPlacemark:(CLPlacemark *)endPlacemark

{

2.建立起點:根據CLPlacemark地標對象建立MKPlacemark地標對象                                   MKPlacemark *itemP1 = [[MKPlacemark alloc]

initWithPlacemark:beginPlacemark];

MKMapItem *item1 = [[MKMapItem alloc]initWithPlacemark:itemP1];

3.建立終點:根據CLPlacemark地標對象建立MKPlacemark地標對象                                 MKPlacemark *itemP2 = [[MKPlacemark alloc]initWithPlacemark:endPlacemark];

MKMapItem *item2 = [[MKMapItem alloc]initWithPlacemark:itemP2];

NSDictionary *launchDic = @{

4.設置導航模式參數                                                              MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving,

5.設置地圖類型                                                                              MKLaunchOptionsMapTypeKey :@(MKMapTypeHybridFlyover),

6.設置是否顯示交通

MKLaunchOptionsShowsTrafficKey : @(YES),

};

7.根據MKMapItem數組和啓動參數字典來調用系統地圖進行導航

[MKMapItem openMapsWithItems:@[item1, item2]

launchOptions:launchDic];

}

MKMapCamera地圖街景

主要方法:self.mapView.camera = camera;

示例代碼

1.建立視角中心座標:CLLocationCoordinate2D

center = CLLocationCoordinate2DMake(23.132931, 113.375924);

2.建立3D視角:

MKMapCamera *camera = [MKMapCameracameraLookingAtCenterCoordinate:center

fromEyeCoordinate:CLLocationCoordinate2DMake(center.latitude + 0.001,

center.longitude + 0.001) eyeAltitude:1];

3.設置到地圖上顯示:self.mapView.camera = camera;

MKMapSnapshotter地圖截圖

1.主要方法

[snapshotter startWithCompletionHandler:^(MKMapSnapshot

* _Nullable snapshot, NSError * _Nullable error) { }];

示例代碼

截圖附加選項:MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];

1.設置截圖區域(在地圖上的區域,做用在地圖):

options.region =self.mapView.region;

options.mapRect =self.mapView.visibleMapRect;

2.設置截圖後的圖片大小(做用在輸出圖像)

options.size =self.mapView.frame.size;

3.設置截圖後的圖片比例(默認是屏幕比例,做用在輸出圖像)

options.scale = [[UIScreen mainScreen] scale];

MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc]

initWithOptions:options];

[snapshotter startWithCompletionHandler:^(MKMapSnapshot *_Nullablesnapshot,

NSError*_Nullableerror) {

if(error) {

NSLog(@"截圖錯誤:%@",error.localizedDescription);

}else

{

4.設置屏幕上圖片顯示

self.snapshootImageView.image = snapshot.image;

將圖片保存到指定路徑(此處是桌面路徑,須要根據我的電腦不一樣進行修改)

NSData *data = UIImagePNGRepresentation(snapshot.image);

[data writeToFile:@"/Users/wangshunzi/Desktop/snap.png"atomically:YES];

}

}];

MKDirections獲取導航路線信息

主要方法

[directions calculateDirectionsWithCompletionHandler:

^(MKDirectionsResponse * _Nullable response,

NSError * _Nullable error) {

}];

繪製路線,添加覆蓋層等

主要方法:(這裏不像添加大頭針那樣,只要咱們添加了大頭針模型,默認就會在地圖上添加系統的大頭針視圖)

1.添加覆蓋層,須要咱們實現對應的代理方法,在代理方法中返回對應的覆蓋層[self.mapViewaddOverlay:overlay];

2.調用了以上方法後,會調用如下代理方法獲取對應的渲染塗層                                                     -(MKOverlayRenderer *)mapView:(MKMapView*)mapView rendererForOverlay:(id)overlay



文/百度工程師阿偉(簡書做者) 原文連接:http://www.jianshu.com/p/9f00911bf530 著做權歸做者全部,轉載請聯繫做者得到受權,並標註「簡書做者」。
相關文章
相關標籤/搜索