喜大普奔,終于,整理了搜索和導航。
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地址 多多指教。