百度地圖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類參考”文檔。
