proj4rb 2.2.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +82 -66
  3. data/Gemfile +4 -4
  4. data/README.rdoc +82 -45
  5. data/lib/api/api.rb +96 -111
  6. data/lib/api/api_5_0.rb +331 -300
  7. data/lib/api/api_5_1.rb +6 -6
  8. data/lib/api/api_5_2.rb +4 -4
  9. data/lib/api/api_6_0.rb +116 -14
  10. data/lib/api/api_6_1.rb +4 -4
  11. data/lib/api/api_6_2.rb +9 -6
  12. data/lib/api/api_6_3.rb +6 -0
  13. data/lib/api/api_7_0.rb +68 -0
  14. data/lib/api/api_7_1.rb +73 -0
  15. data/lib/api/api_7_2.rb +14 -0
  16. data/lib/api/api_8_0.rb +6 -0
  17. data/lib/api/api_8_1.rb +24 -0
  18. data/lib/api/api_8_2.rb +6 -0
  19. data/lib/api/api_9_1.rb +7 -0
  20. data/lib/api/api_9_2.rb +9 -0
  21. data/lib/api/api_experimental.rb +196 -0
  22. data/lib/proj/area.rb +73 -0
  23. data/lib/proj/axis_info.rb +44 -0
  24. data/lib/proj/bounds.rb +13 -0
  25. data/lib/proj/context.rb +249 -0
  26. data/lib/proj/conversion.rb +92 -0
  27. data/lib/{coordinate.rb → proj/coordinate.rb} +281 -197
  28. data/lib/proj/coordinate_operation_mixin.rb +381 -0
  29. data/lib/proj/coordinate_system.rb +137 -0
  30. data/lib/proj/crs.rb +672 -0
  31. data/lib/proj/crs_info.rb +47 -0
  32. data/lib/proj/database.rb +305 -0
  33. data/lib/proj/datum.rb +32 -0
  34. data/lib/proj/datum_ensemble.rb +34 -0
  35. data/lib/proj/ellipsoid.rb +78 -0
  36. data/lib/proj/error.rb +71 -0
  37. data/lib/proj/file_api.rb +166 -0
  38. data/lib/proj/grid.rb +121 -0
  39. data/lib/proj/grid_cache.rb +64 -0
  40. data/lib/proj/grid_info.rb +19 -0
  41. data/lib/proj/network_api.rb +92 -0
  42. data/lib/{operation.rb → proj/operation.rb} +42 -42
  43. data/lib/proj/operation_factory_context.rb +136 -0
  44. data/lib/proj/parameter.rb +38 -0
  45. data/lib/proj/parameters.rb +106 -0
  46. data/lib/proj/pj_object.rb +670 -0
  47. data/lib/proj/pj_objects.rb +44 -0
  48. data/lib/proj/prime_meridian.rb +66 -0
  49. data/lib/proj/projection.rb +698 -0
  50. data/lib/proj/session.rb +46 -0
  51. data/lib/proj/strings.rb +32 -0
  52. data/lib/proj/transformation.rb +102 -0
  53. data/lib/proj/unit.rb +109 -0
  54. data/lib/proj.rb +118 -17
  55. data/proj4rb.gemspec +32 -32
  56. data/test/abstract_test.rb +29 -7
  57. data/test/context_test.rb +172 -82
  58. data/test/conversion_test.rb +368 -0
  59. data/test/coordinate_system_test.rb +144 -0
  60. data/test/coordinate_test.rb +34 -34
  61. data/test/crs_test.rb +1071 -372
  62. data/test/database_test.rb +360 -0
  63. data/test/datum_ensemble_test.rb +65 -0
  64. data/test/datum_test.rb +55 -0
  65. data/test/ellipsoid_test.rb +80 -34
  66. data/test/file_api_test.rb +66 -0
  67. data/test/grid_cache_test.rb +72 -0
  68. data/test/grid_test.rb +141 -0
  69. data/test/network_api_test.rb +45 -0
  70. data/test/operation_factory_context_test.rb +201 -0
  71. data/test/operation_test.rb +29 -29
  72. data/test/parameters_test.rb +40 -0
  73. data/test/pj_object_test.rb +179 -0
  74. data/test/prime_meridian_test.rb +76 -0
  75. data/test/proj_test.rb +58 -16
  76. data/test/projection_test.rb +650 -224
  77. data/test/session_test.rb +78 -0
  78. data/test/transformation_test.rb +209 -67
  79. data/test/unit_test.rb +76 -47
  80. metadata +67 -29
  81. data/lib/api/api_4_9.rb +0 -31
  82. data/lib/area.rb +0 -32
  83. data/lib/config.rb +0 -70
  84. data/lib/context.rb +0 -103
  85. data/lib/crs.rb +0 -204
  86. data/lib/ellipsoid.rb +0 -42
  87. data/lib/error.rb +0 -18
  88. data/lib/pj_object.rb +0 -80
  89. data/lib/point.rb +0 -72
  90. data/lib/prime_meridian.rb +0 -40
  91. data/lib/projection.rb +0 -207
  92. data/lib/transformation.rb +0 -61
  93. data/lib/unit.rb +0 -54
  94. data/test/prime_meridians_test.rb +0 -33
