喜大普奔,终于,整理了搜索和导航。
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添加完还报错的话,对症下药就行,我就因缺少这个报错。
[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地址 多多指教。