百度地圖API中有一個服務,稱為LocalSearch,顧名思義就是本地搜尋。
建構函式
LocalSearch(location:Map|Point|String[, opts:LocalSearchOptions])
描述
建立一個搜尋類執行個體,其中location 表示檢索地區,其類型可為地圖執行個體、座標點或城市名稱的字串。當參數為地圖執行個體時,檢索位置由當前地圖中心點確定,且搜尋結果的標註將自動載入到地圖上,並支援調整地圖視野層級;當參數為座標時,檢索位置由該點所在位置確定;當參數為城市名稱時,檢索會在該城市內進行。
要確定“本地”為何地有兩種方式:
1、直接寫城市名,如“西安市”
2、提供一個經緯度資訊,如“108.977055, 34.217914”,是大唐芙蓉園的座標。
提供經緯度又分成兩種,一種是將map對象作為參數傳給LocalSerch的建構函式,另一種是將point對象作為參數傳給LocalSerch的建構函式。這兩者之間有什麼區別呢?
如果使用的是map對象作為參數,那麼一會兒顯示的搜尋結果將以這個map為中心。
如果使用point對象為參數,那麼顯示的結果將以這個點為中心。
如下面這段代碼:
<script type="text/javascript">var map = new BMap.Map("position");var point = new BMap.Point(108.977055, 34.217914);map.centerAndZoom(point, 17);var dtxs = new BMap.Point(108.915189,34.25151);var local = new BMap.LocalSearch(map,{renderOptions:{map: map}});local.search("超市");</script>
顯示結果為:
可以看到其實沒什麼區別。
這是什麼原因呢?
猜測可能的原因有兩個:1、預設將搜尋範圍劃為全市搜尋了;2、是因為搜尋的內容太大,沒有足夠的約束條件來對兩個搜尋結果進行差異化。
嘗試將關鍵字分別改為“小肥羊火鍋”、“小肥羊火鍋 西工大”、“小肥羊火鍋 西交大”,查看不同的效果:
local.search("小肥羊火鍋");//“小肥羊火鍋 西工大”、“小肥羊火鍋 西交大”
地圖分別顯示為:
可以看到,如果不增加約束條件的話,會預設顯示全市的“小肥羊火鍋店”,如果增加了約束,地圖中心會移動到搜尋的結果所在的位置。如果搜尋的結果為空白(如“小肥羊火鍋 西交大”)那麼將會顯示預設的地圖,不做任何其他標註。
搜尋一定範圍內的目標
local.searchNearby("餐館",point,100);
三個參數分別為:搜尋索引鍵(可以為數組)、中心地點、半徑。
PS:如果中心地點不是用point,而是用一個string,比如“大唐芙蓉園”之類的,那麼最後一個參數“半徑”將會失效。
以下是同一個地點,但搜尋半徑不同時呈現的效果:
該類的其他方法可以參考“百度地圖javascript API類參考”文檔。