proj4rb 3.0.0 → 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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +26 -15
  3. data/README.rdoc +82 -44
  4. data/Rakefile +27 -27
  5. data/lib/api/api.rb +96 -118
  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 -32
  23. data/lib/proj/axis_info.rb +44 -0
  24. data/lib/proj/bounds.rb +13 -0
  25. data/lib/proj/context.rb +174 -28
  26. data/lib/proj/conversion.rb +92 -0
  27. data/lib/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 -204
  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 +77 -41
  36. data/lib/proj/error.rb +62 -9
  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/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 -80
  47. data/lib/proj/pj_objects.rb +44 -0
  48. data/lib/proj/prime_meridian.rb +65 -39
  49. data/lib/proj/projection.rb +698 -207
  50. data/lib/proj/session.rb +46 -0
  51. data/lib/proj/strings.rb +32 -0
  52. data/lib/proj/transformation.rb +101 -60
  53. data/lib/proj/unit.rb +108 -53
  54. data/lib/proj.rb +110 -9
  55. data/proj4rb.gemspec +5 -5
  56. data/test/abstract_test.rb +23 -1
  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/crs_test.rb +770 -71
  61. data/test/database_test.rb +360 -0
  62. data/test/datum_ensemble_test.rb +65 -0
  63. data/test/datum_test.rb +55 -0
  64. data/test/ellipsoid_test.rb +64 -18
  65. data/test/file_api_test.rb +66 -0
  66. data/test/grid_cache_test.rb +72 -0
  67. data/test/grid_test.rb +141 -0
  68. data/test/network_api_test.rb +45 -0
  69. data/test/operation_factory_context_test.rb +201 -0
  70. data/test/parameters_test.rb +40 -0
  71. data/test/pj_object_test.rb +179 -0
  72. data/test/prime_meridian_test.rb +76 -0
  73. data/test/proj_test.rb +46 -4
  74. data/test/projection_test.rb +646 -222
  75. data/test/session_test.rb +78 -0
  76. data/test/transformation_test.rb +149 -7
  77. data/test/unit_test.rb +57 -28
  78. metadata +51 -13
  79. data/lib/api/api_4_9.rb +0 -31
  80. data/lib/proj/config.rb +0 -70
  81. data/lib/proj/point.rb +0 -72
  82. data/test/prime_meridians_test.rb +0 -33