@@ -0,0 +1,78 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './abstract_test'
4
+
5
+ class SessionTest < AbstractTest
6
+ def teardown
7
+ GC.start
8
+ end
9
+
10
+ def create_crs
11
+ Proj::Crs.new(<<~EOS, Proj::Context.new)
12
+ GEOGCRS["myGDA2020",
13
+ DATUM["GDA2020",
14
+ ELLIPSOID["GRS_1980",6378137,298.257222101,
15
+ LENGTHUNIT["metre",1]]],
16
+ PRIMEM["Greenwich",0,
17
+ ANGLEUNIT["Degree",0.0174532925199433]],
18
+ CS[ellipsoidal,2],
19
+ AXIS["geodetic latitude (Lat)",north,
20
+ ORDER[1],
21
+ ANGLEUNIT["degree",0.0174532925199433]],
22
+ AXIS["geodetic longitude (Lon)",east,
23
+ ORDER[2],
24
+ ANGLEUNIT["degree",0.0174532925199433]]]
25
+ EOS
26
+ end
27
+
28
+ def test_create_session
29
+ session = Proj::Session.new
30
+ assert(session)
31
+ end
32
+
33
+ def test_finalize
34
+ 100.times do
35
+ crs = Proj::Session.new(Proj::Context.new)
36
+ assert(crs.to_ptr)
37
+ GC.start
38
+ end
39
+ assert(true)
40
+ end
41
+
42
+ def test_insert_statements
43
+ crs = create_crs
44
+ session = Proj::Session.new(crs.context)
45
+ statements = session.get_insert_statements(crs, "HOBU", "XXXX")
46
+ assert_equal(4, statements.count)
47
+
48
+ expected = "INSERT INTO geodetic_datum VALUES('HOBU','GEODETIC_DATUM_XXXX','GDA2020','','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,0);"
49
+ assert_equal(expected, statements[0])
50
+ end
51
+
52
+ def test_insert_statements_empty_authorities
53
+ crs = create_crs
54
+
55
+ session = Proj::Session.new(crs.context)
56
+ statements = session.get_insert_statements(crs, "HOBU", "XXXX", false, [])
57
+ assert_equal(6, statements.count)
58
+ end
59
+
60
+ def test_insert_statements_authorities_proj
61
+ crs = create_crs
62
+
63
+ session = Proj::Session.new(crs.context)
64
+ statements = session.get_insert_statements(crs, "HOBU", "XXXX", false, ['EPSG'])
65
+ assert_equal(4, statements.count)
66
+ end
67
+
68
+ def test_insert_twice
69
+ crs = create_crs
70
+
71
+ session = Proj::Session.new(crs.context)
72
+ statements = session.get_insert_statements(crs, "HOBU", "XXXX")
73
+ assert_equal(4, statements.count)
74
+
75
+ statements = session.get_insert_statements(crs, "HOBU", "XXXX")
76
+ assert_equal(0, statements.count)
77
+ end
78
+ end
@@ -1,68 +1,210 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './abstract_test'
4
-
5
- class TransformationTest < AbstractTest
6
- PRECISION = 0.5
7
-
8
- def setup
9
- @crs_wgs84 = Proj::Crs.new('epsg:4326')
10
- @crs_gk = Proj::Crs.new('epsg:31467')
11
- end
12
-
13
- def test_create_from_strings
14
- transform = Proj::Transformation.new('epsg:31467', 'epsg:4326')
15
- assert(transform.info)
16
- end
17
-
18
- def test_create_crs
19
- transform = Proj::Transformation.new(@crs_wgs84, @crs_gk)
20
- assert(transform.info)
21
- end
22
-
23
- # echo "3458305 5428192" | cs2cs -f '%.10f' +init=epsg:31467 +to +init=epsg:4326 -
24
- def test_gk_to_wgs84_forward
25
- transform = Proj::Transformation.new(@crs_gk, @crs_wgs84)
26
- from = Proj::Coordinate.new(x: 5428192.0, y: 3458305.0, z: -5.1790915237)
27
- to = transform.forward(from)
28
-
29
- assert_in_delta(48.98963932450735, to.x, PRECISION)
30
- assert_in_delta(8.429263044355544, to.y, PRECISION)
31
- assert_in_delta(-5.1790915237, to.z, PRECISION)
32
- assert_in_delta(0, to.t, PRECISION)
33
- end
34
-
35
- def test_gk_to_wgs84_inverse
36
- transform = Proj::Transformation.new(@crs_gk, @crs_wgs84)
37
- from = Proj::Coordinate.new(lam: 48.9906726079, phi: 8.4302123334)
38
- to = transform.inverse(from)
39
-
40
- assert_in_delta(5428306.39, to.x, PRECISION)
41
- assert_in_delta(3458375, to.y, PRECISION)
42
- assert_in_delta(0, to.z, PRECISION)
43
- assert_in_delta(0, to.t, PRECISION)
44
- end
45
-
46
- # echo "8.4293092923 48.9896114523" | cs2cs -f '%.10f' +init=epsg:4326 +to +init=epsg:31467 -
47
- def test_wgs84_to_gk_forward
48
- transform = Proj::Transformation.new(@crs_wgs84, @crs_gk)
49
- from = Proj::Coordinate.new(lam: 48.9906726079, phi: 8.4302123334)
50
- to = transform.forward(from)
51
-
52
- assert_in_delta(5428306.39, to.x, PRECISION)
53
- assert_in_delta(3458375, to.y, PRECISION)
54
- assert_in_delta(0, to.z, PRECISION)
55
- assert_in_delta(0, to.t, PRECISION)
56
- end
57
-
58
- def test_wgs84_to_gk_forward_inverse
59
- transform = Proj::Transformation.new(@crs_wgs84, @crs_gk)
60
- from = Proj::Coordinate.new(x: 5428192.0, y: 3458305.0, z: -5.1790915237)
61
- to = transform.inverse(from)
62
-
63
- assert_in_delta(48.98963932450735, to.x, PRECISION)
64
- assert_in_delta(8.429263044355544, to.y, PRECISION)
65
- assert_in_delta(-5.1790915237, to.z, PRECISION)
66
- assert_in_delta(0, to.t, PRECISION)
67
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './abstract_test'
4
+
5
+ class TransformationTest < AbstractTest
6
+ PRECISION = 1.5
7
+
8
+ def setup
9
+ @crs_wgs84 = Proj::Crs.new('EPSG:4326')
10
+ @crs_gk = Proj::Crs.new('EPSG:31467')
11
+ end
12
+
13
+ def test_create_from_strings
14
+ transform = Proj::Transformation.new('EPSG:31467', 'EPSG:4326')
15
+ assert(transform.info)
16
+ end
17
+
18
+ def test_create_from_crs
19
+ transform = Proj::Transformation.new(@crs_wgs84, @crs_gk)
20
+ assert(transform.info)
21
+ end
22
+
23
+ def test_create
24
+ context = Proj::Context.new
25
+ coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LONGITUDE_LATITUDE, context)
26
+ source_crs = Proj::Crs.create_geographic(context,
27
+ name: "Source CRS",
28
+ datum_name: "World Geodetic System 1984",
29
+ ellps_name: "WGS 84",
30
+ semi_major_meter: 6378137,
31
+ inv_flattening: 298.257223563,
32
+ prime_meridian_name: "Greenwich",
33
+ prime_meridian_offset: 0.0,
34
+ pm_angular_units: "Degree",
35
+ pm_units_conv: 0.0174532925199433,
36
+ coordinate_system: coordinate_system)
37
+
38
+ target_crs = Proj::Crs.create_geographic(context,
39
+ name: "WGS 84",
40
+ datum_name: "World Geodetic System 1984",
41
+ ellps_name: "WGS 84",
42
+ semi_major_meter: 6378137,
43
+ inv_flattening: 298.257223563,
44
+ prime_meridian_name: "Greenwich",
45
+ prime_meridian_offset: 0.0,
46
+ pm_angular_units: "Degree",
47
+ pm_units_conv: 0.0174532925199433,
48
+ coordinate_system: coordinate_system)
49
+
50
+ interp_crs = Proj::Crs.create_geographic(context,
51
+ name: "Interpolation CRS",
52
+ datum_name: "World Geodetic System 1984",
53
+ ellps_name: "WGS 84",
54
+ semi_major_meter: 6378137,
55
+ inv_flattening: 298.257223563,
56
+ prime_meridian_name: "Greenwich",
57
+ prime_meridian_offset: 0.0,
58
+ pm_angular_units: "Degree",
59
+ pm_units_conv: 0.0174532925199433,
60
+ coordinate_system: coordinate_system)
61
+
62
+ param = Proj::Parameter.new(name: "param name", value: 0.99,
63
+ unit_conv_factor: 1.0, unit_type: :PJ_UT_SCALE)
64
+
65
+ transformation = Proj::Transformation.create(context, name: "transf", auth_name: "transf auth", code: "transf code",
66
+ source_crs: source_crs, target_crs: target_crs, interpolation_crs: interp_crs,
67
+ method_name: "method", method_auth_name: "method_auth", method_code: "1",
68
+ params: [param], accuracy: 0)
69
+
70
+ assert_equal(1, transformation.param_count)
71
+
72
+ assert(source_crs.equivalent_to?(transformation.source_crs, :PJ_COMP_STRICT))
73
+ assert(target_crs.equivalent_to?(transformation.target_crs, :PJ_COMP_STRICT))
74
+ end
75
+
76
+ # echo "3458305 5428192" | cs2cs -f '%.10f' +init=epsg:31467 +to +init=epsg:4326 -
77
+ def test_gk_to_wgs84_forward
78
+ transform = Proj::Transformation.new(@crs_gk, @crs_wgs84)
79
+ from = Proj::Coordinate.new(x: 5428192.0, y: 3458305.0, z: -5.1790915237)
80
+ to = transform.forward(from)
81
+
82
+ assert_in_delta(48.98963932450735, to.x, PRECISION)
83
+ assert_in_delta(8.429263044355544, to.y, PRECISION)
84
+ assert_in_delta(-5.1790915237, to.z, PRECISION)
85
+ assert_in_delta(0, to.t, PRECISION)
86
+ end
87
+
88
+ def test_gk_to_wgs84_inverse
89
+ transform = Proj::Transformation.new(@crs_gk, @crs_wgs84)
90
+ from = Proj::Coordinate.new(lam: 48.9906726079, phi: 8.4302123334)
91
+ to = transform.inverse(from)
92
+
93
+ assert_in_delta(5428306, to.x, PRECISION)
94
+ assert_in_delta(3458375, to.y, PRECISION)
95
+ assert_in_delta(0, to.z, PRECISION)
96
+ assert_in_delta(0, to.t, PRECISION)
97
+ end
98
+
99
+ # echo "8.4293092923 48.9896114523" | cs2cs -f '%.10f' +init=epsg:4326 +to +init=epsg:31467 -
100
+ def test_wgs84_to_gk_forward
101
+ transform = Proj::Transformation.new(@crs_wgs84, @crs_gk)
102
+ from = Proj::Coordinate.new(lam: 48.9906726079, phi: 8.4302123334)
103
+ to = transform.forward(from)
104
+
105
+ assert_in_delta(5428306, to.x, PRECISION)
106
+ assert_in_delta(3458375, to.y, PRECISION)
107
+ assert_in_delta(0, to.z, PRECISION)
108
+ assert_in_delta(0, to.t, PRECISION)
109
+ end
110
+
111
+ def test_wgs84_to_gk_forward_inverse
112
+ transform = Proj::Transformation.new(@crs_wgs84, @crs_gk)
113
+ from = Proj::Coordinate.new(x: 5428192.0, y: 3458305.0, z: -5.1790915237)
114
+ to = transform.inverse(from)
115
+
116
+ assert_in_delta(48.98963932450735, to.x, PRECISION)
117
+ assert_in_delta(8.429263044355544, to.y, PRECISION)
118
+ assert_in_delta(-5.1790915237, to.z, PRECISION)
119
+ assert_in_delta(0, to.t, PRECISION)
120
+ end
121
+
122
+ def test_with_area
123
+ area = Proj::Area.new(west_lon_degree: -114.1324, south_lat_degree: 49.5614,
124
+ east_lon_degree: 3.76488, north_lat_degree: 62.1463)
125
+ transformation = Proj::Transformation.new("EPSG:4277", "EPSG:4326", area: area)
126
+
127
+ coordinate1 = Proj::Coordinate.new(x: 50, y: -2, z: 0, t: Float::INFINITY)
128
+ coordinate2 = transformation.forward(coordinate1)
129
+
130
+ assert_in_delta(50.00065628, coordinate2.x, 1e-4)
131
+ assert_in_delta(-2.00133989, coordinate2.y, 1e-4)
132
+ end
133
+
134
+ def test_accuracy_filter
135
+ src = Proj::Crs.new("EPSG:4326")
136
+ dst = Proj::Crs.new("EPSG:4258")
137
+
138
+ error = assert_raises(Proj::Error) do
139
+ Proj::Transformation.new(src, dst, accuracy: 0.05)
140
+ end
141
+ assert_equal("No operation found matching criteria", error.to_s)
142
+ end
143
+
144
+ def test_ballpark_filter
145
+ src = Proj::Crs.new("EPSG:4267")
146
+ dst = Proj::Crs.new("EPSG:4258")
147
+
148
+ error = assert_raises(Proj::Error) do
149
+ Proj::Transformation.new(src, dst, allow_ballpark: false)
150
+ end
151
+ assert_equal("No operation found matching criteria", error.to_s)
152
+ end
153
+
154
+ if proj8?
155
+ def test_transform_bounds
156
+ transform = Proj::Transformation.new("EPSG:4326",
157
+ "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs")
158
+
159
+ start_bounds = Proj::Bounds.new(40, -120, 64, -80)
160
+ end_bounds = transform.transform_bounds(start_bounds, :PJ_FWD, 0)
161
+
162
+ assert_equal(-1684649.4133828662, end_bounds.xmin)
163
+ assert_equal(-350356.8137658477, end_bounds.ymin)
164
+ assert_equal(1684649.4133828674, end_bounds.xmax)
165
+ assert_equal(2234551.1855909275, end_bounds.ymax)
166
+ end
167
+
168
+ def test_transform_bounds_normalized
169
+ transform = Proj::Transformation.new("EPSG:4326",
170
+ "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs")
171
+
172
+ normalized = transform.normalize_for_visualization
173
+
174
+ start_bounds = Proj::Bounds.new(-120, 40, -80, 64)
175
+ end_bounds = normalized.transform_bounds(start_bounds, :PJ_FWD, 100)
176
+
177
+ assert_equal(-1684649.4133828662, end_bounds.xmin)
178
+ assert_equal(-555777.7923351025, end_bounds.ymin)
179
+ assert_equal(1684649.4133828674, end_bounds.xmax)
180
+ assert_equal(2234551.1855909275, end_bounds.ymax)
181
+ end
182
+
183
+ def test_transform_bounds_densify
184
+ transform = Proj::Transformation.new("EPSG:4326",
185
+ "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs")
186
+
187
+ start_bounds = Proj::Bounds.new(40, -120, 64, -80)
188
+ end_bounds = transform.transform_bounds(start_bounds, :PJ_FWD, 100)
189
+
190
+ assert_equal(-1684649.4133828662, end_bounds.xmin)
191
+ assert_equal(-555777.7923351025, end_bounds.ymin)
192
+ assert_equal(1684649.4133828674, end_bounds.xmax)
193
+ assert_equal(2234551.1855909275, end_bounds.ymax)
194
+ end
195
+
196
+ def test_instantiable
197
+ operation = Proj::Conversion.create_from_database("EPSG", "1671", :PJ_CATEGORY_COORDINATE_OPERATION)
198
+ assert(operation.instantiable?)
199
+ end
200
+
201
+ def test_steps_not_concatenated
202
+ operation = Proj::Conversion.create_from_database("EPSG", "8048", :PJ_CATEGORY_COORDINATE_OPERATION)
203
+ assert_instance_of(Proj::Transformation, operation)
204
+ assert_equal(:PJ_TYPE_TRANSFORMATION, operation.proj_type)
205
+
206
+ assert_equal(0, operation.step_count)
207
+ refute(operation.step(0))
208
+ end
209
+ end
68
210
  end
