02 使用百度地图获得当前位置的经纬度

O 需求

通过百度地图,获取用户当前位置的经纬度

一 准备

确保你已按照上篇《01 如何将百度地图加入IOS应用程序?》完成了相关功能。本篇将在上一篇的基础上进行修改。

二 编码

(New标示本次新添加的代码;Delete表示本次需要删除的代码;Modify表示本次被修改的代码)

1、在ViewController.h中添加引BMKMapViewDelegate的声明,如下

@interface ViewController : UIViewController<……,BMKMapViewDelegate>     //New
{……  }

在ViewController.mm中修改代码如下

- (void)viewDidLoad
{
    ……
    //创建一张百度地图
    BMKMapView* mapView = [[BMKMapViewalloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
    [mapView setShowsUserLocation:YES];               // New 开启定位功能
    mapView.delegate = self;                            // New 将委托变量指向Controller
    [self.viewaddSubview:mapView];
}
 
 
/**
 在地图View将要启动定位时,会调用此函数
 @param mapView 地图View
 下面的这个方法,貌似并没有被启动啊?是否是可有可无的?
 */
- (void)mapViewWillStartLocatingUser:(BMKMapView *)mapView
 
{
     NSLog(@"start locate");
}
#pragma mark -  实现 BMKMapViewDelegate 中的方法
/**
     用户位置更新后,会调用此函数
     @param mapView 地图View
     @param userLocation 新的用户位置
    在实际使用中,只需要    [mapView setShowsUserLocation:YES];    mapView.delegate = self;   两句代码就可以启动下面的方法。疑问,为什么我的位置没有移动的情况下,这个方法循环被调用呢?
 */
- (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation
{
     if (userLocation != nil) {
       NSLog(@"%f %f", userLocation.location.coordinate.latitude, userLocation.location.coordinate.longitude);
     }
}
 
/**
     定位失败后,会调用此函数
     @param mapView 地图View
     @param error  错误号,参考CLError.h中定义的错误号
 */
- (void)mapView:(BMKMapView *)mapView didFailToLocateUserWithError:(NSError *)error
 
{
     if (error != nil)
       NSLog(@"locate failed: %@", [error localizedDescription]);
     else {
       NSLog(@"locate failed");
     }
}

执行后,将控制台打印出你当前的地理坐标:


此时,手机端的地图上还没有任何反应,别急,我们将在下一篇中让地图定位到当前的地理位置。

三 下载       ...... 去下载源代码咯......

四 疑问

1、在百度给的Demo中,百度在实现 BMKMapViewDelegate中的方法中实现了如下- (void)mapViewWillStartLocatingUser:(BMKMapView *)mapView方法,但是在实际测试中,貌似此方法并没有被执行?这是为什么呢?

2、当前的地理位置没有改变的情况下,为什么- (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation 方法会被循环触发?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值