@@ -0,0 +1,44 @@
1
+ # encoding: UTF-8
2
+ module Proj
3
+ class PjObjects
4
+ def self.finalize(pointer)
5
+ proc do
6
+ Api.proj_list_destroy(pointer)
7
+ end
8
+ end
9
+
10
+ def initialize(pointer, context)
11
+ @pointer = pointer
12
+ @context = context
13
+ ObjectSpace.define_finalizer(self, self.class.finalize(@pointer))
14
+ end
15
+
16
+ def to_ptr
17
+ @pointer
18
+ end
19
+
20
+ def context
21
+ @context || Context.current
22
+ end
23
+
24
+ def count
25
+ Api.proj_list_get_count(self)
26
+ end
27
+ alias :size :count
28
+
29
+ def [](index)
30
+ ptr = Api.proj_list_get(context, self, index)
31
+ PjObject.create_object(ptr, self.context)
32
+ end
33
+
34
+ # Returns the index of the operation that would be the most appropriate to transform the specified coordinates.
35
+ #
36
+ # @param direction [PJ_DIRECTION] - Direction into which to transform the point.
37
+ # @param coord [Coordinate] - Coordinate to transform
38
+ #
39
+ # @return [Integer] - Index of operation
40
+ def suggested_operation(direction, coord)
41
+ Api.proj_get_suggested_operation(self.context, self, direction, coord)
42
+ end
43
+ end
44
+ end
@@ -1,40 +1,66 @@
1
- module Proj
2
- class PrimeMeridian
3
- attr_reader :id, :defn
4
-
5
- def self.list
6
- pointer_to_array = FFI::Pointer.new(Api::PJ_PRIME_MERIDIANS, Api.proj_list_prime_meridians)
7
- result = Array.new
8
- 0.step do |i|
9
- prime_meridian_info = Api::PJ_PRIME_MERIDIANS.new(pointer_to_array[i])
10
- break result if prime_meridian_info[:id].nil?
11
- result << self.new(prime_meridian_info[:id], prime_meridian_info[:defn])
12
- end
13
- end
14
-
15
- def self.get(id)
16
- self.list.find {|ellipsoid| ellipsoid.id == id}
17
- end
18
-
19
- def initialize(id, defn)
20
- @id = id
21
- @defn = defn
22
- end
23
-
24
- def <=>(other)
25
- self.id <=> other.id
26
- end
27
-
28
- def ==(other)
29
- self.id == other.id
30
- end
31
-
32
- def to_s
33
- self.id
34
- end
35
-
36
- def inspect
37
- "#<#{self.class} id=\"#{id}\", defn=\"#{defn}\">"
38
- end
39
- end
1
+ module Proj
2
+ class PrimeMeridian < PjObject
3
+ # Returns a list of Prime Meridians that are built into Proj. A more comprehensive
4
+ # list is stored in the Proj database and can be queried via PjObject#create_from_database
5
+ def self.built_in
6
+ pointer_to_array = FFI::Pointer.new(Api::PJ_PRIME_MERIDIANS, Api.proj_list_prime_meridians)
7
+ result = Array.new
8
+ 0.step do |i|
9
+ prime_meridian_info = Api::PJ_PRIME_MERIDIANS.new(pointer_to_array[i])
10
+ break result if prime_meridian_info[:id].nil?
11
+ result << prime_meridian_info
12
+ end
13
+ result
14
+ end
15
+
16
+ # Returns prime meridian parameters
17
+ #
18
+ # @see https://proj.org/development/reference/functions.html#c.proj_prime_meridian_get_parameters
19
+ #
20
+ # @return [Hash] Hash of ellipsoid parameters. Axes are in meters
21
+ def parameters
22
+ @parameters ||= begin
23
+ out_longitude = FFI::MemoryPointer.new(:double)
24
+ out_unit_conv_factor = FFI::MemoryPointer.new(:double)
25
+ out_unit_name = FFI::MemoryPointer.new(:string)
26
+
27
+ result = Api.proj_prime_meridian_get_parameters(self.context, self, out_longitude, out_unit_conv_factor, out_unit_name)
28
+
29
+ if result != 1
30
+ Error.check_object(self)
31
+ end
32
+
33
+ {longitude: out_longitude.read_double,
34
+ unit_conv_factor: out_unit_conv_factor.read_double,
35
+ unit_name: out_unit_name.read_pointer.read_string_to_null}
36
+ end
37
+ end
38
+
39
+ # Returns the longitude of the prime meridian in its native unit
40
+ #
41
+ # @see https://proj.org/development/reference/functions.html#c.proj_prime_meridian_get_parameters
42
+ #
43
+ # @return [Double]
44
+ def longitude
45
+ self.parameters[:longitude]
46
+ end
47
+
48
+ # Returns the conversion factor of the prime meridian longitude unit to radians
49
+ #
50
+ # @see https://proj.org/development/reference/functions.html#c.proj_prime_meridian_get_parameters
51
+ #
52
+ # @return [Double]
53
+ def unit_conv_factor
54
+ self.parameters[:unit_conv_factor]
55
+ end
56
+
57
+ # Returns the unit name
58
+ #
59
+ # @see https://proj.org/development/reference/functions.html#c.proj_prime_meridian_get_parameters
60
+ #
61
+ # @return [String ]
62
+ def unit_name
63
+ self.parameters[:unit_name]
64
+ end
65
+ end
40
66
  end