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 方法会被循环触发?

posted @ 2012-11-20 23:51  ygm900  阅读(593)  评论(1编辑  收藏  举报