地圖的中級使用-用戶追蹤
1. 查看當前用戶位置信息
- 設置地圖代理
- 實現代理方法
-
方案一:當位置變化時調用-實時更新
- 動態跟蹤用戶,地圖顯示區域一直以用戶位置為中心動態變化
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { // MKUserLocation是指用戶大頭針信息,詳見本文第4點 // 調整地圖區域代碼 }
- 動態跟蹤用戶,地圖顯示區域一直以用戶位置為中心動態變化
-
方案二:當地圖顯示的區域改變時調用-更新頻率稍慢
- 動態跟蹤用戶,但只要用戶位置(大頭針)沒有超出顯示區域,不會調整地圖顯示區域
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { // 調整地圖區域代碼 }
- 動態跟蹤用戶,但只要用戶位置(大頭針)沒有超出顯示區域,不會調整地圖顯示區域
-
2. 調整地圖顯示中心 - 精度低(不推薦)
- 確定地圖中心經緯度坐標
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(21.123, 121.345);
- 設置地圖中心為給定的經緯度坐標
[mapView setCenterCoordinate:center animated:YES];
- 不足:默認顯示范圍太大,需手動調整顯示區域
3. 調整地圖顯示區域(中心 + 跨度) - 精度高
-
創建區域
//區域中心 CLLocationCoordinate2D center = CLLocationCoordinate2DMake(21.123, 121.345); // 區域跨度-經緯度跨度 MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1); MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
-
設置地圖顯示區域
[self.mapView setRegion:region animated:YES];
-
概念解釋
MKCoordinateSpan 跨度解釋: latitudeDelta:緯度跨度,因為南北緯各90.0度,所以此值的范圍是(0.0---180.0);此值表示,整個地圖視圖寬度,顯示多大跨度; longitudeDelta:經度跨度,因為東西經各180.0度,所以此值范圍是(0.0---360.0):此值表示,整個地圖視圖高度,顯示多大跨度; 注意:地圖視圖顯示,不會更改地圖的比例,會以地圖視圖高度或寬度較小的那個為基準,按比例調整
4.MKUserLocation-大頭針
- 被稱作“大頭針(數據)模型”,用于描述用戶位置信息
- 詳見地圖高級-大頭針基本使用
5. 測試環境
1. 加載地圖數據需要聯網
2. XCode版本不限
3. iOS系統版本不限
6. 常見問題總結
1. 地圖上的藍點為啥不顯示?
第一: 確定代碼是否有誤(例如, 是否顯示了用戶位置)
第二: 確定模擬器是否設置位置
第三: 看下位置在哪, 是不是不在當前地圖顯示區域
2. 地圖跨度設置之后, 最終顯示的跨度和設置數值不一致?
因為地球的不是正方形的, 隨著用戶的位置移動, 會自動修正地圖跨度, 保持地圖不變形;