Changeset 292

Show
Ignore:
Timestamp:
12/09/05 00:41:20 (3 years ago)
Author:
ogawa
Message:

Clean up nene-san's Datum-shift code, because now Google Maps and Maps API natively supported WGS84 datum in Japan.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • kml2gmaps/trunk/kml2gmaps.html

    r285 r292  
    1414</style> 
    1515    <script src="http://maps.google.com/maps?file=api&v=1&key=ABQIAAAA2SGB7kYAwJ7vNIiGUvsYgBQhPSrtY3c-aq-G7Tm93zGQQxtL5xTnwm2_6ZCVnME0pZzKvB7i8npggw" type="text/javascript"></script> 
    16     <script type="text/javascript"> 
    17     //<![CDATA[ 
    18     GPoint.prototype.exjp_map_datum = function (datum) { 
    19       if (datum) this._exjp_map_datum = datum; 
    20       return this._exjp_map_datum ? this._exjp_map_datum : GPoint.exjp_judge_tow(this.x,this.y); 
    21     } 
    22     GPoint.prototype.exjp_map_coord = function () { 
    23       return [this.x,this.y]; 
    24     } 
    25     GPoint.prototype.exjp_origin_datum = function (datum) { 
    26       if (datum) this._exjp_origin_datum = datum; 
    27       return this._exjp_origin_datum ? this._exjp_origin_datum : 'wgs84'; 
    28     } 
    29     GPoint.prototype.exjp_origin_coord = function (x,y) { 
    30       if (x && y) this._exjp_origin_coord = [x,y]; 
    31       return this._exjp_origin_coord ? this._exjp_origin_coord : GPoint.exjp_datum_change(this.x,this.y,this.exjp_map_datum,this.exjp_origin_datum); 
    32     } 
    33     GPoint.exjp_create = function(lng,lat,datum,use_simple) { 
    34       var change_method = use_simple ? GPoint.exjp_simple_change : GPoint.exjp_datum_change; 
    35       if (!(datum)) datum = 'wgs84'; 
    36  
    37       var map_datum = GPoint.exjp_judge_tow(lng,lat); 
    38       var t_coord = change_method(lng,lat,datum,map_datum); 
    39       var ret = new GPoint(t_coord[0],t_coord[1]); 
    40       ret.exjp_map_datum(map_datum); 
    41       ret.exjp_origin_datum(datum); 
    42       return ret; 
    43     } 
    44      
    45     GPoint.exjp_judge_tow = function (lng,lat) { 
    46       if (lng > 115 && lng < 152 && lat > 30 && lat < 50) { 
    47         return 'tokyo'; 
    48       } else { 
    49         return 'wgs84'; 
    50       } 
    51     } 
    52  
    53     GPoint.exjp_ellip = new Object; 
    54     GPoint.exjp_ellip['wgs84'] = [6378137,(1 / 298.257223),0,0,0]; 
    55     GPoint.exjp_ellip['tokyo'] = [6377397.155,(1 / 299.152813),148,-507,-681]; 
    56  
    57     GPoint.exjp_datum_change = function (lng,lat,from_d,to_d) { 
    58         if (from_d == to_d) return [lng,lat]; 
    59  
    60         var fellip = GPoint.exjp_ellip[from_d]; 
    61         var tellip = GPoint.exjp_ellip[to_d]; 
    62  
    63         var a_v = [fellip[0],tellip[0]];    // Equatorial Radius 
    64         var f_v = [fellip[1],tellip[1]];    // Flattening 
    65  
    66         var dx = tellip[2] - fellip[2]; 
    67         var dy = tellip[3] - fellip[3]; 
    68         var dz = tellip[4] - fellip[4]; 
    69  
    70         return GPoint.exjp_molodensky(lng, lat, a_v[0], f_v[0], a_v[1], f_v[1],dx,dy,dz); 
    71     } 
    72     GPoint.exjp_molodensky = function (l,b,a1,f1,a2,f2,dx,dy,dz) { 
    73         var rd = Math.PI/180; 
    74  
    75         b *= rd; 
    76         l *= rd; 
    77  
    78         var e2 = 2*f1 - f1*f1;  // Square of Eccentricity 
    79         var bda = 1- f1;        // Polar Radius / Equatorial Radius 
    80         var da = a2 - a1; 
    81         var df = f2 - f1; 
    82         var sb = Math.sin(b); 
    83         var cb = Math.cos(b); 
    84         var sl = Math.sin(l); 
    85         var cl = Math.cos(l); 
    86  
    87         var rn = 1 / Math.sqrt(1 - e2*sb*sb);  
    88         var rm = a1 * (1 - e2) * rn * rn * rn; 
    89         rn *= a1; 
    90  
    91         // Calcurating Delta Value 
    92         var db = -dx*sb*cl - dy*sb*sl + dz*cb + da*rn*e2*sb*cb/a1 + df*(rm/bda+rn*bda)*sb*cb; 
    93         db /= rm; 
    94         var dl = -dx*sl + dy*cl; 
    95         dl /= rn * cb; 
    96  
    97         return [(l+dl)/rd,(b+db)/rd]; 
    98     } 
    99     GPoint.exjp_simple_change = function (lng,lat,from_d,to_d) { 
    100       if (from_d == to_d) return [lng,lat]; 
    101  
    102       if (from_d == 'tokyo') { 
    103         t_lat = lat - 0.00010695*lat + 0.000017464*lng + 0.0046017; 
    104         t_lng = lng - 0.000046038*lat - 0.000083043*lng + 0.010040; 
    105       } else { 
    106         t_lat = lat + 0.00010696*lat - 0.000017467*lng - 0.0046020; 
    107         t_lng = lng + 0.000046047*lat + 0.000083049*lng - 0.010041; 
    108       } 
    109       return [t_lng,t_lat]; 
    110     } 
    111     //]]> 
    112     </script> 
    11316  </head> 
    11417  <body> 
     
    11619    <div id="map" style="width:600px;height:400px;float:left;"></div> 
    11720    <div style="width:300px;float:left;"><ul id="menu"></ul></div> 
    118     <p class="footer">Written by <a href="http://as-is.net/blog/">Hirotaka Ogawa</a>. Powered by <a href="http://www.google.com/apis/maps/">Google Maps API</a> and nene-san's Datum-shift code (<a href="http://kokogiko.net/georss-gmaps.cgi?src=1">http://kokogiko.net/georss-gmaps.cgi?src=1</a>).</p> 
     21    <p class="footer">Written by <a href="http://as-is.net/blog/">Hirotaka Ogawa</a>. Powered by <a href="http://www.google.com/apis/maps/">Google Maps API</a>.</p> 
    11922    <script type="text/javascript"> 
    12023    //<![CDATA[ 
     
    16770          var lng = parseFloat(markers[i].getElementsByTagName("longitude")[0].childNodes[0].data); 
    16871          var lat = parseFloat(markers[i].getElementsByTagName("latitude")[0].childNodes[0].data); 
    169           var point = new GPoint.exjp_create(lng, lat); 
     72          var point = new GPoint(lng, lat); 
    17073          if (!i) map.centerAndZoom(point, 4); 
    17174          var names = markers[i].getElementsByTagName("name");