nztm2000 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -3
  3. data/lib/nztm2000.rb +33 -14
  4. data/test/test_nztm2000.rb +28 -0
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fd08ac118e24a4d0236bfb2a3eb23467e59e8bab
4
- data.tar.gz: eb448964c7a654daf2f381f3de60d4bbd7160b82
3
+ metadata.gz: 9f8935ed2a880bfc5e71444a44b18f41d706f24a
4
+ data.tar.gz: b5a00e1f1913e8ff0b28c5a5700055bd376db1c2
5
5
  SHA512:
6
- metadata.gz: b66cad2c660774b0cee56132ccb2f982a2c9c34c5daed8659fdf8a6340fcdccd3e8827307c8a09fe6afb60a22ce5a885124aff6d6a655e0be6fb2dbb19e10f09
7
- data.tar.gz: 0b455392afe57938843ae6404c3e81be1623747416ca918b1b54495b272bc28ec7babefeec460229a9aaf3f9ff4e9fa80ced67e97fa3c583d89481f660b25527
6
+ metadata.gz: a59f8c5c2aafac21a30be88cb1c5874667ba00180909b2cbf885457f59afb321b7efb16069c5ede5d53461e096064887d4a8306bb5d8c10520adedecb8e63404
7
+ data.tar.gz: 2a01610ddb54e7e3829bcb4b34e6bba05989b6a19cc2fbef54fc2a82bc90e2059e70706811ee837c2b40057cb35529cad5f5a5e4cf21f352d48d20a06afd521d
data/README.md CHANGED
@@ -17,19 +17,37 @@ Converts coordinates between the New Zealand Transverse Merctator 2000 and GRS8
17
17
 
18
18
  The NZTM200 provides two public methods
19
19
 
20
- NZTM2000.geod( easting, northing )
20
+ geod( easting, northing )
21
21
  Converts easting and northing (meters) to a latitude and longitude (Decimal degrees and radian results available)
22
22
 
23
- NZTM2000.nztm( latitude, longitude )
23
+ nztm( latitude, longitude )
24
24
  Converts latitude and longitude (Decimal degrees) to easting and northing (meters)
25
25
 
26
+ ```
27
+ require 'nztm2000'
28
+ #Self test from nztm.c.
29
+ nztm2000 = NZTM2000.new
30
+ [[1576041.150, 6188574.240],
31
+ [1576542.010, 5515331.050],
32
+ [1307103.220, 4826464.860]].each do |easting,northing|
33
+ r_latitude, r_longitude = nztm2000.geod(easting, northing)
34
+ r_easting, r_northing = nztm2000.nztm(r_latitude, r_longitude)
35
+
36
+ printf "Input NZTM easting, northing: %12.3f %12.3f\n", easting, northing
37
+ printf "Output Latitude Longitude: %12.6f %12.6f\n", r_latitude, r_longitude
38
+ printf "Output NZTM easting, northing: %12.3f %12.3f\n", r_easting, r_northing
39
+ printf "Difference: %12.3f %12.3f\n", easting - r_easting, northing - r_northing
40
+ puts
41
+ end
42
+ ```
43
+
26
44
  ## REQUIREMENTS:
27
45
 
28
46
  *
29
47
 
30
48
  ## INSTALL:
31
49
 
32
- * sudo gem install NZTM2000
50
+ * sudo gem install nztm2000
33
51
 
34
52
  ## LICENSE:
35
53
 
data/lib/nztm2000.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class NZTM2000
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
 
4
4
  #Define the parameters for the International Ellipsoid
5
5
  #used for the NZGD2000 datum (and hence for NZTM)
@@ -28,8 +28,21 @@ class NZTM2000
28
28
  attr_accessor :northing #NZTM 2000 northing (meters)
29
29
  attr_accessor :easting #NZTM 2000 easting (meters)
30
30
 
