高德地图-搜索服务-POI搜索
?
高德地圖-搜索服務-POI搜索
?
之前公司項目收貨地址仿餓了么的收貨地址,結(jié)果發(fā)現(xiàn)自己實現(xiàn)的關(guān)鍵字搜索和周邊搜索,搜索到的poi列表跟餓了么的并不完全一樣,后來考慮了下,應該是搜索的范圍、類型之類的設(shè)置的不一樣。后來搜索了下,也的確是這樣,,現(xiàn)在記錄下來,留給自己也留給大家。
關(guān)鍵字搜索
周邊搜索
區(qū)域搜索
高德地圖 Android SDK 提供了千萬級別的POI(Point Of Interesting,興趣點)的搜索。
目前支持關(guān)鍵字搜索、周邊搜索、指定區(qū)域搜索的同步、異步方法。搜索返回 POI 的基本信息,如POI ID,POI 名稱、類型、經(jīng)緯度、地址等。
關(guān)鍵字搜索
通過 PoiSearch.Query(String query, String ctgr, String city) 設(shè)置搜索條件。參數(shù)“query”為搜索的關(guān)鍵字,“ctgr”為搜索類型(類型參照表從相關(guān)下載處獲取)、“city”為搜索城市,是必填參數(shù),關(guān)鍵字和類型至少輸入一個。
設(shè)置搜索條件,發(fā)送請求
?
query = new PoiSearch.Query(keyWord, "", cityCode);// keyWord表示搜索字符串,//第二個參數(shù)表示POI搜索類型,二者選填其一,//POI搜索類型共分為以下20種:汽車服務|汽車銷售|//汽車維修|摩托車服務|餐飲服務|購物服務|生活服務|體育休閑服務|醫(yī)療保健服務|//住宿服務|風景名勝|(zhì)商務住宅|政府機構(gòu)及社會團體|科教文化服務|交通設(shè)施服務|//金融保險服務|公司企業(yè)|道路附屬設(shè)施|地名地址信息|公共設(shè)施//cityCode表示POI搜索區(qū)域的編碼,是必須設(shè)置參數(shù) query.setPageSize(10);// 設(shè)置每頁最多返回多少條poiitem query.setPageNum(currentPage);//設(shè)置查詢頁碼 PoiSearch poiSearch = new PoiSearch(this, query);//初始化poiSearch對象 poiSearch.setOnPoiSearchListener(this);//設(shè)置回調(diào)數(shù)據(jù)的監(jiān)聽器 poiSearch.searchPOIAsyn();//開始搜索?
通過回調(diào)接口接受并解析返回的結(jié)果。
public void onPoiSearched(PoiResult result, int rCode) { //可以在回調(diào)中解析result,獲取POI信息 //result.getPois()可以獲取到PoiItem列表,Poi詳細信息可參考PoiItem類 //若當前城市查詢不到所需Poi信息,可以通過result.getSearchSuggestionCitys()獲取當前Poi搜索的建議城市 //如果搜索關(guān)鍵字明顯為誤輸入,則可通過result.getSearchSuggestionKeywords()方法得到搜索關(guān)鍵詞建議 //返回結(jié)果成功或者失敗的響應碼。0為成功,其他為失敗(詳細信息參見網(wǎng)站開發(fā)指南-錯誤碼對照表) }顯示效果如圖所示:
?
周邊搜索
使用 PoiSearch.searchPOIAsyn() 搜索 POI。使用 PoiSearch.setOnPoiSearchListener() 方法設(shè)置監(jiān)聽器,在 PoiSearch.OnPoiSearchListener 接口回調(diào)方法 onPoiSearched(PoiResult poiResult,int rCode)中處理返回結(jié)果。當指定搜索城市時,若沒有返回 POI 結(jié)果,則會返回包含關(guān)鍵字的建議城市名稱。當關(guān)鍵字搜索無結(jié)果時,則會返回搜索建議關(guān)鍵字。
設(shè)置搜索條件,發(fā)送請求
query = new PoiSearch.Query(keyWord, "汽車維修|餐飲服務", cityCode); // keyWord表示搜索字符串,第二個參數(shù)表示POI搜索類型,默認為:生活服務、餐飲服務、商務住宅 //共分為以下20種:汽車服務|汽車銷售| //汽車維修|摩托車服務|餐飲服務|購物服務|生活服務|體育休閑服務|醫(yī)療保健服務| //住宿服務|風景名勝|(zhì)商務住宅|政府機構(gòu)及社會團體|科教文化服務|交通設(shè)施服務| //金融保險服務|公司企業(yè)|道路附屬設(shè)施|地名地址信息|公共設(shè)施 //cityCode表示POI搜索區(qū)域,(這里可以傳空字符串,空字符串代表全國在全國范圍內(nèi)進行搜索) query.setPageSize(10);// 設(shè)置每頁最多返回多少條poiitem query.setPageNum(currentPage);//設(shè)置查第一頁 PoiSearch poiSearch = new PoiSearch(this,query); poiSearch.setBound(new SearchBound(new LatLonPoint(locationMarker.getPosition().latitude,locationMarker.getPosition().longitude), 1000));//設(shè)置周邊搜索的中心點以及區(qū)域 poiSearch.setOnPoiSearchListener(this);//設(shè)置數(shù)據(jù)返回的監(jiān)聽器 poiSearch.searchPoiAsyn();//開始搜索?
通過回調(diào)接口獲取數(shù)據(jù)
public void onPoiSearched(PoiResult result, int rCode) { //在回調(diào)函數(shù)中解析result獲取POI信息 //result.getPois()可以獲取到PoiItem列表,Poi詳細信息可參考PoiItem類 //若當前城市查詢不到所需Poi信息,可以通過result.getSearchSuggestionCitys()獲取當前Poi搜索的建議城市 //如果搜索關(guān)鍵字明顯為誤輸入,則可通過result.getSearchSuggestionKeywords()方法得到搜索關(guān)鍵詞建議 //返回結(jié)果成功或者失敗的響應碼。0為成功,其他為失敗(詳細信息參見網(wǎng)站開發(fā)指南-錯誤碼對照表) }?
顯示效果如圖所示:
?
?
區(qū)域搜索
在周邊搜索的基礎(chǔ)上,增加了矩形限定區(qū)域。根據(jù)搜索矩形區(qū)域左下角和右上角的頂點坐標,使用 PoiSearch.SearchBound(LatLonPoint lowerLeft, LatLonPoint upperRight) 設(shè)置搜索范圍。
?
輸入提示搜索
在輸入關(guān)鍵字(至少兩個字符)時,可以使用Inputtips類的 Inputtips.InputtipsListener 接口監(jiān)聽輸入信息,并使用 requestInputtips(String keyword, String city) 發(fā)送提示請求。
注:提示中會出現(xiàn)相同的關(guān)鍵字,但是這些關(guān)鍵字所在區(qū)域不同,使用時可以通過 tipList.get(i).getDistrict() 獲得區(qū)域,也可以在提示時在關(guān)鍵字后加上區(qū)域。
例如用戶輸入“高德”,輸入框下方的列表會顯示包含關(guān)鍵字字段的輸入提示信息。
顯示效果如圖所示:
示例代碼如下:
// 發(fā)送輸入提示請求 // newText表示提示關(guān)鍵字,第二個參數(shù)默認代表全國,也可以為城市區(qū)號 inputTips.requestInputtips(newText, "");?
通過回調(diào)接口獲取數(shù)據(jù)
public void onGetInputtips(List<Tip> inputTips, int rcode){ //在回調(diào)函數(shù)中解析inputTips,獲取輸入提示返回的信息 //Tip類中包含Poi的Adcode、District、Name信息 //返回結(jié)果成功或者失敗的響應碼。0為成功,其他為失敗(詳細信息參見網(wǎng)站開發(fā)指南-錯誤碼對照表) }?
?
行政區(qū)劃搜索
根據(jù)縣(區(qū))級行政區(qū)劃名稱查詢其下級區(qū)劃的詳細信息,如:中心點坐標、編碼等等。
?
DistrictSearch search = new DistrictSearch(mContext); DistrictSearchQuery query = new DistrictSearchQuery(); query.setKeywords("keywords");//傳入關(guān)鍵字 query.setKeywordsLevel(DistrictSearchQuery.KEYWORDS_CITY); query.setShowBoundary(true);//是否返回邊界值 search.setQuery(query); search.setOnDistrictSearchListener(this);//綁定監(jiān)聽器 search.searchDistrictAnsy();//開始搜索?
通過回調(diào)接口獲取數(shù)據(jù)
public void onDistrictSearched(DistrictResult districtResult) { //在回調(diào)函數(shù)中解析districtResult獲取行政區(qū)劃信息 //在districtResult.getAMapException().getErrorCode()=0時調(diào)用districtResult.getDistrict()方法 //獲取查詢行政區(qū)的結(jié)果,詳細信息可以參考DistrictItem類。 }?顯示效果如圖所示:
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/dingzq/p/5581365.html
總結(jié)
以上是生活随笔為你收集整理的高德地图-搜索服务-POI搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【DSP开发】【VS开发】YUV与RGB
- 下一篇: ab ApacheBench web测