Module: TWD97ConvertWGS84

Defined in:
lib/TWD97ConvertWGS84.rb,
lib/TWD97ConvertWGS84/version.rb

Constant Summary collapse

VERSION =
"0.0.1"

Class Method Summary collapse

Class Method Details

.convert(x, y) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/TWD97ConvertWGS84.rb', line 5

def self.convert(x,y)
  a = 6378137.0
  b = 6356752.3142451
  lon0 = 121 * PI / 180
  e = 1 -  (b ** 2) / (a ** 2)
  e2 = (1 - (b ** 2) / (a ** 2)) / ((b ** 2) / (a ** 2))
  k0 = 0.9999
  dx = 250000
  dy = 0


  x = x - dx
  y = y - dy

  # Calculate the Meridional Arc
  m = y / k0

  # Calculate Footprint Latitude
  mu = m / (a * (1.0 - e / 4.0 - 3 * (e ** 2) / 64.0 - 5 * (e ** 3) / 256.0))
  e1 = (1.0 - sqrt(1.0 - e)) / (1.0 + sqrt(1.0 - e))

   j1 = (3 * e1 / 2 - 27 * (e1 ** 3) / 32.0)
   j2 = (21 * (e1 ** 2) / 16 - 55 * (e1 ** 4) / 32.0)
   j3 = (151 * (e1 ** 3) / 96.0)
   j4 = (1097 * (e1 ** 4) / 512.0)

   fp = mu + j1 * sin(2 * mu) + j2 * sin(4 * mu) + j3 * sin(6 * mu) + j4 * sin(8 * mu)

   # Calculate Latitude and Longitude
   c1 = e2 * (cos(fp) ** 2)
   t1 = (tan(fp) ** 2)
   r1 = a * (1 - e) / ((1 - e * (sin(fp) ** 2)) ** (3.0 / 2.0))
   n1 = a / ((1 - e * (sin(fp) ** 2)) ** 0.5)

   d = x / (n1 * k0)

   q1 = n1 * tan(fp) / r1
   q2 = ((d ** 2) / 2.0)
   q3 = (5 + 3 * t1 + 10 * c1 - 4 * (c1 ** 2) - 9 * e2) * (d ** 4) / 24.0
   q4 = (61 + 90 * t1 + 298 * c1 + 45 * (t1 ** 2) - 3 * (c1 ** 2) - 252 * e2) * (d ** 6) / 720.0
   lat = fp - q1 * (q2 - q3 + q4)


   q5 = d
   q6 = (1 + 2 * t1 + c1) * (d ** 3) / 6;
   q7 = (5 - 2 * c1 + 28 * t1 - 3 * (c1 ** 2) + 8 * e2 + 24 * (t1 ** 2)) * (d ** 5) / 120.0
   lon = lon0 + (q5 - q6 + q7) / cos(fp)

   lat = (lat * 180) / PI
   lon = (lon * 180) / PI
   return {lat: lat, lon: lon}
end