31
- def initialize
31
+ #Initialize
32
+ # Without arguments, use geod or nztm methods.
33
+ # Given easting: and northing:, @latitude and @longitude will be calculated
34
+ # Given latitude: and longitude:, @easting: and @northing will be calculated
35
+ # @option easting: [Numeric] nztm2000 easting
36
+ # @option northing: [Numeric] nztm2000 northing
37
+ # @option latitude: [Numeric] GRS80 latitude
38
+ # @option longitude: [Numeric] GRS80 longitude
39
+ def initialize(easting: nil, northing: nil, latitude: nil, longitude: nil)
32
40
  tm_initialize(NZTM_A, NZTM_RF, NZTM_CM/(180/Math::PI), NZTM_SF, NZTM_OLAT/(180/Math::PI), NZTM_FE, NZTM_FN, 1.0)
41
+ if easting != nil && northing != nil
42
+ geod(easting, northing)
43
+ elsif( latitude != nil && longitude != nil)
44
+ nztm(latitude, longitude)
45
+ end
33
46
  end
34
47
 
35
48
  #Initialize the TM projection parameters
@@ -52,7 +65,7 @@ class NZTM2000
52
65
 
53
66
  #*************************************************************************
54
67
  # Method based on Redfearn's formulation as expressed in GDA technical
55
- # manual at http://www.anzlic.org.au/icsm/gdatm/index.html
68
+ # manual at http://www.icsm.gov.au/gda/tech.html
56
69
  #
57
70
  # @param latitude [Numeric] radians
58
71
  # @return [Numeric] the length of meridional arc in meters (Helmert formula)
@@ -73,7 +86,7 @@ class NZTM2000
73
86
  #***********************************************************************
74
87
  # Calculates the foot point latitude from the meridional arc
75
88
  # Method based on Redfearn's formulation as expressed in GDA technical
76
- # manual at http://www.anzlic.org.au/icsm/gdatm/index.html
89
+ # manual at http://www.icsm.gov.au/gda/tech.html
77
90
  #
78
91
  # @param m [Numeric] meridional arc (metres)
79
92
  #
@@ -98,7 +111,7 @@ class NZTM2000
98
111
  #*************************************************************************
99
112
  # Routine to convert from Tranverse Mercator to latitude and longitude.
100
113
  # Method based on Redfearn's formulation as expressed in GDA technical
101
- # manual at http://www.anzlic.org.au/icsm/gdatm/index.html
114
+ # manual at http://www.icsm.gov.au/gda/tech.html
102
115
  # Sets @latitude, @longitude (degrees) and @latitude_r, @longitude_r (Radians)
103
116
  #
104
117
  # @param ce [Numeric] input northing (metres)
@@ -162,7 +175,7 @@ class NZTM2000
162
175
  #
163
176
  # Routine to convert from latitude and longitude to Transverse Mercator.
164
177
  # Method based on Redfearn's formulation as expressed in GDA technical
165
- # manual at http://www.anzlic.org.au/icsm/gdatm/index.html
178
+ # manual at http://www.icsm.gov.au/gda/tech.html
166
179
  # Loosely based on FORTRAN source code by J.Hannah and A.Broadhurst.
167
180
  #
168
181
  # Sets @easting (metres)
@@ -219,21 +232,27 @@ class NZTM2000
219
232
 
220
233
  # Functions implementation the TM projection specifically for the
221
234
  # NZTM coordinate system
235
+ # @param easting: [Numeric] nztm2000 easting, either named, or the first argument
236
+ # @param northing: [Numeric] nztm2000 northing, either named, or the second argument
222
237
  # @return [Numeric,Numeric] latitude and longitude (decimal degrees)
223
- def geod( easting, northing )
224
- @easting = easting
225
- @northing = northing
238
+ def geod( f_easting = nil, f_northing = nil, easting: nil, northing: nil )
239
+ @easting = easting || f_easting
240
+ @northing = northing || f_northing
241
+ raise ArgumentError.new("Not Numeric") if ! (@easting.is_a?(Numeric) && @northing.is_a?(Numeric) )
226
242
  return tm_geod