data/test/unit_test.rb CHANGED
@@ -1,47 +1,76 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './abstract_test'
4
-
5
- class UnitsTest < AbstractTest
6
- def test_get_all
7
- units = Proj::Unit.list.sort.collect {|unit| unit.id}
8
- assert(units.include?('deg'))
9
- assert(units.include?('km'))
10
- assert(units.include?('m'))
11
- assert(units.include?('yd'))
12
- assert(units.include?('us-mi'))
13
- end
14
-
15
- def test_linear_unit
16
- unit = Proj::Unit.get('km')
17
- assert_kind_of Proj::Unit, unit
18
- assert_equal('km', unit.id)
19
- assert_equal('km', unit.to_s)
20
- assert_equal('1000', unit.to_meter)
21
- assert_equal(1000.0, unit.factor)
22
- assert_equal('Kilometer', unit.name)
23
- assert_equal('#<Proj::Unit id="km", to_meter="1000", factor="1000.0", name="Kilometer">', unit.inspect)
24
- end
25
-
26
- def test_angular_unit
27
- unit = Proj::Unit.get('deg')
28
- assert_kind_of Proj::Unit, unit
29
- assert_equal('deg', unit.id)
30
- assert_equal('deg', unit.to_s)
31
- assert_equal('0.017453292519943296', unit.to_meter)
32
- assert_equal(0.017453292519943295, unit.factor)
33
- assert_equal('Degree', unit.name)
34
- assert_equal('#<Proj::Unit id="deg", to_meter="0.017453292519943296", factor="0.017453292519943295", name="Degree">', unit.inspect)
35
- end
36
-
37
- def test_compare
38
- u1 = Proj::Unit.get('km')
39
- u2 = Proj::Unit.get('km')
40
- assert(u1 == u2)
41
- end
42
-
43
- def test_failed_get
44
- unit = Proj::Unit.get('foo')
45
- assert_nil unit
46
- end
47
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './abstract_test'
4
+
5
+ class UnitsTest < AbstractTest
6
+ def test_get_all
7
+ database = Proj::Database.new(Proj::Context.current)
8
+ units = database.units
9
+ assert_equal(91, units.count)
10
+
11
+ unit = units[0]
12
+ assert_instance_of(Proj::Unit, unit)
13
+ end
14
+
15
+ def test_builtin
16
+ units = Proj::Unit.built_in
17
+ assert_equal(24, units.count)
18
+
19
+ unit = units[0]
20
+ assert_instance_of(Proj::Unit, unit)
21
+ end
22
+
23
+ def test_linear_unit
24
+ database = Proj::Database.new(Proj::Context.current)
25
+ units = database.units(category: "linear")
26
+ assert_equal(52, units.count)
27
+
28
+ unit = units[0]
29
+ assert_instance_of(Proj::Unit, unit)
30
+ assert_equal('millimetre', unit.name)
31
+ assert_equal('millimetre', unit.to_s)
32
+ assert_equal('mm', unit.proj_short_name)
33
+ assert_equal(0.001, unit.conv_factor)
34
+ assert_equal('EPSG', unit.auth_name)
35
+ assert_equal('#<Proj::Unit authority="EPSG", code="1025", name="millimetre">', unit.inspect)
36
+ end
37
+
38
+ def test_angular_unit
39
+ database = Proj::Database.new(Proj::Context.current)
40
+ units = database.units(category: "angular")
41
+ assert_equal(22, units.count)
42
+
43
+ unit = units[0]
44
+ assert_equal('milliarc-second', unit.name)
45
+ assert_equal('milliarc-second', unit.to_s)
46
+ refute(unit.proj_short_name)
47
+ assert_in_delta(4.84813681109536e-09, unit.conv_factor, 0.0001)
48
+ assert_equal('EPSG', unit.auth_name)
49
+ assert_equal('#<Proj::Unit authority="EPSG", code="1031", name="milliarc-second">', unit.inspect)
50
+ end
51
+
52
+ def test_compare
53
+ database = Proj::Database.new(Proj::Context.current)
54
+ unit_1 = database.unit("EPSG", "9001")
55
+ unit_2 = database.unit("EPSG", "9001")
56
+ assert(unit_1 == unit_2)
57
+ end
58
+
59
+ def test_category
60
+ database = Proj::Database.new(Proj::Context.current)
61
+
62
+ %w[linear linear_per_time angular angular_per_time scale scale_per_time time].each do |category|
63
+ units = database.units(category: category)
64
+ refute_empty(units)
65
+ end
66
+ end
67
+
68
+ def test_auth_name
69
+ database = Proj::Database.new(Proj::Context.current)
70
+
71
+ %w[EPSG PROJ].each do |auth_name|
72
+ units = database.units(auth_name: auth_name)
73
+ refute_empty(units)
74
+ end
75
+ end
76
+ end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proj4rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilhem Vellut
8
8
  - Jochen Topf
