1、 使用Google Map API中的GMap2類的控件
在提到地圖上的默認控件和GMap2的設置項的時候,我都提過谷歌地圖的本地搜索欄控件,要在地圖上加上這個控件其實很簡單,不需要調(diào)用GMap2.addControl(),只需要一句話:
map.enableGoogleBar();
這樣就可以在地圖的左下角加上這個搜索欄了,并且替換掉了原來的谷歌Logo的圖片。目前用這個搜索欄可以搜索兩種類型的數(shù)據(jù):
1)地名;
2)谷歌提供的商業(yè)數(shù)據(jù),比如“餐館”。默認是在當前顯示的地圖范圍內(nèi)搜索;具體的搜索結(jié)果是上面的哪種類型由你輸入的關(guān)鍵字決定,沒有什么特別的方法。搜索返回結(jié)果后會自動在地圖上加上所有結(jié)果的標記,同時會用DOM形式顯示這個搜索結(jié)果,至于DOM會是什么樣的形式展現(xiàn),接著看就知道了。
定制這個搜索欄對應的類是GGoogleBarOptions,沒有構(gòu)造函數(shù),對應一個對象變量,使用方式類似于使用GMapOptions定制谷歌地圖,不過GGoogleBarOptions是作為GMapOptions里的一項在創(chuàng)建GMap2對象的時候使用。如果你了解過Google AJAX Search API的話,你對下面這些設置項會很熟悉,因為,這個本地搜索欄就是對AJAX Search中的GLocalSearchControl的一個封裝。
先看幾個基本的設置項:
1) showOnLoad
這個是boolean類型的項,決定加載完成后搜索欄的顯示狀態(tài),默認是false,意思是搜索欄是閉合的,不顯示輸入框,如果你想提醒用戶這里有個輸入框可以搜索,可以把這一項設成true,即{showOnLoad:true};
2) linkTarget
簡單的說,這個就是搜索結(jié)果里每一條記錄對應link的target屬性值,四個可選值,默認是等價于target="blank_"的G_GOOGLEBAR_LINK_TARGET,其他還有parent, self, top這幾項,準確的參數(shù)我就不列了,開發(fā)文檔里有。不過這一項基本用不著,不用設置;
3) resultList
用來指定搜索結(jié)果的DOM顯示樣式,默認是用列表的方式顯示(G_GOOGLEBAR_RESULT_LIST_INLINE),還有一種是添加一對方向箭頭讓你逐個翻閱,就像右邊的地圖里顯示的那樣。如果你的地圖空間比較小的話可以用后一種,設定{resultList:G_GOOGLEBAR_RESULT_LIST_SUPPRESS};
4) suppressInitialResultSelection
這個用來指定搜索完成后是否自動選中第一個搜索結(jié)果并且打開它的信息窗口,默認是false,就是打開第一條記錄的信息窗口,不需要的話就指定{suppressInitialResultSelection:true};
5) suppressZoomToBounds
按照文檔的說法,這個用來設定搜索完成后是否需要地圖自動縮放移到來完整顯示所有的標記點,默認是false,不縮放的,不過我在試用時發(fā)現(xiàn)不管搜索結(jié)果如何,地圖都不會縮放。所以,暫時忽略這一項。
6) searchFormHint
這個在文檔里沒有列出來,但是也可以使用,用來設定輸入框處于非激活狀態(tài)時的提示語,默認的是“搜索地圖”,你也可以設成你自己的提示語,比如:{searchFormHint:"hi,在這里可以直接搜索地圖"}
再來看幾個用來設定搜索操作時的回調(diào)函數(shù),類似于事件監(jiān)聽,這幾個可以做很多文章:
1) onIdleCallback
這個在搜索結(jié)果被清除的時候調(diào)用,也就是在你點擊搜索結(jié)果上的“清除結(jié)果”這個鏈接后,是不是在本次搜索結(jié)果返回并且自動清除上一次搜索結(jié)果后調(diào)用我還不確定,看開發(fā)文檔似乎有這個意思。
2) onSearchCompleteCallback
在已經(jīng)得到搜索結(jié)果但是還沒有添加到地圖上的時候調(diào)用,會傳遞一個GlocalSearch對象作為參數(shù),GlocalSearch是Google AJAX Search API里定義的一個類,想了解的先去看文檔吧,我就不多說了。
3) onGenerateMarkerHtmlCallback
在打開一條搜索記錄的信息窗口前會被調(diào)用,傳入marker, html, result三個參數(shù),分別對應這條記錄在地圖上的標記(GMarker)、填充信息窗口的html字符串、對應的搜索結(jié)果(GlocalResult)。這里定義的回調(diào)方法必須返回一個DOM對象,用在打開的信息窗口中。所以,通過這一項的設置,你就可以更改搜索結(jié)果的信息窗口里的默認內(nèi)容了。右邊的地圖里就把默認的信息窗口內(nèi)容換了,去掉了“從這里來”、“到這里去”的鏈接,加上了一個靜態(tài)地圖。
4) onMarkersSetCallback
這個在所有的結(jié)果標記都已經(jīng)創(chuàng)建但還沒有添加到 地圖之前調(diào)用,傳入的參數(shù)是一個搜索結(jié)果的數(shù)組results,數(shù)組里的每一項對應一條搜索記錄,包括latLng, marker, result,對應結(jié)果的坐標GLatLng、標記GMarker、結(jié)果記錄GlocalResult。這個時候結(jié)果的顯示列表已經(jīng)創(chuàng)建完成了,所以,如果你想修 改這個現(xiàn)實結(jié)果不妨試試這個設置項。