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

  • 相关阅读:
    SpringCloud高可用和高并发
    时间重要性,我们需要如何利用极致
    Spring是什么 包括SpringBean SpringMVC SpringBoot SpringCloud
    Java 线程的基本使用
    JVM 内存模型
    Java 8 ArrayList 详解
    Java 8 HashMap 源码解析
    Docker 运行 MySQL,使用 docker-compose
    Spring Boot 主从读写分离
    Spring Boot 整合 MyBatis 实现乐观锁和悲观锁
  • 原文地址:https://www.cnblogs.com/ygm900/p/2783149.html
Copyright © 2020-2023  润新知