您的位置:首页 > 其它

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

2012-11-20 23:51 513 查看
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 方法会被循环触发?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