iOS 百度地圖3-檢索

百度地圖SDK提供的檢索服務(wù)包括以下功能模塊:
POI檢索更振,
公交方案檢索炕桨,
駕車(chē)路線檢索,
步行路線檢索肯腕,
行政區(qū)邊界數(shù)據(jù)檢索献宫,
地理編碼,
反地理編碼实撒,
公交詳情檢索遵蚜,
在線建議查詢(xún)帖池,
短串分享(包括POI搜索結(jié)果分享、駕車(chē)/公交/騎行/步行路線規(guī)劃分享吭净、反向地理編碼結(jié)果分享)。

每個(gè)檢索功能模塊都包括一個(gè)主檢索對(duì)象肴甸,一個(gè)用于構(gòu)造檢索參數(shù)的Option結(jié)構(gòu)體寂殉,和一個(gè)用于接收檢索結(jié)果回調(diào)的Delegate,所有檢索服務(wù)都使用異步回調(diào)模式原在。使用檢索服務(wù)時(shí)友扰,需要先初始化主檢索對(duì)象,然后通過(guò)主檢索對(duì)象以包含檢索參數(shù)的Option做為參數(shù)發(fā)起檢索庶柿,最后實(shí)現(xiàn)相應(yīng)的檢索功能模塊的Delegate處理返回結(jié)果 村怪。
更加具體的使用詳情可以參看 [百度地圖檢索功能]
(http://lbsyun.baidu.com/index.php?title=iossdk/guide/retrieval)

1 POI周邊檢索

POI(Point of Interest),中文可以翻譯為“興趣點(diǎn)”浮庐。在地理信息系統(tǒng)中甚负,一個(gè)POI可以是一棟房子、一個(gè)商鋪审残、一個(gè)郵筒梭域、一個(gè)公交站等。
百度地圖SDK提供三種類(lèi)型的POI檢索:周邊檢索搅轿、區(qū)域檢索和城市內(nèi)檢索病涨。下面將以周邊檢索為例,向大家介紹如何使用檢索服務(wù)璧坟。

1.1 在頁(yè)面上定義一個(gè)輸入框既穆,內(nèi)容改變時(shí)發(fā)起檢索

注意檢查 nearBySearchOption.location 內(nèi)容是否正確,否則總是檢索不到結(jié)果

UITextField *poiTextField = [[UITextField alloc] initWithFrame:CGRectMake(30, 30, 100, 20)];
poiTextField.backgroundColor = [UIColor lightGrayColor];
[poiTextField addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventEditingChanged];
[self.view addSubview:poiTextField];
- (void)valueChange:(UITextField *)textField {
    
    _poiSearch = [[BMKPoiSearch alloc]init];
    _poiSearch.delegate = self;
    
    // 附近云檢索
    BMKNearbySearchOption *nearBySearchOption = [[BMKNearbySearchOption alloc]init];
    // 檢索關(guān)鍵字
    nearBySearchOption.keyword = textField.text;
    // 檢索中心點(diǎn)及半徑
    nearBySearchOption.location = _locService.userLocation.location.coordinate;
    nearBySearchOption.radius = 10000;
    // 搜索結(jié)果排序雀鹃,距離由近到遠(yuǎn)
    nearBySearchOption.sortType = BMK_POI_SORT_BY_DISTANCE;
    // 分頁(yè)索引及數(shù)量
    nearBySearchOption.pageIndex = 0;
    nearBySearchOption.pageCapacity = 10;
    
    // 開(kāi)始檢索幻工,結(jié)果在代理方法 onGetPoiResult 中返回
    BOOL flag = [_poiSearch poiSearchNearBy:nearBySearchOption];
    if (flag) {
        NSLog(@"搜索成功--%@", textField.text);
    }else {
        NSLog(@"搜索失敗");
    }
}

1.2 結(jié)果監(jiān)聽(tīng)

調(diào)用 poiSearchNearBy 方法后,檢索結(jié)果 在代理方法 onGetPoiResult 中返回褐澎,poiResult.poiInfoList 就是檢索到的結(jié)果会钝,是一個(gè) BMKPoiInfo 的集合,每個(gè)BMKPoiInfo包含該檢索點(diǎn)的名稱(chēng)工三,地址迁酸,uid等詳細(xì)信息。

- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {
    if (errorCode == BMK_SEARCH_NO_ERROR) {
        for (int i = 0; i < poiResult.poiInfoList.count; i++) {
            BMKPoiInfo *info = [poiResult.poiInfoList objectAtIndex:i];
            NSLog(@"地址:%@---%@---%@", info.city ,info.name, info.address);
        }
    }else {
        NSLog(@"檢索異常-%d", errorCode);
    }
}
檢索.PNG
檢索結(jié)果.jpeg

1.3 展示

1.3.1 把這些數(shù)據(jù)顯示到tableview上俭正,就是我們常見(jiàn)的搜索框搜索得到對(duì)應(yīng)的結(jié)果奸鬓。

檢索結(jié)果.PNG

1.3.2 或者將搜索出來(lái)的結(jié)果通過(guò)大頭針展示在地圖上:

- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {
    
    // 清楚屏幕中所有的annotation
    NSArray* array = [NSArray arrayWithArray:_mapView.annotations];
    [_mapView removeAnnotations:array];
    
    if (errorCode == BMK_SEARCH_NO_ERROR) {
        NSMutableArray *arrM = [NSMutableArray array];
        for (int i = 0; i < poiResult.poiInfoList.count; i++) {
            BMKPoiInfo *info = [poiResult.poiInfoList objectAtIndex:i];
            NSLog(@"地址:%@---%@---%@", info.city ,info.name, info.address);
            
            BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];
            item.coordinate = info.pt;
            item.title = info.name;
            [arrM addObject:item];
        }
        [_mapView addAnnotations:arrM];
        [_mapView showAnnotations:arrM animated:YES];
        
        self.poiResultArr = poiResult.poiInfoList;
        [self.tableView reloadData];
        
    }else {
        NSLog(@"檢索異常-%d", errorCode);
    }
}
大頭針展示.PNG

