Changes between Version 8 and Version 9 of oid/WorkLog/08-09-22


Ignore:
Timestamp:
Sep 22, 2008, 10:27:33 PM (16 years ago)
Author:
jazz
Comment:

--

Legend:

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

    v8 v9  
    125125// - zoomlevels 型態為數字, 代表有幾種比例尺, 像這裡的比例尺是 0-9 總共 10 種
    126126                                          new GMercatorProjection(10), "Visible" );
     127}}}
     128 * 繼續解析 [http://alderaan.arc.nasa.gov/maps/nasamaps.js nasamaps.js] (PART 2)
     129 * 從這一個範例,我們可以學習到 JavaScript 的多型繼承該怎麼作!!
     130{{{
     131#!java
     132// 首先定義自訂投影座標函數 PolarStereographicProjection 有兩個參數 zoomelevels 跟 type
     133// 其中 zoomlevels 跟 GMercatorProjection 一樣,代表分幾種比例尺
     134function PolarStereographicProjection( zoomlevels, type ) {
     135  var me = this;
     136  me.zoomlevels = zoomlevels;
     137  me.zvector = type;
     138}
    127139
     140// 宣告 PolarStereographicProjection 實作 interface GProjection 回傳 GPoint
     141PolarStereographicProjection.prototype = new GProjection();
     142
     143// 重新實作 interface GProjection 的 fromLatLngToPixel(latlng,  zoom)
     144PolarStereographicProjection.prototype.fromLatLngToPixel = function(latlng, zoom) {
     145  var lat = Math.PI/180 * latlng.lat();
     146  var lon = Math.PI/180 * latlng.lng();
     147  var s1 = Math.cos(lat)/(1.0 + this.zvector * Math.sin(lat));
     148  var s2 = 256 / 2 * Math.pow(2,zoom);
     149  var x = ( Math.sin(lon) * s1 + 1 ) * s2;
     150  var y = ( this.zvector * Math.cos(lon) * s1 + 1 ) * s2;
     151  return new GPoint(x,y);
     152};
     153
     154// 重新實作 interface GProjection 的 fromPixelToLatLng(pixel,  zoom,  unbounded?) 回傳 GLatLng
     155PolarStereographicProjection.prototype.fromPixelToLatLng = function(pixel, zoom, unbounded) {
     156  var s2 = 256 / 2 * Math.pow(2,zoom);
     157  var x = pixel.x / s2 - 1;
     158  var y = pixel.y / s2 - 1;
     159  if ( x == 0 && y == 0 ) return new GLatLng(90,0);
     160  var z = this.zvector * Math.min( 2.0 / ( x*x + y*y + 1 ) - 1.0, 1.0 );
     161  var lon = 180/Math.PI * Math.atan2( x, this.zvector * y );
     162  var lat = 180/Math.PI * Math.asin( z );
     163  return new GLatLng(lat,lon);
     164};
     165
     166// 重新實作 interface GProjection 的 tileCheckRange(tile,  zoom,  tilesize) 回傳 Boolean
     167PolarStereographicProjection.prototype.tileCheckRange = function(tile, zoom, tilesize) {
     168  if( zoom > this.zoomlevels ) return false;
     169  else return true;
     170};
     171
     172// 重新實作 interface GProjection 的 getWrapWidth(zoom) 回傳 Number (比例尺的數字)
     173PolarStereographicProjection.prototype.getWrapWidth = function(zoom) {
     174  // Is there a better cross-platform way to represent Infinity here?
     175  return 1E+100 * Math.pow(2,zoom);
     176};
    128177}}}