@@ -57,129 +57,127 @@ def easting_northing_to_latitude_longitude(easting, northing)
5757 osgb36_to_wgs84 ( osgb36 [ :latitude ] , osgb36 [ :longitude ] )
5858 end
5959
60- # rubocop:disable Layout/SpaceAroundOperators, Layout/ExtraSpacing, Lint/UnderscorePrefixedVariableName
60+ # rubocop:disable Layout/SpaceAroundOperators, Layout/ExtraSpacing
6161 # Converts easting/northing coords into OSGB36 latitude/longitude
6262 def easting_northing_to_osgb36 ( easting , northing )
6363 osbg_f0 = 0.9996012717
6464 n0 = -100_000.0
6565 e0 = 400_000.0
6666 phi0 = deg_to_rad ( 49.0 )
6767 lambda0 = deg_to_rad ( -2.0 )
68- _a = 6_377_563.396
69- _b = 6_356_256.909
70- e_squared = ( ( _a * _a ) - ( _b * _b ) ) / ( _a * _a )
71- _phi = 0.0
72- _lambda = 0.0
68+ a = 6_377_563.396
69+ b = 6_356_256.909
70+ e_squared = ( ( a * a ) - ( b * b ) ) / ( a * a )
7371 est = easting
7472 nrth = northing
75- _n = ( _a - _b ) / ( _a + _b )
76- _m = 0.0
77- phi_prime = ( ( nrth - n0 ) / ( _a * osbg_f0 ) ) + phi0
73+ n = ( a - b ) / ( a + b )
74+ m = 0.0
75+ phi_prime = ( ( nrth - n0 ) / ( a * osbg_f0 ) ) + phi0
7876
7977 loop do
80- _m = ( _b * osbg_f0 ) \
81- * ( ( ( 1 + _n + ( ( 5.0 / 4.0 ) * _n * _n ) + ( ( 5.0 / 4.0 ) * _n * _n * _n ) ) \
78+ m = ( b * osbg_f0 ) \
79+ * ( ( ( 1 + n + ( ( 5.0 / 4.0 ) * n * n ) + ( ( 5.0 / 4.0 ) * n * n * n ) ) \
8280 * ( phi_prime - phi0 ) ) \
83- - ( ( ( 3 * _n ) + ( 3 * _n * _n ) + ( ( 21.0 / 8.0 ) * _n * _n * _n ) ) \
81+ - ( ( ( 3 * n ) + ( 3 * n * n ) + ( ( 21.0 / 8.0 ) * n * n * n ) ) \
8482 * Math . sin ( phi_prime - phi0 ) \
8583 * Math . cos ( phi_prime + phi0 ) ) \
86- + ( ( ( ( 15.0 / 8.0 ) * _n * _n ) + ( ( 15.0 / 8.0 ) * _n * _n * _n ) ) \
84+ + ( ( ( ( 15.0 / 8.0 ) * n * n ) + ( ( 15.0 / 8.0 ) * n * n * n ) ) \
8785 * Math . sin ( 2.0 * ( phi_prime - phi0 ) ) \
8886 * Math . cos ( 2.0 * ( phi_prime + phi0 ) ) ) \
89- - ( ( ( 35.0 / 24.0 ) * _n * _n * _n ) \
87+ - ( ( ( 35.0 / 24.0 ) * n * n * n ) \
9088 * Math . sin ( 3.0 * ( phi_prime - phi0 ) ) \
9189 * Math . cos ( 3.0 * ( phi_prime + phi0 ) ) ) )
9290
93- phi_prime += ( nrth - n0 - _m ) / ( _a * osbg_f0 )
94- break unless ( nrth - n0 - _m ) >= 0.001
91+ phi_prime += ( nrth - n0 - m ) / ( a * osbg_f0 )
92+ break unless ( nrth - n0 - m ) >= 0.001
9593 end
9694
97- _v = _a * osbg_f0 * ( ( 1.0 - ( e_squared * sin_pow_2 ( phi_prime ) ) ) ** -0.5 )
98- _rho = _a * osbg_f0 * ( 1.0 - e_squared ) * ( ( 1.0 - ( e_squared * sin_pow_2 ( phi_prime ) ) ) ** -1.5 )
95+ v = a * osbg_f0 * ( ( 1.0 - ( e_squared * sin_pow_2 ( phi_prime ) ) ) ** -0.5 )
96+ rho = a * osbg_f0 * ( 1.0 - e_squared ) * ( ( 1.0 - ( e_squared * sin_pow_2 ( phi_prime ) ) ) ** -1.5 )
9997
100- eta_squared = ( _v / _rho ) - 1.0
98+ eta_squared = ( v / rho ) - 1.0
10199
102- _vii = Math . tan ( phi_prime ) / ( 2 * _rho * _v )
100+ vii = Math . tan ( phi_prime ) / ( 2 * rho * v )
103101
104- _viii = ( Math . tan ( phi_prime ) / ( 24.0 * _rho * ( _v ** 3.0 ) ) ) *
105- ( 5.0 + ( 3.0 * tan_pow_2 ( phi_prime ) ) + eta_squared -
106- ( 9.0 * tan_pow_2 ( phi_prime ) * eta_squared ) )
102+ viii = ( Math . tan ( phi_prime ) / ( 24.0 * rho * ( v ** 3.0 ) ) ) *
103+ ( 5.0 + ( 3.0 * tan_pow_2 ( phi_prime ) ) + eta_squared -
104+ ( 9.0 * tan_pow_2 ( phi_prime ) * eta_squared ) )
107105
108- _ix = ( Math . tan ( phi_prime ) / ( 720.0 * _rho * ( _v ** 5.0 ) ) ) *
109- ( 61.0 + ( 90.0 * tan_pow_2 ( phi_prime ) ) + ( 45.0 * tan_pow_2 ( phi_prime ) *
110- tan_pow_2 ( phi_prime ) ) )
106+ ix = ( Math . tan ( phi_prime ) / ( 720.0 * rho * ( v ** 5.0 ) ) ) *
107+ ( 61.0 + ( 90.0 * tan_pow_2 ( phi_prime ) ) + ( 45.0 * tan_pow_2 ( phi_prime ) *
108+ tan_pow_2 ( phi_prime ) ) )
111109
112- _x = sec ( phi_prime ) / _v
110+ x = sec ( phi_prime ) / v
113111
114- _xi = ( sec ( phi_prime ) / ( 6.0 * _v * _v * _v ) ) *
115- ( ( _v / _rho ) + ( 2 * tan_pow_2 ( phi_prime ) ) )
112+ xi = ( sec ( phi_prime ) / ( 6.0 * v * v * v ) ) *
113+ ( ( v / rho ) + ( 2 * tan_pow_2 ( phi_prime ) ) )
116114
117- _xii = ( sec ( phi_prime ) / ( 120.0 * ( _v ** 5.0 ) ) ) *
118- ( 5.0 + ( 28.0 * tan_pow_2 ( phi_prime ) ) + ( 24.0 * tan_pow_2 ( phi_prime ) *
119- tan_pow_2 ( phi_prime ) ) )
115+ xii = ( sec ( phi_prime ) / ( 120.0 * ( v ** 5.0 ) ) ) *
116+ ( 5.0 + ( 28.0 * tan_pow_2 ( phi_prime ) ) + ( 24.0 * tan_pow_2 ( phi_prime ) *
117+ tan_pow_2 ( phi_prime ) ) )
120118
121- _xiia = ( sec ( phi_prime ) / ( 5040.0 * ( _v ** 7.0 ) ) ) *
122- ( 61.0 + ( 662.0 * tan_pow_2 ( phi_prime ) ) +
123- ( 1320.0 * tan_pow_2 ( phi_prime ) * tan_pow_2 ( phi_prime ) ) +
124- ( 720.0 * tan_pow_2 ( phi_prime ) * tan_pow_2 ( phi_prime ) *
125- tan_pow_2 ( phi_prime ) ) )
119+ xiia = ( sec ( phi_prime ) / ( 5040.0 * ( v ** 7.0 ) ) ) *
120+ ( 61.0 + ( 662.0 * tan_pow_2 ( phi_prime ) ) +
121+ ( 1320.0 * tan_pow_2 ( phi_prime ) * tan_pow_2 ( phi_prime ) ) +
122+ ( 720.0 * tan_pow_2 ( phi_prime ) * tan_pow_2 ( phi_prime ) *
123+ tan_pow_2 ( phi_prime ) ) )
126124
127- _phi = phi_prime - ( _vii * ( ( est - e0 ) ** 2.0 ) ) +
128- ( _viii * ( ( est - e0 ) ** 4.0 ) ) - ( _ix * ( ( est - e0 ) ** 6.0 ) )
125+ phi = phi_prime - ( vii * ( ( est - e0 ) ** 2.0 ) ) +
126+ ( viii * ( ( est - e0 ) ** 4.0 ) ) - ( ix * ( ( est - e0 ) ** 6.0 ) )
129127
130- _lambda = lambda0 + ( _x * ( est - e0 ) ) - ( _xi * ( ( est - e0 ) ** 3.0 ) ) +
131- ( _xii * ( ( est - e0 ) ** 5.0 ) ) - ( _xiia * ( ( est - e0 ) ** 7.0 ) )
128+ lmbda = lambda0 + ( x * ( est - e0 ) ) - ( xi * ( ( est - e0 ) ** 3.0 ) ) +
129+ ( xii * ( ( est - e0 ) ** 5.0 ) ) - ( xiia * ( ( est - e0 ) ** 7.0 ) )
132130
133- { latitude : rad_to_deg ( _phi ) , longitude : rad_to_deg ( _lambda ) }
131+ { latitude : rad_to_deg ( phi ) , longitude : rad_to_deg ( lmbda ) }
134132 end
135133
136134 # Convert OSGB36 latitude/longitude coords
137135 # into WGS84 latitude/longitude
138136 def osgb36_to_wgs84 ( latitude , longitude )
139- _a = 6_377_563.396
140- _b = 6_356_256.909
141- e_squared = ( ( _a * _a ) - ( _b * _b ) ) / ( _a * _a )
142-
143- _phi = deg_to_rad ( latitude )
144- _lambda = deg_to_rad ( longitude )
145- _v = _a / Math . sqrt ( 1 - ( e_squared * sin_pow_2 ( _phi ) ) )
146- _h = 0
147- _x = ( _v + _h ) * Math . cos ( _phi ) * Math . cos ( _lambda )
148- _y = ( _v + _h ) * Math . cos ( _phi ) * Math . sin ( _lambda )
149- _z = ( ( ( 1 - e_squared ) * _v ) + _h ) * Math . sin ( _phi )
150-
151- _tx = 446.448
152- _ty = -124.157
153- _tz = 542.060
154-
155- _s = -0.0000204894
156- _rx = deg_to_rad ( 0.00004172222 )
157- _ry = deg_to_rad ( 0.00006861111 )
158- _rz = deg_to_rad ( 0.00023391666 )
159-
160- _xb = _tx + ( _x * ( 1 + _s ) ) + ( -_rx * _y ) + ( _ry * _z )
161- _yb = _ty + ( _rz * _x ) + ( _y * ( 1 + _s ) ) + ( -_rx * _z )
162- _zb = _tz + ( -_ry * _x ) + ( _rx * _y ) + ( _z * ( 1 + _s ) )
163-
164- _a = 6_378_137.000
165- _b = 6_356_752.3141
166- e_squared = ( ( _a * _a ) - ( _b * _b ) ) / ( _a * _a )
167-
168- _lambda_b = rad_to_deg ( Math . atan ( _yb / _xb ) )
169- _p = Math . sqrt ( ( _xb * _xb ) + ( _yb * _yb ) )
170- _phi_n = Math . atan ( _zb / ( _p * ( 1 - e_squared ) ) )
137+ a = 6_377_563.396
138+ b = 6_356_256.909
139+ e_squared = ( ( a * a ) - ( b * b ) ) / ( a * a )
140+
141+ phi = deg_to_rad ( latitude )
142+ lmbda = deg_to_rad ( longitude )
143+ v = a / Math . sqrt ( 1 - ( e_squared * sin_pow_2 ( phi ) ) )
144+ h = 0
145+ x = ( v + h ) * Math . cos ( phi ) * Math . cos ( lmbda )
146+ y = ( v + h ) * Math . cos ( phi ) * Math . sin ( lmbda )
147+ z = ( ( ( 1 - e_squared ) * v ) + h ) * Math . sin ( phi )
148+
149+ tx = 446.448
150+ ty = -124.157
151+ tz = 542.060
152+
153+ s = -0.0000204894
154+ rx = deg_to_rad ( 0.00004172222 )
155+ ry = deg_to_rad ( 0.00006861111 )
156+ rz = deg_to_rad ( 0.00023391666 )
157+
158+ xb = tx + ( x * ( 1 + s ) ) + ( -rx * y ) + ( ry * z )
159+ yb = ty + ( rz * x ) + ( y * ( 1 + s ) ) + ( -rx * z )
160+ zb = tz + ( -ry * x ) + ( rx * y ) + ( z * ( 1 + s ) )
161+
162+ a = 6_378_137.000
163+ b = 6_356_752.3141
164+ e_squared = ( ( a * a ) - ( b * b ) ) / ( a * a )
165+
166+ lambda_b = rad_to_deg ( Math . atan ( yb / xb ) )
167+ p_dist = Math . sqrt ( ( xb * xb ) + ( yb * yb ) )
168+ phi_n = Math . atan ( zb / ( p_dist * ( 1 - e_squared ) ) )
171169
172170 ( 1 ..10 ) . each do |_i |
173- _v = _a / Math . sqrt ( 1 - ( e_squared * sin_pow_2 ( _phi_n ) ) )
174- _phi_n1 = Math . atan ( ( _zb + ( e_squared * _v * Math . sin ( _phi_n ) ) ) / _p )
175- _phi_n = _phi_n1
171+ v = a / Math . sqrt ( 1 - ( e_squared * sin_pow_2 ( phi_n ) ) )
172+ phi_n1 = Math . atan ( ( zb + ( e_squared * v * Math . sin ( phi_n ) ) ) / p_dist )
173+ phi_n = phi_n1
176174 end
177175
178- _phi_b = rad_to_deg ( _phi_n )
176+ phi_b = rad_to_deg ( phi_n )
179177
180- { latitude : _phi_b . round ( 6 ) , longitude : _lambda_b . round ( 6 ) }
178+ { latitude : phi_b . round ( 6 ) , longitude : lambda_b . round ( 6 ) }
181179 end
182- # rubocop:enable Layout/SpaceAroundOperators, Layout/ExtraSpacing, Lint/UnderscorePrefixedVariableName
180+ # rubocop:enable Layout/SpaceAroundOperators, Layout/ExtraSpacing
183181
184182 private # Some math helpers
185183
0 commit comments