美文网首页工具地图程序员
iOS高德地图开发【二】搜索与导航

iOS高德地图开发【二】搜索与导航

作者: 米拉_Recorder | 来源:发表于2017-03-13 00:30 被阅读1634次

    喜大普奔,终于,整理了搜索和导航。
    效果图先奉上:


    IMG_4293.PNG
    ![IMG_4296.PNG](https://img.haomeiwen.com/i1366318/7032d611f03a64c8.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    1.依据关键词进行搜索

    监听文本框编辑的变化,实现关键字模糊查询。搜索是地图的API,导入高德地图框架包,这个我在第一篇的时候已经讲述过了。详情请看高德地图api开发文档。搜索结果的处理是实现搜索的代理方法。

    -(void)setAddrssKeyWord:(NSString *)addrssKeyWord
    {
        _addrssKeyWord = addrssKeyWord;
        
        //发起输入提示搜索
        AMapInputTipsSearchRequest *tipsRequest = [[AMapInputTipsSearchRequest alloc] init];
        tipsRequest.keywords = addrssKeyWord;
        tipsRequest.city = self.cityName;
        tipsRequest.cityLimit = YES;
        [_search AMapInputTipsSearch: tipsRequest];
    }
    
    //实现输入提示的回调函数
    -(void)onInputTipsSearchDone:(AMapInputTipsSearchRequest*)request response:(AMapInputTipsSearchResponse *)response
    {
        if(response.tips.count == 0) {
            return;
        }
        NSMutableArray *tempArray = [NSMutableArray array];
        for (AMapTip *tip in response.tips) {
            AdressModel *ads = [[AdressModel alloc]init];
            ads.uid = tip.uid;
            ads.name = tip.name;
            ads.district = tip.district;
            ads.address = tip.address;
            ads.adcode = tip.adcode;
            ads.latitude = tip.location.latitude;
            ads.longitude = tip.location.longitude;
            [tempArray addObject:ads];
        }
        self.dataArray = [tempArray copy];
        [_tableView reloadData];
    }
    

    2.保存点击过的地址为历史记录

    以下是核心代码,细节方面还需要优化,比如,你点击的地址是否已经被存储过了等等。存储的方式选择的是归档和NSUserDefaults。

    -(void)updateUsedAddress:(AdressModel *)modle
    {
        NSMutableArray *tempArray = [NSMutableArray array];
        for (AdressModel *modle in self.historyArray) {
            NSData *addressData = [NSKeyedArchiver archivedDataWithRootObject:modle];
            [tempArray addObject:addressData];
        }
        [userDefaults setObject:[NSArray arrayWithArray:tempArray] forKey:key];
        [userDefaults synchronize];
    }
    

    3.语音导航

    导航要导入相应的包,还有对应的framework的添加,请参照官方文档。这里的语音用的是百度的语音合成,这个也需要导入相应的包和framework,如果framework添加完还报错的话,对症下药就行,我就因缺少这个报错。


    CB3D07B6-E6B7-4C4D-BA49-2BE855CBDAC9.jpg
        [self initProperties];
        [self.view addSubview:self.walkMapView];
        [self initWalkManager];
        [self.walkManager calculateWalkRouteWithStartPoints:@[self.startPoint] endPoints:@[self.endPoint]];
        [self configureSDK];
    

    五个步骤,非常清楚,官方文档写的也很清楚。这里以步行导航为例。

    • 配置导航的起点和终点的经纬度。
    • 创建步行导航的视图并设置代理。
    • 创建步行导航管理者,并设置代理。路线规划全靠这个管理者了。要实现AMapNaviWalkManagerDelegate代理方法。
    • 开始规划路线。
    • 百度语音的配置。需要先去百度语音开发者平台申请应用得到对应的key设置。
        [BDSSpeechSynthesizer setLogLevel:BDS_PUBLIC_LOG_VERBOSE];
        [[BDSSpeechSynthesizer sharedInstance] setSynthesizerDelegate:self];
        [[BDSSpeechSynthesizer sharedInstance] setApiKey:@"你的APIKey" withSecretKey:@"你的SecretKey"];
    

    ** 实现对应的代理方法 **
    代理方法有很多,包括路线规划成功,失败,还有退出按钮的监听事件等等。路线规划成功后开始导航[self.walkManager startGPSNavi];这里主要讲述如何将文字转化为语音的实现。

    - (void)walkManager:(AMapNaviWalkManager *)walkManager playNaviSoundString:(NSString *)soundString soundStringType:(AMapNaviSoundType)soundStringType
    {
        NSLog(@"walkManagerplayNaviSoundString:{%ld:%@}", (long)soundStringType, soundString);
        NSInteger sentenceID;
        NSError *err = nil;
        sentenceID = [[BDSSpeechSynthesizer sharedInstance] speakSentence:soundString withError:&err];
    }
    

    4.总结

    涉及的很多东西都是第三方的,所以主要还是要好好看文档。还有一些就是细节方面的问题,这方面我也在不断学习,希望能够共同进步。github地址 多多指教。

    相关文章

      网友评论

      • 散夜:onInputTipsSearchDone 返回的response是不是只有十条?怎么返回更多啊?
      • tp夕阳武士:作者你好,我有个关于高德导航的问题想要咨询一下,就是进去导航界面的时候,路线图显示是纯色的,不是有纹理的图片路线
        米拉_Recorder:@tp夕阳武士 我刚开始就是用pod导进来的,所以没有遇见你说的那个问题。嗯嗯,可能是少了什么文件吧。
        tp夕阳武士:不是,是进入导航界面的时候,导航提示的线路纹理显示成白色
        我的问题已经解决了,我之前是单独手动导入了导航的SDK,后来我用pod一起导入了高德的定位SDK
        高德地图SDK,高德导航SDK,然后问题就自动解决了
        我也不知道具体是什么原因导致我原来遇到的那个问题,但是通过pod同时导入三个SDK后就解决了问题
        __weak:你说的是路线规划吧,骑行,步行路线规划那些是不是啊?
      • 墨源为水:写的很不错,很详细,🤗🤗🤗🤗🤗

      本文标题:iOS高德地图开发【二】搜索与导航

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