使用谷歌地圖API定義自定義的控件其實非常簡單,看看網(wǎng)頁,這就是一個自定義的控件。 先看一段Hello World的代碼 function MyControl(){} MyControl.prototype = new GControl(); MyControl.prototype.initialize = function(map){ this.map = map; var container = map.getContainer(); var label = document.createElement("div"); container.appendChild(label); lable.innerHTML = "Hello World"; return label; } MyControl.prototype.getDefaultPosition = function(){ return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(50, 10)); } 上面這段代碼中,MyControl就是一個自定義的控件了,在需要的時候,和添加其他默認(rèn)控件一樣,使用map.addControl(new MyControl())就可以在地圖上添加這個自定義的控件了,只不過這個控件現(xiàn)在也沒什么實際用處,就是在你的地圖容器的頂部顯示一個Hello World的文本,與地圖沒什么交互。 下面來詳細(xì)解釋一下這段代碼: 第一行定義了一個MyControl類; 接下來,把這個類定義為GControl類的子類,就是把MyControl的prototype指定為GControl類的實例/對象; 后面的兩個方法initiallize和getDefaultPosition是繼承GControl類的時候必須實現(xiàn)的兩個方法,API文檔里定義GControl是接口類,所以可以把這兩個方法認(rèn)為是抽象方法,就不難理解為什么必須要實現(xiàn)了。需要注意的是,這兩個方法我們只負(fù)責(zé)實現(xiàn),但是不需要我們?nèi)ワ@式的調(diào)用,在向地圖上添加控件時API類庫會自動調(diào)用這兩個方法。 方法initialize接受一個參數(shù)map,就是你創(chuàng)建地圖時new出來的GMap2對象。在這個方法中,你使用map.getContainer()方法取得放置地圖的DOM容器,然后,你就可以向這個DOM容器里添加任何你想加入的DOM元素了。在上面的示例中我創(chuàng)建了一個div元素,用來顯示Hello World,但是,你可以在這里加入任何你想添加的DOM元素,并且可以定義它們的行為,也就是說,這里就是你可以自由發(fā)揮的天地了,無論你是想顯示動態(tài)的信息,還是來控制地圖,比如右邊地圖里的狀態(tài)監(jiān)控欄。initialize方法最后需要返回你所創(chuàng)建的最外層的DOM元素,這個千萬別忘了。 方法getDefaultPosition的作用是定義你的控件在地圖容器里的位置,實現(xiàn)起來就更簡單了,你可以直接把我這里的代碼復(fù)制過去,改成你需要定位的地方就可以了。GControlPosition的第一個參數(shù)是你的控件的錨點,只能使用G_ANCHOR_TOP_LEFT、G_ANCHOR_TOP_RIGHT、G_ANCHOR_BOTTOM_LEFT、G_ANCHOR_BOTTOM_RIGHT這四個代表上左、上右、下左、下右這四個角的常量,后一個參數(shù)使用GSize來定義你的控件距離地圖容器邊界的偏移量,第一個參數(shù)是橫向偏移、第二個參數(shù)是縱向偏移。到這里一個自定義的控件就完成了。譬如我們還可以用自己的LOGO覆蓋Google的LOGO,不過不建議這樣做! |
|