Changes between Version 6 and Version 7 of oid/WorkLog/08-09-22
- Timestamp:
- Sep 22, 2008, 9:46:15 PM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
oid/WorkLog/08-09-22
v6 v7 48 48 49 49 <script src="http://alderaan.arc.nasa.gov/maps/nasamaps.js" type="text/javascript"></script> 50 // 底下有一些名稱為 NASA_MARS 開頭的 常數是定義在 nasamaps.js 中50 // 底下有一些名稱為 NASA_MARS 開頭的變數是定義在 nasamaps.js 中 51 51 52 52 .. 略 .. … … 54 54 if (GBrowserIsCompatible()) { 55 55 // 產生 GMap2 的 Google Map 底圖物件,並宣告 mapTypes 屬性包括六種 GMapType 56 // - 參考 http://code.google.com/apis/maps/documentation/reference.html#GMap2 57 // GMap2(container, opts?) - container 是 DOM 的 DIV 元件, opts 是型態為 GMapOptions 的物件 58 // - 參考 http://code.google.com/apis/maps/documentation/reference.html#GMapOptions 59 // GMapOptions 具備 mapTypes 屬性,其型態為 Array of GMapType (GMapType 的陣列) 60 // 這裡定義的 NASA_MARS 開頭的變數是定義在 nasamaps.js 中 56 61 map = new GMap2( document.getElementById("map"), {mapTypes:[NASA_MARS_VISIBLE_MAP, NASA_MARS_VISIBLE_MAP_NPOLAR, NASA_MARS_VISIBLE_MAP_SPOLAR, NASA_MARS_ELEVATION_MAP, NASA_MARS_ELEVATION_MAP_NPOLAR, NASA_MARS_ELEVATION_MAP_SPOLAR]}); 57 62 58 63 map.addControl(new GLargeMapControl()); // 加入左上角比例尺規控制列 64 // - 參考 http://code.google.com/apis/maps/documentation/reference.html#GHierarchicalMapTypeControl 65 // addRelationship(parentType, childType, childText?, isDefault?) 66 // - parentType 跟 childType 都是 GMapType 物件 59 67 mtc = new GHierarchicalMapTypeControl(); // 產生自訂階層式控制列 60 68 mtc.addRelationship(NASA_MARS_VISIBLE_MAP,NASA_MARS_VISIBLE_MAP_NPOLAR); // 把 North Polar 加到 Visible 下 … … 76 84 } 77 85 }}} 78 * 上面有一段的 DOM 可以用 Firefox 的 DOM Inspector 去看 86 * 上面有一段的 DOM 可以用 Firefox 的 DOM Inspector 去看,就可以理解在寫什麼了. 79 87 [[Image(GoogleMapDOM.jpg)]] 80 88 * 繼續解析 [http://alderaan.arc.nasa.gov/maps/nasamaps.js nasamaps.js] … … 85 93 86 94 function TMSBaseLayer( baseurl, levels ) { 95 // 產生一個 GTileLayer 物件 96 // - 參考 http://code.google.com/apis/maps/documentation/reference.html#GTileLayer 97 // GTileLayer(copyrights, minResolution, maxResolution, options?) 98 // - copyrights = 授權字串, minResolution: 最小比例尺數字, maxResolution: 最大比例尺數字 87 99 var layer = new GTileLayer(null, 0, levels); 100 // GTileLayer.isPng() 是抽象函數(Abstract), 必須重新定義 101 // - 原型為 isPng() 回傳 Boolean 88 102 layer.isPng = function() { return false }; 103 // GTileLayer.getTileUrl 是抽象函數(Abstract), 必須重新定義 104 // - 原型為 getTileUrl(tile, zoom) 回傳 String, 其中 tile 是 GPoint 物件(內含<x,y>座標), zoom 是比例尺的數字 105 // 從底下的實作,我們不難發現用 GTileLayer 達成使用自己的背景圖替代 Google Map 預設背景圖的目標 106 // ToDo: 接下來就是要找出怎麼產生符合 GTileLayer 不同比例尺的背景圖 jpg 檔案 89 107 layer.getTileUrl = function(tile, zoom) { 90 108 var y = Math.pow(2, zoom)-tile.y-1; … … 92 110 return url; 93 111 }; 112 // 回傳 GTileLayer 物件 94 113 return layer; 95 114 } 96 115 116 // 產生不同的 GMapType 物件 117 // - 參考 http://code.google.com/apis/maps/documentation/reference.html#GMapType 118 // GMapType(layers, projection, name, opts?) 119 // - layers 型態為 GTileLayer 120 // - projection 型態為 GProjection ,這裡的 GMercatorProjection 是 GProjection 的實作(implementation) 121 // - name 型態為字串(String) 也就是要顯示在畫面上自訂的按鈕名稱 97 122 var NASA_MOON_VISIBLE_MAP = new GMapType( [TMSBaseLayer("http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw/",9)], 123 // - 參考 http://code.google.com/apis/maps/documentation/reference.html#GMercatorProjection 124 // GMercatorProjection(zoomlevels): 使用 mercator projection 座標系 125 // - zoomlevels 型態為數字, 代表有幾種比例尺, 像這裡的比例尺是 0-9 總共 10 種 98 126 new GMercatorProjection(10), "Visible" ); 99 127 100 var NASA_MOON_VISIBLE_MAP_NPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/moon/visible_north/",8)],101 new PolarStereographicProjection(8,NORTH),102 "North Polar" );103 104 var NASA_MOON_VISIBLE_MAP_SPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/moon/visible_south/",8)],105 new PolarStereographicProjection(8,SOUTH),106 "South Polar" );107 108 var NASA_MOON_ELEVATION_MAP = new GMapType( [TMSBaseLayer("http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/terrain/",7)],109 new GMercatorProjection(10), "Elevation" );110 111 var NASA_MOON_ELEVATION_MAP_NPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/moon/terrain_north/",6)],112 new PolarStereographicProjection(8,NORTH),113 "North Polar" );114 115 var NASA_MOON_ELEVATION_MAP_SPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/moon/terrain_south/",6)],116 new PolarStereographicProjection(8,SOUTH),117 "South Polar" );118 119 var NASA_MARS_VISIBLE_MAP = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/visible/",9)],120 new GMercatorProjection(10), "Visible" );121 122 var NASA_MARS_VISIBLE_MAP_NPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/visible_north/",8)],123 new PolarStereographicProjection(8,NORTH),124 "North Polar" );125 126 var NASA_MARS_VISIBLE_MAP_SPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/visible_south/",8)],127 new PolarStereographicProjection(8,SOUTH),128 "South Polar" );129 130 var NASA_MARS_ELEVATION_MAP = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/terrain/",8)],131 new GMercatorProjection(10), "Elevation" );132 133 var NASA_MARS_ELEVATION_MAP_NPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/terrain_north/",7)],134 new PolarStereographicProjection(8,NORTH),135 "North Polar" );136 137 var NASA_MARS_ELEVATION_MAP_SPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/terrain_south/",7)],138 new PolarStereographicProjection(8,SOUTH),139 "South Polar" );140 128 }}}