9
9
  - Charlie Savage
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-01-10 00:00:00.000000000 Z
13
+ date: 2023-03-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ffi
@@ -82,10 +82,8 @@ dependencies:
82
82
  - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
- description: " Proj4rb is a ruby binding for the Proj.4 Carthographic Projection
86
- library, that supports conversions between a very large number of geographic coordinate
87
- systems and datumspec.\n"
88
- email:
85
+ description: " Ruby bindings for the Proj coordinate transformation library\n"
86
+ email:
89
87
  executables: []
90
88
  extensions: []
91
89
  extra_rdoc_files: []
@@ -96,46 +94,86 @@ files:
96
94
  - README.rdoc
97
95
  - Rakefile
98
96
  - lib/api/api.rb
99
- - lib/api/api_4_9.rb
100
97
  - lib/api/api_5_0.rb
101
98
  - lib/api/api_5_1.rb
102
99
  - lib/api/api_5_2.rb
103
100
  - lib/api/api_6_0.rb
104
101
  - lib/api/api_6_1.rb
105
102
  - lib/api/api_6_2.rb
106
- - lib/area.rb
107
- - lib/config.rb
108
- - lib/context.rb
109
- - lib/coordinate.rb
110
- - lib/crs.rb
111
- - lib/ellipsoid.rb
112
- - lib/error.rb
113
- - lib/operation.rb
114
- - lib/pj_object.rb
115
- - lib/point.rb
116
- - lib/prime_meridian.rb
103
+ - lib/api/api_6_3.rb
104
+ - lib/api/api_7_0.rb
105
+ - lib/api/api_7_1.rb
106
+ - lib/api/api_7_2.rb
107
+ - lib/api/api_8_0.rb
108
+ - lib/api/api_8_1.rb
109
+ - lib/api/api_8_2.rb
110
+ - lib/api/api_9_1.rb
111
+ - lib/api/api_9_2.rb
112
+ - lib/api/api_experimental.rb
117
113
  - lib/proj.rb
