zoukankan      html  css  js  c++  java
  • 最简单的iOS MapView标记点纠偏的方法

    由于我国国情,在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;
        
    }
  • 相关阅读:
    [POI2014]FarmCraft
    [POI2014]Solar Panels
    Luogu P2824 [HEOI2016/TJOI2016]排序
    CF903G Yet Another Maxflow Problem
    CF901C Bipartite Segments
    CF749E Inversions After Shuffle
    ARC068C Snuke Line
    BZOJ3747 [POI2015]Kinoman
    SA-IS
    简单字符串
  • 原文地址:https://www.cnblogs.com/E7868A/p/2796785.html
Copyright © 2011-2022 走看看