227
243
  end
228
244
 
229
245
  # Functions implementation the TM projection specifically for the
230
246
  # NZTM coordinate system
247
+ # @param latitude: [Numeric] GRS80 latitude, either named, or the first argument
248
+ # @param longitude: [Numeric] GRS80 longitude, either named, or the second argument
231
249
  # @return [Numeric,Numeric] northing and easting (meters)
232
- def nztm( latitude, longitude )
233
- @latitude = latitude
234
- @latitude_r = latitude/(180/Math::PI)
235
- @longitude = longitude
236
- @longitude_r = longitude/(180/Math::PI)
250
+ def nztm( f_latitude = nil, f_longitude = nil, latitude: nil, longitude: nil )
251
+ @latitude = latitude || f_latitude
252
+ @longitude = longitude || f_longitude
253
+ raise ArgumentError.new("Not Numeric") if ! (@latitude.is_a?(Numeric) && @longitude.is_a?(Numeric) )
254
+ @latitude_r = @latitude/(180/Math::PI)
255
+ @longitude_r = @longitude/(180/Math::PI)
237
256
  return geod_tm
238
257
  end
239
258
 
@@ -3,6 +3,7 @@ require "nztm2000"
3
3
 
4
4
  class TestNztm2000 < Test::Unit::TestCase
5
5
  def test_sanity
6
+ #Test with nil intializer, and using the NZTM2000::geod() and NZTM2000.nztm() methods.
6
7
  nztm2000 = NZTM2000.new
7
8
  [[1576041.150, 6188574.240, -34.444065991, 172.739193967],
8
9
  [1576542.010, 5515331.050, -40.512408980, 172.723105968],
@@ -15,5 +16,32 @@ class TestNztm2000 < Test::Unit::TestCase
15
16
  assert_in_delta(easting_r, easting, 0.0005)
16
17
  assert_in_delta(northing_r, northing, 0.0005)
17
18
  end
19
+
20
+ #Test with nil intializer, and using the NZTM2000::geod() and NZTM2000.nztm() methods with named arguments.
21
+ nztm2000 = NZTM2000.new
22
+ [[1576041.150, 6188574.240, -34.444065991, 172.739193967],
23
+ [1576542.010, 5515331.050, -40.512408980, 172.723105968],
24
+ [1307103.220, 4826464.860, -46.651295012, 169.172062008]
25
+ ].each do |easting,northing, latitude, longitude|
26
+ latitude_r, longitude_r = nztm2000.geod(northing: northing, easting: easting)
27
+ easting_r, northing_r = nztm2000.nztm(longitude: longitude_r, latitude: latitude_r)
28
+ assert_in_delta(latitude_r, latitude, 0.00005)
29
+ assert_in_delta(longitude_r, longitude, 0.00005)
30
+ assert_in_delta(easting_r, easting, 0.0005)
31
+ assert_in_delta(northing_r, northing, 0.0005)
32
+ end
33
+
34
+ #Test initializers used
35
+ [[1576041.150, 6188574.240, -34.444065991, 172.739193967],
36
+ [1576542.010, 5515331.050, -40.512408980, 172.723105968],
37
+ [1307103.220, 4826464.860, -46.651295012, 169.172062008]
38
+ ].each do |easting,northing, latitude, longitude|
39
+ nztm1 = NZTM2000.new(easting: easting, northing: northing)
40
+ nztm2 = NZTM2000.new(latitude: nztm1.latitude, longitude: nztm1.longitude)
41
+ assert_in_delta(nztm1.latitude, latitude, 0.00005)
42
+ assert_in_delta(nztm1.longitude, longitude, 0.00005)
43
+ assert_in_delta(nztm2.easting, easting, 0.0005)
44
+ assert_in_delta(nztm2.northing, northing, 0.0005)
45
+ end
18
46
  end
19
47
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nztm2000
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Burrowes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-06 00:00:00.000000000 Z
11
+ date: 2016-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hoe-yard