114
+ - lib/proj/area.rb
115
+ - lib/proj/axis_info.rb
116
+ - lib/proj/bounds.rb
117
+ - lib/proj/context.rb
118
+ - lib/proj/conversion.rb
119
+ - lib/proj/coordinate.rb
120
+ - lib/proj/coordinate_operation_mixin.rb
121
+ - lib/proj/coordinate_system.rb
122
+ - lib/proj/crs.rb
123
+ - lib/proj/crs_info.rb
124
+ - lib/proj/database.rb
125
+ - lib/proj/datum.rb
126
+ - lib/proj/datum_ensemble.rb
127
+ - lib/proj/ellipsoid.rb
128
+ - lib/proj/error.rb
129
+ - lib/proj/file_api.rb
130
+ - lib/proj/grid.rb
131
+ - lib/proj/grid_cache.rb
132
+ - lib/proj/grid_info.rb
133
+ - lib/proj/network_api.rb
134
+ - lib/proj/operation.rb
135
+ - lib/proj/operation_factory_context.rb
136
+ - lib/proj/parameter.rb
137
+ - lib/proj/parameters.rb
138
+ - lib/proj/pj_object.rb
139
+ - lib/proj/pj_objects.rb
140
+ - lib/proj/prime_meridian.rb
141
+ - lib/proj/projection.rb
142
+ - lib/proj/session.rb
143
+ - lib/proj/strings.rb
144
+ - lib/proj/transformation.rb
145
+ - lib/proj/unit.rb
118
146
  - lib/proj4.rb
