Changes between Version 4 and Version 5 of oid/WorkLog/08-09-22


Ignore:
Timestamp:
Sep 22, 2008, 8:16:43 PM (16 years ago)
Author:
jazz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • oid/WorkLog/08-09-22

    v4 v5  
    4141     </script>
    4242}}}
    43  * Q: Google Map 如何使用自己的背景底圖??
     43 * Q: Google Map 如何使用自己定義的按鈕??
    4444   * A: 參考範例 [http://alderaan.arc.nasa.gov/maps/mars/ Polar Mars Example]
     45 * 解析 [http://alderaan.arc.nasa.gov/maps/mars/ Polar Mars Example] 原始碼
     46{{{
     47#!java
     48
     49    <script src="http://alderaan.arc.nasa.gov/maps/nasamaps.js" type="text/javascript"></script>
     50    // 底下有一些名稱為 NASA_MARS 開頭的常數是定義在 nasamaps.js 中
     51
     52.. 略 ..
     53
     54    if (GBrowserIsCompatible()) {
     55      // 產生 GMap2 的 Google Map 底圖物件,並宣告 mapTypes 屬性包括六種 GMapType
     56      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   
     58      map.addControl(new GLargeMapControl());               // 加入左上角比例尺規控制列
     59      mtc = new GHierarchicalMapTypeControl();              // 產生自訂階層式控制列
     60      mtc.addRelationship(NASA_MARS_VISIBLE_MAP,NASA_MARS_VISIBLE_MAP_NPOLAR);     // 把 North Polar 加到 Visible 下
     61      mtc.addRelationship(NASA_MARS_VISIBLE_MAP,NASA_MARS_VISIBLE_MAP_SPOLAR);     // 把 South Polar 加到 Visible 下
     62      mtc.addRelationship(NASA_MARS_ELEVATION_MAP,NASA_MARS_ELEVATION_MAP_NPOLAR); // 把 North Polar 加到 Elevation 下
     63      mtc.addRelationship(NASA_MARS_ELEVATION_MAP,NASA_MARS_ELEVATION_MAP_SPOLAR); // 把 North Polar 加到 Elevation 下
     64      map.addControl(mtc);                                  // 把自訂階層式控制列加入右上角
     65      map.setCenter( new GLatLng(0,0), 2 );                 // 定義地圖中心
     66
     67      // 底下這一段很有趣,NASA 刻意要把右下角"使用條款"前的授權換成 NASA/USGS 的字眼
     68      map.termsDiv_ = map.getContainer().childNodes[1];     // 取得第二個 Div (陣列[0]才是第一個, 陣列[1]是第二個) (詳見圖片)
     69      map.copyrightSpan_ = document.createElement("span");  // 產生一個新的 <SPAN> 的 DOM 元件
     70      map.termsDiv_.insertBefore(map.copyrightSpan_,map.termsDiv_.firstChild); // 把先的 <SPAN> 元件插入到第二個 DIV 的第一個元件前面
     71      map.copyrightSpan_.innerHTML = "<a href=\"http://ti.arc.nasa.gov/projects/planetary/\">NASA/USGS</a> - "; // 自訂的 <SPAN> 內容設定為 NASA/UGGS 跟相關聯結
     72    }
     73}}}
     74 * 上面有一段的 DOM 可以用 Firefox 的 DOM Inspector 去看
     75[[Image(GogleMapDOM.jpg)]]
     76 * 繼續解析 [http://alderaan.arc.nasa.gov/maps/nasamaps.js nasamaps.js]
     77{{{
     78#!java
     79
     80.. 略 ..
     81
     82function TMSBaseLayer( baseurl, levels ) {
     83  var layer = new GTileLayer(null, 0, levels);
     84  layer.isPng = function() { return false };
     85  layer.getTileUrl = function(tile, zoom) {
     86    var y = Math.pow(2, zoom)-tile.y-1;
     87    var url = baseurl + zoom + "/" + tile.x + "/" + y + ".jpg";
     88    return url;
     89  };
     90  return layer;
     91}
     92
     93var NASA_MOON_VISIBLE_MAP = new GMapType( [TMSBaseLayer("http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw/",9)],
     94                                          new GMercatorProjection(10), "Visible" );
     95
     96var NASA_MOON_VISIBLE_MAP_NPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/moon/visible_north/",8)],
     97                                              new PolarStereographicProjection(8,NORTH),
     98                                              "North Polar" );
     99
     100var NASA_MOON_VISIBLE_MAP_SPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/moon/visible_south/",8)],
     101                                              new PolarStereographicProjection(8,SOUTH),
     102                                              "South Polar" );
     103
     104var NASA_MOON_ELEVATION_MAP = new GMapType( [TMSBaseLayer("http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/terrain/",7)],
     105                                          new GMercatorProjection(10), "Elevation" );
     106
     107var NASA_MOON_ELEVATION_MAP_NPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/moon/terrain_north/",6)],
     108                                              new PolarStereographicProjection(8,NORTH),
     109                                              "North Polar" );
     110
     111var NASA_MOON_ELEVATION_MAP_SPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/moon/terrain_south/",6)],
     112                                              new PolarStereographicProjection(8,SOUTH),
     113                                              "South Polar" );
     114
     115var NASA_MARS_VISIBLE_MAP = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/visible/",9)],
     116                                          new GMercatorProjection(10), "Visible" );
     117
     118var NASA_MARS_VISIBLE_MAP_NPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/visible_north/",8)],
     119                                              new PolarStereographicProjection(8,NORTH),
     120                                              "North Polar" );
     121
     122var NASA_MARS_VISIBLE_MAP_SPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/visible_south/",8)],
     123                                              new PolarStereographicProjection(8,SOUTH),
     124                                              "South Polar" );
     125
     126var NASA_MARS_ELEVATION_MAP = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/terrain/",8)],
     127                                          new GMercatorProjection(10), "Elevation" );
     128
     129var NASA_MARS_ELEVATION_MAP_NPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/terrain_north/",7)],
     130                                              new PolarStereographicProjection(8,NORTH),
     131                                              "North Polar" );
     132
     133var NASA_MARS_ELEVATION_MAP_SPOLAR = new GMapType( [TMSBaseLayer("http://byss.arc.nasa.gov/maps/mars/terrain_south/",7)],
     134                                              new PolarStereographicProjection(8,SOUTH),
     135                                              "South Polar" );
     136}}}