iOS百度地圖開發(fā)中遇到的問題

由于項目需要地圖功能,公司決定使用百度地圖,但是百度地圖也有很多問題,現(xiàn)在總結(jié)一下在百度地圖中遇到的坑,希望給各位看官一點參考,避免走一些彎路.我使用的百度地圖SDK2.9.1.

iOS地圖SDK鏈接,上面的連接是一些注意事項.

(一)關(guān)于定位的一些設(shè)置

//初始化定位服務(wù)
_locService = [[BMKLocationService alloc] init];
//設(shè)置距離過濾器(默認距離是米)
_locService.distanceFilter = 10;
//設(shè)置定位精度
_locService.desiredAccuracy = kCLLocationAccuracyBest;
//開啟定位服務(wù)
[_locService startUserLocationService];
//指定定位:是否允許后臺定位更新穗慕。默認為NO。只在iOS 9.0之后起作用
if ([[UIDevice currentDevice].systemVersion doubleValue] >= 9) {
        _locService.allowsBackgroundLocationUpdates = YES;
}
//設(shè)置定位的狀態(tài)
_mapView.userTrackingMode = BMKUserTrackingModeNone;
//顯示定位圖層
_mapView.showsUserLocation = YES;
//設(shè)置定位圖層自定義樣式
BMKLocationViewDisplayParam *userlocationStyle = [[BMKLocationViewDisplayParam alloc] init];
//精度圈是否顯示
userlocationStyle.isRotateAngleValid = YES;
//跟隨態(tài)旋轉(zhuǎn)角度是否生效
userlocationStyle.isAccuracyCircleShow = NO;
//定位圖標
userlocationStyle.locationViewImgName = [UIImage imageNamed:@"圖標名稱"];
//更新參樣式信息
[_mapView updateLocationViewWithParam:userlocationStyle];

(二)關(guān)于當(dāng)前定位位置

首先,顯示當(dāng)前位置,百度地圖提供了三種模式:

typedef enum {
    BMKUserTrackingModeNone = 0,             /// 普通定位模式
    BMKUserTrackingModeFollow,               /// 定位跟隨模式
    BMKUserTrackingModeFollowWithHeading,    /// 定位羅盤模式
} BMKUserTrackingMode;
定位模式

使用下面代碼就能設(shè)置定位狀態(tài):

//設(shè)置定位的狀態(tài)
    _mapView.userTrackingMode = BMKUserTrackingModeNone;

普通定位模式?jīng)]有問題,但是如果設(shè)置定位跟隨或定位羅盤模式,運行app,你會發(fā)現(xiàn)定位點確實是對應(yīng)的狀態(tài),但是當(dāng)你拖動地圖的時候,你就會發(fā)現(xiàn)后兩種模式,又變回了普通定位模式.

我問了百度地圖的工程師,他們說這是當(dāng)前的策略...

所以我感覺設(shè)置跟隨模式和羅盤模式?jīng)]有什么卵用...

(三)關(guān)于用戶方向更新后的設(shè)置

如上面(一)所述,定位點可是設(shè)置樣式參數(shù),當(dāng)你自定義了定位圖標后,你會發(fā)現(xiàn)定位圖標確實換為了自己定義的圖標,而且當(dāng)用戶方向更新后妻导,定位圖標是回發(fā)生旋轉(zhuǎn)的,但是當(dāng)你點擊觸摸屏幕后,定位圖標馬上變?yōu)槌跏嫉那闆r,并且用戶方向更新,定位圖標不在發(fā)生變化.

對于這種情況,我想了一個辦法,就是使用系統(tǒng)的定位,在地圖界面添加一個方向的圖標,如下圖:

代碼如下:

- (void)viewDidLoad {
    //版本號
    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        //主動請求權(quán)限
        [self.mgr requestAlwaysAuthorization];
    }
    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 9) {
        self.mgr.allowsBackgroundLocationUpdates = YES;
    }
    //對系統(tǒng)定位進行設(shè)置
    self.mgr.delegate = self;
    [self.mgr startUpdatingLocation];
    //開始監(jiān)聽(開始獲取位置)
    [self.mgr startUpdatingHeading];
}
//pragma mark -用戶方向更新后,會調(diào)用此函數(shù)
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
    // 將獲取到的角度轉(zhuǎn)為弧度 = (角度 * π) / 180;
    CGFloat angle = newHeading.magneticHeading * M_PI / 180;
    // 旋轉(zhuǎn)圖片
    self.compasspointer.transform = CGAffineTransformMakeRotation(-angle);
}
//pragma mark - 懶加載
- (CLLocationManager *)mgr
{
    if (!_mgr) {
        _mgr = [[CLLocationManager alloc] init];
    }
    return _mgr;
}

