地圖的中級使用-用戶追蹤

地圖的中級使用-用戶追蹤

1. 查看當前用戶位置信息

  1. 設置地圖代理
  2. 實現代理方法
    • 方案一:當位置變化時調用-實時更新

      • 動態跟蹤用戶,地圖顯示區域一直以用戶位置為中心動態變化
        - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
            {
                // MKUserLocation是指用戶大頭針信息,詳見本文第4點
        
                // 調整地圖區域代碼
            }
        
    • 方案二:當地圖顯示的區域改變時調用-更新頻率稍慢

      • 動態跟蹤用戶,但只要用戶位置(大頭針)沒有超出顯示區域,不會調整地圖顯示區域
        - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
            {
                // 調整地圖區域代碼
            }
        

2. 調整地圖顯示中心 - 精度低(不推薦)

  1. 確定地圖中心經緯度坐標
CLLocationCoordinate2D center =  CLLocationCoordinate2DMake(21.123, 121.345);
  1. 設置地圖中心為給定的經緯度坐標
[mapView setCenterCoordinate:center animated:YES];
  1. 不足:默認顯示范圍太大,需手動調整顯示區域

3. 調整地圖顯示區域(中心 + 跨度) - 精度高

  1. 創建區域

    //區域中心
    CLLocationCoordinate2D center =
    CLLocationCoordinate2DMake(21.123, 121.345);
    
    // 區域跨度-經緯度跨度
    MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
    
    MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
    
  2. 設置地圖顯示區域

    [self.mapView setRegion:region animated:YES];
    
  3. 概念解釋

     MKCoordinateSpan 跨度解釋:
    
         latitudeDelta:緯度跨度,因為南北緯各90.0度,所以此值的范圍是(0.0---180.0);此值表示,整個地圖視圖寬度,顯示多大跨度;
    
         longitudeDelta:經度跨度,因為東西經各180.0度,所以此值范圍是(0.0---360.0):此值表示,整個地圖視圖高度,顯示多大跨度;
    
         注意:地圖視圖顯示,不會更改地圖的比例,會以地圖視圖高度或寬度較小的那個為基準,按比例調整
    
  4. 詳見MKCoordinateRegion(區域)

4.MKUserLocation-大頭針

5. 測試環境

    1. 加載地圖數據需要聯網
    2. XCode版本不限
    3. iOS系統版本不限

6. 常見問題總結

    1. 地圖上的藍點為啥不顯示?
        第一: 確定代碼是否有誤(例如, 是否顯示了用戶位置)
        第二: 確定模擬器是否設置位置
        第三: 看下位置在哪, 是不是不在當前地圖顯示區域

    2. 地圖跨度設置之后, 最終顯示的跨度和設置數值不一致?
        因為地球的不是正方形的, 隨著用戶的位置移動, 會自動修正地圖跨度, 保持地圖不變形;

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容