2 公交詳情信息檢索-基于POI

基于上面POI檢索返回的POI結(jié)果中,BMKPoiInfo有一屬性epoitype掸读,表示POI類(lèi)型串远,epoitype字段值為2標(biāo)示公交路線宏多,4表示地鐵路線,把這兩種類(lèi)型的POI的 uid 傳給公交信息檢索接口澡罚,可以得到該P(yáng)OI所代表的路線的詳細(xì)信息(如:該公交線有多少個(gè)站點(diǎn)伸但,每個(gè)站點(diǎn)的名稱(chēng),位置留搔、參考票價(jià)和上下線行信息)更胖。

點(diǎn)擊tableView調(diào)用 公交詳情信息檢索,代碼如下:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.poiResultArr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ID"];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ID"];
    }
    
    BMKPoiInfo *info = self.poiResultArr[indexPath.row];
    cell.textLabel.text = info.name;
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    BMKPoiInfo *info = self.poiResultArr[indexPath.row];
    if (info.epoitype == 2 || info.epoitype == 4) {
        // 發(fā)起公交檢索
        [self startBusLineSearchWithCity:info.city uid:info.uid];

    }else {
        NSLog(@"這不是一條公交線路");
    }
    
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
#pragma mark
#pragma mark -- 公交方案檢索

- (void)startBusLineSearchWithCity:(NSString *)city uid:(NSString *)uid{
    _busLineSearch = [[BMKBusLineSearch alloc]init];
    _busLineSearch.delegate = self;
    
    BMKBusLineSearchOption *option = [[BMKBusLineSearchOption alloc]init];
    option.city = city;
    option.busLineUid = uid;
    
    BOOL flag = [_busLineSearch busLineSearch:option];
    if(flag)
    {
        NSLog(@"busline檢索發(fā)送成功    %@---%@", city, uid);
    }
    else
    {
        NSLog(@"busline檢索失敗");
    }
}

- (void)onGetBusDetailResult:(BMKBusLineSearch *)searcher result:(BMKBusLineResult *)busLineResult errorCode:(BMKSearchErrorCode)error {
    if (error == BMK_SEARCH_NO_ERROR) {
        //在此處理正常結(jié)果
        NSLog(@"%@,共有%zd站",busLineResult.busLineName, busLineResult.busStations.count);
    }
    else {
        NSLog(@"抱歉隔显,未找到Bus結(jié)果%d",error);
    }
}

注意代理控制:

-(void)viewWillDisappear:(BOOL)animated
{
    [_mapView viewWillDisappear];
    _mapView.delegate = nil; // 不用時(shí)却妨,置nil,否則影響內(nèi)存的釋放
    _locService.delegate = nil;
    _poiSearch.delegate = nil;
    _busLineSearch.delegate = nil;
}

分別點(diǎn)擊下面第1條,第3條括眠,第4條彪标,打印結(jié)果:

檢索結(jié)果.PNG
公交檢索結(jié)果.jpeg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市掷豺,隨后出現(xiàn)的幾起案子捞烟,更是在濱河造成了極大的恐慌,老刑警劉巖萌业,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坷襟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡生年,警方通過(guò)查閱死者的電腦和手機(jī)婴程,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抱婉,“玉大人档叔,你說(shuō)我怎么就攤上這事≌艏ǎ” “怎么了衙四?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)患亿。 經(jīng)常有香客問(wèn)我传蹈,道長(zhǎng),這世上最難降的妖魔是什么步藕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任惦界,我火速辦了婚禮,結(jié)果婚禮上咙冗,老公的妹妹穿的比我還像新娘沾歪。我一直安慰自己,他們只是感情好雾消,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布灾搏。 她就那樣靜靜地躺著挫望,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狂窑。 梳的紋絲不亂的頭發(fā)上媳板,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音泉哈,去河邊找鬼拷肌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛旨巷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播添忘,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼采呐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了搁骑?” 一聲冷哼從身側(cè)響起斧吐,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仲器,沒(méi)想到半個(gè)月后煤率,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乏冀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蝶糯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辆沦。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昼捍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肢扯,到底是詐尸還是另有隱情妒茬,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布蔚晨,位于F島的核電站乍钻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铭腕。R本人自食惡果不足惜银择,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谨履。 院中可真熱鬧欢摄,春花似錦、人聲如沸笋粟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至绿淋,卻和暖如春闷畸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吞滞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工佑菩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人裁赠。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓殿漠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親佩捞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绞幌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容