當(dāng)然如果覺得這種處理不好,可以再想其他解決辦法~

(四)關(guān)于app切換到后臺產(chǎn)生的問題

當(dāng)app切換到后臺再切換回前臺,mapView可能會產(chǎn)生黑屏的情況,此時只需在AppDelegate.m中的applicationWillResignActive:(UIApplication *)applicationapplicationDidBecomeActive:(UIApplication *)application添加如下代碼:

- (void)applicationWillResignActive:(UIApplication *)application {
    //程序?qū)⒁M入后臺
    [BMKMapView willBackGround];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
    //程序進入前臺
    [BMKMapView didForeGround];
}

(五)關(guān)于BMKLocationServiceDelegate

設(shè)置定位的委托有如下兩種方式:

  • 方式1:
- (void)viewDidLoad {
    [super viewDidLoad];
    _mapView.delegate = self; 
    _locService.delegate = self;
}
-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    _locService.delegate = nil;
}
  • 方式2
-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    _locService.delegate = nil;
}
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    _locService.delegate = self;
}

上面兩種方式的區(qū)別:

如果在viewDidLoad里寫定位委托的話,加載完mapView后,定位當(dāng)前位置是可以正常顯示,并且可以隨著位置的變化,定位點也隨之發(fā)生變化.如果切換到后臺,然后再切換回mapView界面,定位點還是會變化.但是會產(chǎn)生一個問題,當(dāng)點擊別的tabbar,切換到別的界面后,再切換回mapView界面,定位點就不再隨著位置的變化而發(fā)生變化了.

如果采用方式2的話,就會避免這種問題.

(六)關(guān)于標注與當(dāng)前位置間距離的計算

    //設(shè)置標注的經(jīng)緯度坐標
    CGFloat latitude = 39.915168;
    CGFloat longitude = 116.403875;
    anno.coordinate = CLLocationCoordinate2DMake(latitude, longitude);
    //計算所選坐標和當(dāng)前位置之間的距離
    CLLocationCoordinate2D currentAnno = CLLocationCoordinate2DMake(latitude, longitude);
        BMKMapPoint mp1 = BMKMapPointForCoordinate(currentAnno);
        BMKMapPoint mp2 = BMKMapPointForCoordinate(userLocation.location.coordinate);
        //distance的單位是米
        CLLocationDistance distance = BMKMetersBetweenMapPoints(mp1, mp2);

最后,需要說明一下,系統(tǒng)地圖和高德地圖我也用過了,用法和百度地圖非常相似,尤其是高德地圖,更是相似,很多地方都是把前綴換一下就OK了,其他代碼都不用改,但是有個別地方還是有區(qū)別的,比如說百度地圖的paopaoView,高德地圖和百度地圖是不一樣的.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寿酌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子醇疼,更是在濱河造成了極大的恐慌,老刑警劉巖鲤孵,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件普监,死亡現(xiàn)場離奇詭異琉兜,居然都是意外死亡,警方通過查閱死者的電腦和手機廊散,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門允睹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缭受,你說我怎么就攤上這事【禄” “怎么了胰丁?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵锦庸,是天一觀的道長蒲祈。 經(jīng)常有香客問我,道長讳嘱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任邀泉,我火速辦了婚禮汇恤,結(jié)果婚禮上拔恰,老公的妹妹穿的比我還像新娘。我一直安慰自己财岔,他們只是感情好河爹,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夷恍,像睡著了一般媳维。 火紅的嫁衣襯著肌膚如雪遏暴。 梳的紋絲不亂的頭發(fā)上拓挥,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天袋励,我揣著相機與錄音茬故,去河邊找鬼磺芭。 笑死,一個胖子當(dāng)著我的面吹牛钾腺,可吹牛的內(nèi)容都是我干的讥裤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼间螟,長吁一口氣:“原來是場噩夢啊……” “哼厢破!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起摩泪,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤见坑,失蹤者是張志新(化名)和其女友劉穎鳄梅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戴尸,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡孙蒙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年挎峦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片透典。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡顿苇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凑队,到底是詐尸還是另有隱情幔翰,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布叫惊,位于F島的核電站赋访,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蚓耽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一步悠、第九天 我趴在偏房一處隱蔽的房頂上張望鼎兽。 院中可真熱鬧,春花似錦谚咬、人聲如沸尚粘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尚辑。三九已至,卻和暖如春月褥,著一層夾襖步出監(jiān)牢的瞬間瓢喉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逗载,地道東北人链烈。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓强衡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親感挥。 傳聞我的和親對象是個殘疾皇子越败,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容