119
- - lib/projection.rb
120
- - lib/transformation.rb
121
- - lib/unit.rb
122
147
  - proj4rb.gemspec
123
148
  - test/abstract_test.rb
124
149
  - test/context_test.rb
150
+ - test/conversion_test.rb
151
+ - test/coordinate_system_test.rb
125
152
  - test/coordinate_test.rb
126
153
  - test/crs_test.rb
154
+ - test/database_test.rb
155
+ - test/datum_ensemble_test.rb
156
+ - test/datum_test.rb
127
157
  - test/ellipsoid_test.rb
158
+ - test/file_api_test.rb
159
+ - test/grid_cache_test.rb
160
+ - test/grid_test.rb
161
+ - test/network_api_test.rb
162
+ - test/operation_factory_context_test.rb
128
163
  - test/operation_test.rb
129
- - test/prime_meridians_test.rb
164
+ - test/parameters_test.rb
165
+ - test/pj_object_test.rb
166
+ - test/prime_meridian_test.rb
130
167
  - test/proj_test.rb
131
168
  - test/projection_test.rb
169
+ - test/session_test.rb
132
170
  - test/transformation_test.rb
133
171
  - test/unit_test.rb
134
172
  homepage: https://github.com/cfis/proj4rb
135
173
  licenses:
