02 使用百度地图获得当前位置的经纬度
O 需求
通过百度地图,获取用户当前位置的经纬度
一 准备
确保你已按照上篇《01 如何将百度地图加入IOS应用程序?》完成了相关功能。本篇将在上一篇的基础上进行修改。
二 编码
(New标示本次新添加的代码;Delete表示本次需要删除的代码;Modify表示本次被修改的代码)
1、在ViewController.h中添加引入BMKMapViewDelegate的声明,如下
1 @interface ViewController : UIViewController<……,BMKMapViewDelegate> //New 2 {…… }
在ViewController.mm中修改代码如下
1 - (void)viewDidLoad 2 { 3 …… 4 //创建一张百度地图 5 BMKMapView* mapView = [[BMKMapViewalloc]initWithFrame:CGRectMake(0, 0, 320, 480)]; 6 [mapView setShowsUserLocation:YES]; // New 开启定位功能 7 mapView.delegate = self; // New 将委托变量指向Controller 8 [self.viewaddSubview:mapView]; 9 } 10 11 12 /** 13 在地图View将要启动定位时,会调用此函数 14 @param mapView 地图View 15 下面的这个方法,貌似并没有被启动啊?是否是可有可无的? 16 */ 17 - (void)mapViewWillStartLocatingUser:(BMKMapView *)mapView 18 19 { 20 NSLog(@"start locate"); 21 } 22 #pragma mark - 实现 BMKMapViewDelegate 中的方法 23 /** 24 用户位置更新后,会调用此函数 25 @param mapView 地图View 26 @param userLocation 新的用户位置 27 在实际使用中,只需要 [mapView setShowsUserLocation:YES]; mapView.delegate = self; 两句代码就可以启动下面的方法。疑问,为什么我的位置没有移动的情况下,这个方法循环被调用呢? 28 */ 29 - (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation 30 { 31 if (userLocation != nil) { 32 NSLog(@"%f %f", userLocation.location.coordinate.latitude, userLocation.location.coordinate.longitude); 33 } 34 } 35 36 /** 37 定位失败后,会调用此函数 38 @param mapView 地图View 39 @param error 错误号,参考CLError.h中定义的错误号 40 */ 41 - (void)mapView:(BMKMapView *)mapView didFailToLocateUserWithError:(NSError *)error 42 43 { 44 if (error != nil) 45 NSLog(@"locate failed: %@", [error localizedDescription]); 46 else { 47 NSLog(@"locate failed"); 48 } 49 }
执行后,将控制台打印出你当前的地理坐标:
此时,手机端的地图上还没有任何反应,别急,我们将在下一篇中让地图定位到当前的地理位置。
三 下载 ...... 去下载源代码咯......
四 疑问
1、在百度给的Demo中,百度在实现 BMKMapViewDelegate中的方法中实现了如下- (void)mapViewWillStartLocatingUser:(BMKMapView *)mapView方法,但是在实际测试中,貌似此方法并没有被执行?这是为什么呢?
2、当前的地理位置没有改变的情况下,为什么- (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation 方法会被循环触发?