美文网首页iOS实用教程iOS 开发 iOS Developer
iOS开发——定位并展示用户当前位置(高德地图SDK)

iOS开发——定位并展示用户当前位置(高德地图SDK)

作者: Lol刀妹 | 来源:发表于2016-08-30 22:53 被阅读7795次
    Apink-孙娜恩

    产品需求

    由于用户手动输入地址太过麻烦,现要求改进用户体验:新增一个定位图标,用户点击,跳转到用户地址列表页面,点击其中一条地址即可。

    思路

    首先需要定位用户位置,然后,根据定位坐标,进行周边搜索

    步骤及代码

    关于高德地图的集成和使用,官网上有详细讲解及demo,我就不一一介绍了,总的说来,都是套路(调用方法+方法回调)。

    定位

    • 主动调用定位方法
    //开始定位
    [self.locationManager startUpdatingLocation];
    
    
    • 调用定位方法时会回调位置更新代理方法,可以在这里获取到用户位置
    - (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location
    {
        // 定位结果
        NSLog(@"location:{lat:%f; lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);
        // 赋值给全局变量
        self.location = location;
        // 发起周边搜索
        [self searchAround];
        // 停止定位
        [self.locationManager stopUpdatingLocation];
    }
    
    • 定位成功后以用户定位点为中心发起周边搜索(注意:type是搜索类型,要写全)
    /** 根据定位坐标进行周边搜索 */
    - (void)searchAround{
        self.search = [[AMapSearchAPI alloc] init];
        self.search.delegate = self;
        
        //构造AMapPOIAroundSearchRequest对象,设置周边请求参数
        AMapPOIAroundSearchRequest *request = [[AMapPOIAroundSearchRequest alloc] init];
        request.location = [AMapGeoPoint locationWithLatitude:self.location.coordinate.latitude longitude:self.location.coordinate.longitude];
        // types属性表示限定搜索POI的类别,默认为:餐饮服务|商务住宅|生活服务
        // POI的类型共分为20种大类别,分别为:
        // 汽车服务|汽车销售|汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|
        // 医疗保健服务|住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|
        // 交通设施服务|金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施
        request.types = @"汽车服务|汽车销售|汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施";
        request.sortrule = 0;
        request.requireExtension = YES;
        
        NSLog(@"周边搜索");
        
        //发起周边搜索
        [self.search AMapPOIAroundSearch: request];
    }
    

    其中[self.search AMapPOIAroundSearch: request]会回调周边搜索的代理方法
    在周边搜索的代理方法中获取poi,得到tableView的数据源

    // 实现POI搜索对应的回调函数
    - (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response{
        NSLog(@"周边搜索回调");
        if(response.pois.count == 0)
        {
            return;
        }
        
        self.dataArray = [NSMutableArray arrayWithArray:response.pois];
        // 周边搜索完成后,刷新tableview
        [self.tableView reloadData];
        
        // 停止旋转菊花
        [CQHud dismiss];
    }
    

    APP效果动态图展示

    效果图.gif

    后记

    现在的APP大多都有地图功能,定位需要地图、查找需要地图、路径分析需要地图,不得不说,掌握地图SDK很有必要。至于怎么掌握——不要求你熟悉sdk里的所以方法,但必须很熟悉里面的一些常用的方法,比如说定位和周边搜索,其他的,你要有所了解,坦白的说就是你要知道地图sdk能实现哪些功能,这是最基本的也是特别重要的。遇到问题时,仔细查看sdk文档、看官方demo以及最重要的:官方论坛。说实话,没有哪个搜索引擎能比官方论坛更好用了,为什么?因为这里有真正的专业人员维护。

    相关文章

      网友评论

      • 不暗_黑夜:你好, 你这个用的是高德的定位sdk吗?
        Lol刀妹:@除了老板都是盟友 多研究下高德的文档:smile:
        Lol刀妹:@除了老板都是盟友 是的
      • Fengzesheng:楼主是用了系统的加高德地图吧 ,不是纯高德地图
        Lol刀妹:@Fengzesheng 是高德地图,不过高德地图也是封装的苹果地图:smile:
      • Tomboy_Anan:正好需要。
      • 来宝:楼主用的是持续定位,如果你不在didUpdateLocation:方法里面停止定位的话[self.locationManager stopUpdatingLocation],定位信息会不会持续打印?
        PGOne爱吃饺子:你怎么看出楼主是用的持续定位啊,指教一下
        Lol刀妹:@来宝 嗯嗯,加了的话这个方法会被瞬间调用几次,也许是求的平均值吧:smile:
      • 十一岁的加重:那个动画不错哦
        Lol刀妹:@十一岁的加重 系统自带的:smile:
      • catcherdream:楼主有没有demo
        catcherdream:@无夜之星辰 不用了,搞定了
        Lol刀妹:@唐硕 没有demo 我直接在项目里写的

      本文标题:iOS开发——定位并展示用户当前位置(高德地图SDK)

      本文链接:https://www.haomeiwen.com/subject/txkqettx.html