工具地图程序员

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

2017-03-13  本文已影响1634人  米拉_Recorder

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


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];

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

    [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地址 多多指教。

上一篇下一篇

猜你喜欢

热点阅读