= 2009-02-04 = * 原本 waue 發表的[wiki:oid/WorkLog/GoogleMPL Google Map的網址模組轉換],在官方的名稱為 [http://code.google.com/intl/zh-TW/apis/maps/documentation/mapplets/ Google Mapplets API]。 * Google Mapplet API 跟 Google Map API 最主要的差別在於 Mapplet 是在官方 Google Map 上呈現,而 Google Map API 則可以用在自己的網站上。 {{{ The main difference is that Mapplets run on Google Maps, while the traditional Maps API is used to create maps on other websites. }}} * "赤壁"原始碼 - http://code.google.com/p/redcliff/source/checkout {{{ svn checkout http://redcliff.googlecode.com/svn/trunk/ redcliff-read-only }}} * 赤壁的 Mapplet [[Image(redcliff.jpg)]] * 在原始碼中,people.json 是用來顯示"主要人物"這個 Tag 的資料來源 [[Image(people.json.jpg)]] * 在原始碼中,big_event.json 是用來顯示"歷史事件"這個 Tag 的資料來源 [[Image(big_event.json.jpg)]] * 在原始碼中,event.json 是用來顯示點選"歷史事件"其中一個事件後,顯示各事件的關連資料來源 [[Image(event.json.jpg)]] * 在原始碼中,location.json 是用來把歷史古城的位置用貼圖方式顯示的經緯度資料來源 [[Image(location.json.jpg)]] * 在原始碼中,element.json 是用在點選特定古城位置時,顯示關聯事件的資料來源 [[Image(element.json.jpg)]] * [http://redcliff.googlecode.com/svn/trunk/mapplet/redcliff_tc.xml 赤壁 Mapplet] 原始碼 XML 解析 {{{ #!js # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/mapplets/basics.html#Loading_the_Mapplets_API # 必須加入 sharedmap 的 feature 才能讓 mapplet 載入定義在 Content 中的 javascript 程式 @CHARSET "UTF-8"; ### 以下略過 CSS 定義 ### # 初始化的時候,顯示"正在讀取..."的圖示跟字樣


正在讀取...
}}} * 底下先定義 DOM 元件 {{{ # 初始之後要顯示的 DIV 元件 }}} * 主要顯示三個元件,包括"分享給朋友"、"清除地圖上的標誌"、"聲明"[[BR]][[Image(bottom-button-div1.jpg)]] * 點選"聲明"才會顯示 disclaimer_box 的畫面[[BR]][[Image(bottom-button-div2.jpg)]] {{{ #!js
}}} * 上面這一段是宣告要載入 Hosting 在 Google 的 jQuery API 1.2.6 版 {{{ #!js }}} * [註] 底下開始會稍微變動一下原始碼的順序,我們先來看 jQuery 的 main 進入點 {{{ #!js $(function(){ G_MAP = new RedcliffMap(); # 呼叫 RedcliffMap() 產生 GMap2 物件 LoadLocation(); new TilesSelect(); new TabManager(['events', 'characters', 'vote'], 'characters'); new Disclaimer(); $('#clear_button').click(function(){ G_MAP.clearOverlays(); }); new CharacterFilter(); _IG_Analytics(UAACCT, "/view/load"); }); }}} * 關於 G_MAP = new !RedcliffMap(); 這行程式 {{{ #! ### 首先要看的是 RedcliffMap 這個類別物件的建構子(Constructor) ### 以下省略類別中的 method 函數定義,從這裡可以看到 RedcliffMap 定義了 9 個 method ############################################################################## ### 其中 addOverlay 跟 removeOverlay 應該就是我們想要找的顯示/隱藏不同圖層的實作方法 ### ############################################################################## RedcliffMap.prototype = { changeTiles: function(opacity_val), addOverlay: function(overlay), removeOverlay: function(overlay), openInfoWindow: function(type, id, latlng), highLightOverlay: function(element_ids), deHighLightOverlay: function(), setCenter: function(center, level), clearOverlays: function(), updateOverlay: function(type, id) }; function RedcliffMap(node) { var me = this; # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/mapplets/basics.html#GMap2 # GMap2 代表 Google Map 的 map 根元件 this.gmap = new GMap2(); # 設定初始地圖中心經緯度位置 this.gmap.setCenter(new GLatLng(29.833, 113.618), 7, G_PHYSICAL_MAP); # 用 GTileLayerOverlay 來取代原始的地圖底圖 # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/overlays.html#Tile_Overlays # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/reference.html#GTileLayerOverlay # 建構子定義 GTileLayerOverlay(tileLayer:GTileLayer, opts?:GTileLayerOverlayOptions) this.tileLayerOverlay = new GTileLayerOverlay( # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/reference.html#GTileLayer # 建構子定義 GTileLayer(copyrights:GCopyrightCollection, minResolution:Number, # maxResolution:Number, options?:GTileLayerOptions) # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/reference.html#GTileLayerOptions # 這裡設定 tileUrlTemplate: URL.tile_url = http://mt.google.cn/mt?v=cnsg1.2&hl=zh-CN&x={X}&y={Y}&z={Z} # 根據 API 文件 Templates 必須是這樣: http://host/tile?x={X}&y={Y}&z={Z}.png new GTileLayer(null, null, null, { tileUrlTemplate: URL.tile_url, isPng:true, opacity:1.0 }) ); this.gmap.addOverlay(this.tileLayerOverlay); }; }}}