136
174
  - MIT
137
175
  metadata: {}
138
- post_install_message:
176
+ post_install_message:
139
177
  rdoc_options: []
140
178
  require_paths:
141
179
  - lib
@@ -143,16 +181,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
181
  requirements:
144
182
  - - ">="
145
183
  - !ruby/object:Gem::Version
146
- version: 2.4.1
184
+ version: '2.7'
147
185
  required_rubygems_version: !ruby/object:Gem::Requirement
148
186
  requirements:
149
187
  - - ">="
150
188
  - !ruby/object:Gem::Version
151
189
  version: '0'
152
190
  requirements:
153
- - Proj (Proj4) Library
154
- rubygems_version: 3.1.2
155
- signing_key:
191
+ - Proj Library
192
+ rubygems_version: 3.4.6
193
+ signing_key:
156
194
  specification_version: 4
157
- summary: Ruby bindings for the Proj.4 Carthographic Projection library
195
+ summary: Ruby bindings for the Proj coordinate transformation library
158
196
  test_files: []
data/lib/api/api_4_9.rb DELETED
@@ -1,31 +0,0 @@
1
- module Proj
2
- module Api
3
- ######### Deprecated API from proj_api.h. Don't use these anymore! ##############
4
- typedef :pointer, :projPJ
5
-
6
- class ProjUV < FFI::Struct
7
- layout :u, :double,
8
- :v, :double
9
- end
10
-
11
- ProjXY = ProjUV
12
- ProjLP = ProjUV
13
-
14
- attach_function :pj_init, [:int, :pointer], :projPJ
15
- attach_function :pj_free, [:projPJ], :void
16
-
17
- attach_function :pj_get_release, [], :string
18
- attach_function :pj_set_searchpath, [:int, :pointer], :void
19
-
20
- attach_function :pj_get_errno_ref, [], :pointer
21
- attach_function :pj_strerrno, [:int], :string
22
-
23
- attach_function :pj_get_def, [:projPJ, :int], :string
24
- attach_function :pj_is_latlong, [:projPJ], :bool
25
- attach_function :pj_is_geocent, [:projPJ], :bool
26
-
27
- attach_function :pj_fwd, [ProjLP.by_value, :projPJ], ProjXY.by_value
28
- attach_function :pj_inv, [ProjXY.by_value, :projPJ], ProjLP.by_value
29
- attach_function :pj_transform, [:projPJ, :projPJ, :long, :int, :pointer, :pointer, :pointer], :bool
30
- end
31
- end