proj4rb 4.1.1 → 5.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 (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +98 -0
  3. data/Gemfile +4 -4
  4. data/README.md +53 -0
  5. data/lib/api/proj.rb +750 -0
  6. data/lib/api/proj_experimental.rb +7 -0
  7. data/lib/api/proj_ffi.rb +47 -0
  8. data/lib/api/proj_version.rb +26 -0
  9. data/lib/examples/axis_order_normalization.rb +13 -0
  10. data/lib/examples/batch_transformation.rb +25 -0
  11. data/lib/examples/context_logging.rb +26 -0
  12. data/lib/examples/crs_identification.rb +18 -0
  13. data/lib/examples/database_query.rb +27 -0
  14. data/lib/examples/geodetic_distance.rb +38 -0
  15. data/lib/examples/geodetic_to_projected.rb +18 -0
  16. data/lib/examples/operation_factory_context.rb +19 -0
  17. data/lib/examples/pipeline_operator.rb +21 -0
  18. data/lib/examples/promote_demote_3d.rb +23 -0
  19. data/lib/examples/serialization_formats.rb +17 -0
  20. data/lib/examples/transform_bounds.rb +18 -0
  21. data/lib/examples/transformation_with_area.rb +18 -0
  22. data/lib/proj/area.rb +74 -74
  23. data/lib/proj/axis_info.rb +44 -44
  24. data/lib/proj/bounds.rb +22 -0
  25. data/lib/proj/bounds3d.rb +45 -0
  26. data/lib/proj/context.rb +57 -23
  27. data/lib/proj/conversion.rb +94 -91
  28. data/lib/proj/coordinate.rb +304 -281
  29. data/lib/proj/coordinate_metadata.rb +38 -38
  30. data/lib/proj/coordinate_operation_mixin.rb +464 -381
  31. data/lib/proj/coordinate_system.rb +143 -137
  32. data/lib/proj/crs.rb +688 -680
  33. data/lib/proj/crs_info.rb +47 -47
  34. data/lib/proj/database.rb +310 -305
  35. data/lib/proj/datum.rb +32 -32
  36. data/lib/proj/datum_ensemble.rb +34 -34
  37. data/lib/proj/domain.rb +82 -0
  38. data/lib/proj/ellipsoid.rb +77 -77
  39. data/lib/proj/error.rb +7 -8
  40. data/lib/proj/file_api_callbacks.rb +165 -0
  41. data/lib/proj/grid.rb +121 -121
  42. data/lib/proj/grid_cache.rb +65 -64
  43. data/lib/proj/grid_info.rb +19 -19
  44. data/lib/proj/life_span.rb +21 -0
  45. data/lib/proj/network_api_callbacks.rb +86 -0
  46. data/lib/proj/operation.rb +66 -42
  47. data/lib/proj/operation_factory_context.rb +4 -2
  48. data/lib/proj/options.rb +41 -0
  49. data/lib/proj/parameter.rb +37 -37
  50. data/lib/proj/parameters.rb +106 -107
  51. data/lib/proj/pj_axis_description.rb +26 -0
  52. data/lib/proj/pj_object.rb +602 -672
  53. data/lib/proj/pj_objects.rb +45 -45
  54. data/lib/proj/pj_param_description.rb +28 -0
  55. data/lib/proj/prime_meridian.rb +65 -65
  56. data/lib/proj/projection.rb +54 -25
  57. data/lib/proj/session.rb +2 -0
  58. data/lib/proj/transformation.rb +102 -102
  59. data/lib/proj/unit.rb +81 -108
  60. data/lib/proj.rb +10 -3
  61. data/lib/proj4.rb +5 -5
  62. data/proj4rb.gemspec +10 -5
  63. data/test/abstract_test.rb +7 -5
  64. data/test/context_test.rb +210 -172
  65. data/test/context_validation_test.rb +11 -0
  66. data/test/conversion_test.rb +376 -368
  67. data/test/coordinate_metadata_test.rb +34 -0
  68. data/test/coordinate_system_test.rb +162 -144
  69. data/test/coordinate_test.rb +289 -34
  70. data/test/crs_test.rb +1112 -1082
  71. data/test/database_test.rb +407 -391
  72. data/test/datum_ensemble_test.rb +64 -64
  73. data/test/datum_test.rb +61 -54
  74. data/test/domain_test.rb +72 -0
  75. data/test/ellipsoid_test.rb +80 -80
  76. data/test/examples_test.rb +149 -0
  77. data/test/file_api_example.rb +58 -0
  78. data/test/file_api_test.rb +74 -66
  79. data/test/grid_cache_test.rb +72 -72
  80. data/test/grid_test.rb +126 -141
  81. data/test/network_api_example.rb +48 -0
  82. data/test/network_api_test.rb +33 -45
  83. data/test/operation_factory_context_test.rb +225 -205
  84. data/test/operation_test.rb +40 -29
  85. data/test/options_test.rb +17 -0
  86. data/test/parameters_test.rb +86 -40
  87. data/test/pj_object_test.rb +221 -187
  88. data/test/prime_meridian_test.rb +75 -75
  89. data/test/proj_test.rb +58 -58
  90. data/test/projection_test.rb +680 -650
  91. data/test/session_test.rb +78 -77
  92. data/test/transformation_test.rb +238 -210
  93. data/test/unit_test.rb +114 -76
  94. metadata +44 -32
  95. data/ChangeLog +0 -94
  96. data/README.rdoc +0 -189
  97. data/lib/api/api.rb +0 -117
  98. data/lib/api/api_5_0.rb +0 -338
  99. data/lib/api/api_5_1.rb +0 -7
  100. data/lib/api/api_5_2.rb +0 -5
  101. data/lib/api/api_6_0.rb +0 -146
  102. data/lib/api/api_6_1.rb +0 -5
  103. data/lib/api/api_6_2.rb +0 -10
  104. data/lib/api/api_6_3.rb +0 -6
  105. data/lib/api/api_7_0.rb +0 -69
  106. data/lib/api/api_7_1.rb +0 -73
  107. data/lib/api/api_7_2.rb +0 -14
  108. data/lib/api/api_8_0.rb +0 -6
  109. data/lib/api/api_8_1.rb +0 -24
  110. data/lib/api/api_8_2.rb +0 -6
  111. data/lib/api/api_9_1.rb +0 -7
  112. data/lib/api/api_9_2.rb +0 -9
  113. data/lib/api/api_9_4.rb +0 -6
  114. data/lib/api/api_experimental.rb +0 -201
  115. data/lib/proj/file_api.rb +0 -166
  116. data/lib/proj/network_api.rb +0 -92
data/lib/proj/unit.rb CHANGED
@@ -1,109 +1,82 @@
1
- module Proj
2
- class Unit
3
- # @!attribute [r] auth_name
4
- # @return [String] Authority name
5
- # @!attribute [r] code
6
- # @return [String] Object code
7
- # @!attribute [r] name
8
- # @return [String] Object name. For example "metre", "US survey foot", etc
9
- # @!attribute [r] category
10
- # @return [String] Category of the unit: one of "linear", "linear_per_time", "angular", "angular_per_time", "scale", "scale_per_time" or "time"
11
- # @!attribute [r] conv_factor
12
- # @return [String] Conversion factor to apply to transform from that unit to the corresponding SI unit (metre for "linear", radian for "angular", etc.). It might be 0 in some cases to indicate no known conversion factor
13
- # @!attribute [r] proj_short_name
14
- # @return [String] PROJ short name, like "m", "ft", "us-ft", etc... Might be nil
15
- # @!attribute [r] deprecated
16
- # @return [Boolean] Whether the object is deprecated
17
- attr_reader :auth_name, :code, :name, :category, :conv_factor, :proj_short_name, :deprecated
18
-
19
- # Returns a list of built in Units. This is deprecated. Use Database#units instead
20
- def self.built_in(auth_name: nil, category: nil, allow_deprecated: false)
21
- # First get linear units
22
- pointer_to_array = FFI::Pointer.new(Api::PJ_UNITS, Api.proj_list_units)
23
- result = Array.new
24
- 0.step do |i|
25
- unit_info = Api::PJ_UNITS.new(pointer_to_array[i])
26
- break if unit_info[:id].nil?
27
- result << self.new('PROJ', unit_info[:id], unit_info[:name],
28
- 'length', unit_info[:factor], unit_info[:id], false)
29
- end
30
-
31
- # Now get angular linear units
32
- if Api.method_defined?(:proj_list_angular_units)
33
- pointer_to_array = FFI::Pointer.new(Api::PJ_UNITS, Api.proj_list_angular_units)
34
- 0.step do |i|
35
- unit_info = Api::PJ_UNITS.new(pointer_to_array[i])
36
- break result if unit_info[:id].nil?
37
- result << self.new('PROJ', unit_info[:id], unit_info[:name],
38
- 'angular', unit_info[:factor], unit_info[:id], false)
39
- end
40
- end
41
-
42
- if auth_name
43
- result = result.find_all {|unit_info| unit_info.auth_name == auth_name}
44
- end
45
-
46
- if category
47
- result = result.find_all {|unit_info| unit_info.category == category}
48
- end
49
- result
50
- end
51
-
52
- # Create a new Unit
53
- #
54
- # @param auth_name [String] Authority name
55
- # @param code [String] Object code
56
- # @param name [String] Object name. For example "metre", "US survey foot", etc
57
- # @param category [String] Category of the unit: one of "linear", "linear_per_time", "angular", "angular_per_time", "scale", "scale_per_time" or "time"
58
- # @param conv_factor [String] Conversion factor to apply to transform from that unit to the corresponding SI unit (metre for "linear", radian for "angular", etc.). It might be 0 in some cases to indicate no known conversion factor
59
- # @param proj_short_name [String] PROJ short name, like "m", "ft", "us-ft", etc... Might be nil
60
- # @param deprecated [Boolean] Whether the object is deprecated
61
- #
62
- # @return [Unit]
63
- def initialize(auth_name, code, name, category, conv_factor, proj_short_name, deprecated)
64
- @auth_name = auth_name
65
- @code = code
66
- @name = name
67
- @category = category
68
- @conv_factor = conv_factor
69
- @proj_short_name = proj_short_name
70
- @deprecated = deprecated
71
- end
72
-
73
- def <=>(other)
74
- self.name <=> other.name
75
- end
76
-
77
- def ==(other)
78
- self.auth_name == other.auth_name &&
79
- self.code == other.code
80
- end
81
-
82
- def unit_type
83
- case self.category
84
- when "linear"
85
- :PJ_UT_LINEAR
86
- when "linear_per_time"
87
- :PJ_UT_LINEAR
88
- when "angular"
89
- :PJ_UT_ANGULAR
90
- when "angular_per_time"
91
- :PJ_UT_ANGULAR
92
- when "scale"
93
- :PJ_UT_SCALE
94
- when "scale_per_time"
95
- :PJ_UT_SCALE
96
- when "time"
97
- :PJ_UT_TIME
98
- end
99
- end
100
-
101
- def to_s
102
- self.name
103
- end
104
-
105
- def inspect
106
- "#<#{self.class} authority=\"#{auth_name}\", code=\"#{code}\", name=\"#{name}\">"
107
- end
108
- end
1
+ module Proj
2
+ class Unit
3
+ # @!attribute [r] auth_name
4
+ # @return [String] Authority name
5
+ # @!attribute [r] code
6
+ # @return [String] Object code
7
+ # @!attribute [r] name
8
+ # @return [String] Object name. For example "metre", "US survey foot", etc
9
+ # @!attribute [r] category
10
+ # @return [String] Category of the unit: one of "linear", "linear_per_time", "angular", "angular_per_time", "scale", "scale_per_time" or "time"
11
+ # @!attribute [r] conv_factor
12
+ # @return [String] Conversion factor to apply to transform from that unit to the corresponding SI unit (metre for "linear", radian for "angular", etc.). It might be 0 in some cases to indicate no known conversion factor
13
+ # @!attribute [r] proj_short_name
14
+ # @return [String] PROJ short name, like "m", "ft", "us-ft", etc... Might be nil
15
+ # @!attribute [r] deprecated
16
+ # @return [Boolean] Whether the object is deprecated
17
+ attr_reader :auth_name, :code, :name, :category, :conv_factor, :proj_short_name, :deprecated
18
+
19
+ # Returns a list of built in Units.
20
+ def self.built_in(auth_name: nil, category: nil, allow_deprecated: false)
21
+ database = Database.new(Context.current)
22
+ database.units(auth_name: auth_name, category: category, allow_deprecated: allow_deprecated)
23
+ end
24
+
25
+ # Create a new Unit
26
+ #
27
+ # @param auth_name [String] Authority name
28
+ # @param code [String] Object code
29
+ # @param name [String] Object name. For example "metre", "US survey foot", etc
30
+ # @param category [String] Category of the unit: one of "linear", "linear_per_time", "angular", "angular_per_time", "scale", "scale_per_time" or "time"
31
+ # @param conv_factor [String] Conversion factor to apply to transform from that unit to the corresponding SI unit (metre for "linear", radian for "angular", etc.). It might be 0 in some cases to indicate no known conversion factor
32
+ # @param proj_short_name [String] PROJ short name, like "m", "ft", "us-ft", etc... Might be nil
33
+ # @param deprecated [Boolean] Whether the object is deprecated
34
+ #
35
+ # @return [Unit]
36
+ def initialize(auth_name, code, name, category, conv_factor, proj_short_name, deprecated)
37
+ @auth_name = auth_name
38
+ @code = code
39
+ @name = name
40
+ @category = category
41
+ @conv_factor = conv_factor
42
+ @proj_short_name = proj_short_name
43
+ @deprecated = deprecated
44
+ end
45
+
46
+ def <=>(other)
47
+ self.name <=> other.name
48
+ end
49
+
50
+ def ==(other)
51
+ self.auth_name == other.auth_name &&
52
+ self.code == other.code
53
+ end
54
+
55
+ def unit_type
56
+ case self.category
57
+ when "linear"
58
+ :PJ_UT_LINEAR
59
+ when "linear_per_time"
60
+ :PJ_UT_LINEAR
61
+ when "angular"
62
+ :PJ_UT_ANGULAR
63
+ when "angular_per_time"
64
+ :PJ_UT_ANGULAR
65
+ when "scale"
66
+ :PJ_UT_SCALE
67
+ when "scale_per_time"
68
+ :PJ_UT_SCALE
69
+ when "time"
70
+ :PJ_UT_TIME
71
+ end
72
+ end
73
+
74
+ def to_s
75
+ self.name
76
+ end
77
+
78
+ def inspect
79
+ "#<#{self.class} authority=\"#{auth_name}\", code=\"#{code}\", name=\"#{name}\">"
80
+ end
81
+ end
109
82
  end
data/lib/proj.rb CHANGED
@@ -1,7 +1,10 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require_relative 'api/api'
3
+ require_relative 'api/proj_ffi'
4
4
 
5
+ require_relative 'proj/pj_axis_description'
6
+ require_relative 'proj/pj_param_description'
7
+ require_relative 'proj/options'
5
8
  require_relative 'proj/pj_object'
6
9
  require_relative 'proj/pj_objects'
7
10
  require_relative 'proj/coordinate_operation_mixin'
@@ -13,20 +16,24 @@ require_relative 'proj/transformation'
13
16
  require_relative 'proj/area'
14
17
  require_relative 'proj/axis_info'
15
18
  require_relative 'proj/bounds'
19
+ require_relative 'proj/bounds3d'
20
+ require_relative 'proj/coordinate_metadata'
16
21
  require_relative 'proj/coordinate_system'
17
22
  require_relative 'proj/crs_info'
23
+ require_relative 'proj/life_span'
18
24
  require_relative 'proj/context'
19
25
  require_relative 'proj/coordinate'
20
26
  require_relative 'proj/database'
21
27
  require_relative 'proj/datum'
28
+ require_relative 'proj/domain'
22
29
  require_relative 'proj/datum_ensemble'
23
30
  require_relative 'proj/ellipsoid'
24
31
  require_relative 'proj/error'
25
- require_relative 'proj/file_api'
32
+ require_relative 'proj/file_api_callbacks'
26
33
  require_relative 'proj/grid'
27
34
  require_relative 'proj/grid_cache'
28
35
  require_relative 'proj/grid_info'
29
- require_relative 'proj/network_api'
36
+ require_relative 'proj/network_api_callbacks'
30
37
  require_relative 'proj/parameter'
31
38
  require_relative 'proj/operation'
32
39
  require_relative 'proj/operation_factory_context'
data/lib/proj4.rb CHANGED
@@ -1,6 +1,6 @@
1
- # encoding: UTF-8
2
-
3
- # This file is for backwards compatibility to the Proj4 namespace
4
- require_relative './proj'
5
-
1
+ # encoding: UTF-8
2
+
3
+ # This file is for backwards compatibility to the Proj4 namespace
4
+ require_relative './proj'
5
+
6
6
  Proj4 = Proj
data/proj4rb.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'proj4rb'
3
- spec.version = '4.1.1'
3
+ spec.version = '5.0.0'
4
4
  spec.summary = 'Ruby bindings for the Proj coordinate transformation library'
5
5
  spec.description = <<-EOF
6
6
  Ruby bindings for the Proj coordinate transformation library
@@ -13,18 +13,23 @@ Gem::Specification.new do |spec|
13
13
 
14
14
  spec.requirements << 'Proj Library'
15
15
  spec.require_path = 'lib'
16
- spec.files = Dir['ChangeLog',
16
+ spec.files = Dir['CHANGELOG.md',
17
17
  'Gemfile',
18
18
  'MIT-LICENSE',
19
19
  'proj4rb.gemspec',
20
20
  'Rakefile',
21
- 'README.rdoc',
21
+ 'README.md',
22
22
  'lib/**/*.rb',
23
23
  'test/*.rb']
24
24
 
25
- spec.test_files = Dir["test/test_*.rb"]
25
+ spec.metadata = {
26
+ 'homepage_uri' => spec.homepage,
27
+ 'source_code_uri' => 'https://github.com/cfis/proj4rb',
28
+ 'changelog_uri' => 'https://github.com/cfis/proj4rb/blob/master/CHANGELOG.md',
29
+ 'documentation_uri' => 'https://cfis.github.io/proj4rb/'
30
+ }
26
31
 
27
- spec.add_dependency "ffi"
32
+ spec.add_dependency "ffi", ">=1.17.4"
28
33
 
29
34
  spec.add_development_dependency('bundler')
30
35
  spec.add_development_dependency('rake')
@@ -1,6 +1,8 @@
1
- require 'bundler/setup'
2
- require 'minitest/autorun'
3
- require 'proj'
4
-
5
- class AbstractTest < Minitest::Test
1
+ require 'bundler/setup'
2
+ require 'minitest/autorun'
3
+ require 'proj'
4
+
5
+ Minitest.load_plugins
6
+
7
+ class AbstractTest < Minitest::Test
6
8
  end