最簡單的iOS MapView標記點糾偏的方法

來源:互聯網
上載者:User

由於我國國情,在MapView上做標記添加Annotation時總會與實際GPS座標有幾百米的偏差。同樣,在根據GPS點,做反向解析地址時也是位移過的地址。

MapView有一個屬性是showsUserLocation,當置為YES時,地圖上會顯示一個藍色的點,標誌使用者的當前位置。這個藍色的點的位置與使用者的實際位置是相符的。顯然是,MapView把使用者的實際座標做了位移,從而在位移的地圖上顯示出正確的位置。如果能得到這個藍色點的座標,再與使用者實際GPS座標相比較,就能得到地圖在當前位置的位移值。

MapView有一個MKUserLocation類型的屬性userLocation。這個屬性裡又有一個屬性是location,這個location就是地圖上藍色點位移後的座標。把這個點的座標與使用者實際座標相比較,就能得到當前位置的位移值。

MKUserLocation還支援KVO,我們只用添加一個"location"的Observer,就能持續得到藍色點的座標,這樣就能隨著使用者座標的改變,隨時更新位移值。

主要代碼如下:

// 首先,在viewDidLoad中添加以下兩行// 顯示我的位置點_mapView.showsUserLocation = YES;// 添加"location"的Observer[_mapView.userLocation addObserver:self forKeyPath:@"location"                               options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)                               context:nil];// 然後,使用 CLLocationManager 獲得使用者實際座標更新// 這裡就省略了

實現Observer

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    // 這裡就是位移後的座標,與使用者實際座標相減,就是當前位置的座標位移值    CLLocation *fakeloc = _mapView.userLocation.location;    }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.