proj4rb 4.0.0 → 4.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +11 -0
- data/README.rdoc +22 -40
- data/lib/api/api.rb +22 -1
- data/lib/api/api_5_0.rb +7 -1
- data/lib/api/api_6_0.rb +4 -2
- data/lib/api/api_7_0.rb +1 -0
- data/lib/api/api_9_4.rb +6 -0
- data/lib/api/api_experimental.rb +5 -0
- data/lib/proj/area.rb +1 -0
- data/lib/proj/axis_info.rb +1 -1
- data/lib/proj/context.rb +4 -3
- data/lib/proj/conversion.rb +1 -2
- data/lib/proj/coordinate_metadata.rb +38 -0
- data/lib/proj/coordinate_operation_mixin.rb +9 -9
- data/lib/proj/coordinate_system.rb +18 -18
- data/lib/proj/crs.rb +83 -75
- data/lib/proj/crs_info.rb +15 -15
- data/lib/proj/database.rb +3 -3
- data/lib/proj/datum.rb +1 -1
- data/lib/proj/ellipsoid.rb +3 -3
- data/lib/proj/grid.rb +1 -1
- data/lib/proj/operation.rb +2 -2
- data/lib/proj/operation_factory_context.rb +2 -1
- data/lib/proj/parameters.rb +1 -0
- data/lib/proj/pj_object.rb +8 -6
- data/lib/proj/pj_objects.rb +1 -0
- data/lib/proj/prime_meridian.rb +2 -2
- data/lib/proj/projection.rb +1742 -698
- data/lib/proj/session.rb +2 -1
- data/lib/proj/transformation.rb +4 -4
- data/lib/proj/unit.rb +1 -1
- data/lib/proj.rb +11 -7
- data/proj4rb.gemspec +1 -1
- data/test/abstract_test.rb +0 -23
- data/test/conversion_test.rb +11 -11
- data/test/coordinate_system_test.rb +7 -7
- data/test/crs_test.rb +25 -15
- data/test/database_test.rb +60 -28
- data/test/operation_factory_context_test.rb +13 -9
- data/test/pj_object_test.rb +38 -30
- data/test/projection_test.rb +187 -187
- data/test/transformation_test.rb +7 -7
- metadata +5 -3
data/lib/proj/session.rb
CHANGED
@@ -2,6 +2,7 @@ module Proj
|
|
2
2
|
class Session
|
3
3
|
attr_reader :context
|
4
4
|
|
5
|
+
# @!visibility private
|
5
6
|
def self.finalize(context, pointer)
|
6
7
|
proc do
|
7
8
|
Api.proj_insert_object_session_destroy(context, pointer)
|
@@ -24,7 +25,7 @@ module Proj
|
|
24
25
|
# @param authority [String] - Authority name into which the object will be inserted. Must not be nil
|
25
26
|
# @param code [Integer] - Code with which the object will be inserted.Must not be nil
|
26
27
|
# @param numeric_codes [Boolean] - Whether intermediate objects that can be created should use numeric codes (true), or may be alphanumeric (false)
|
27
|
-
# @param allowed_authorities
|
28
|
+
# @param allowed_authorities [Array<String>] - Authorities to which intermediate objects are allowed to refer to. "authority" will be implicitly added to it.
|
28
29
|
#
|
29
30
|
# @return [Strings] - List of insert statements
|
30
31
|
def get_insert_statements(object, authority, code, numeric_codes = false, allowed_authorities = nil)
|
data/lib/proj/transformation.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Proj
|
2
|
-
# Transformations are {
|
2
|
+
# Transformations are {CoordinateOperationMixin coordinate operations} that
|
3
3
|
# convert {Coordinate coordinates} from one {Crs} to another.
|
4
4
|
# In Proj they are defined as operations that exert a change in reference frame
|
5
5
|
# while {Conversion conversions } do not.
|
@@ -19,7 +19,7 @@ module Proj
|
|
19
19
|
# @param method_auth_name [String] Method authority name. Default is nil.
|
20
20
|
# @param method_code [String] Method code. Default is nil.
|
21
21
|
# @param params [Array<Parameter>] Parameter descriptions
|
22
|
-
# @param accuracy [
|
22
|
+
# @param accuracy [Float] Accuracy of the transformation in meters. A negative value means unknown.
|
23
23
|
#
|
24
24
|
# @return [Transformation]
|
25
25
|
def self.create(context, name: nil, auth_name: nil, code: nil,
|
@@ -58,8 +58,8 @@ module Proj
|
|
58
58
|
# @see https://proj.org/development/reference/functions.html#c.proj_create_crs_to_crs_from_pj
|
59
59
|
# @see https://proj.org/development/reference/functions.html#c.proj_create_crs_to_crs proj_create_crs_to_crs
|
60
60
|
#
|
61
|
-
# @param source [Crs
|
62
|
-
# @param target [Crs
|
61
|
+
# @param source [Crs, String] The source Crs. See the Crs documentation for the string format
|
62
|
+
# @param target [Crs, String] The target Crs. See the Crs documentation for the string format
|
63
63
|
# @param area [Area] If an area is specified a more accurate transformation between two given systems can be chosen
|
64
64
|
# @param context [Context]
|
65
65
|
# @param authority [String] Restricts the authority of coordinate operations looked up in the database
|
data/lib/proj/unit.rb
CHANGED
data/lib/proj.rb
CHANGED
@@ -40,6 +40,8 @@ module Proj
|
|
40
40
|
# Returns information about the Proj library
|
41
41
|
#
|
42
42
|
# @see https://proj.org/development/reference/functions.html#c.proj_info proj_info
|
43
|
+
#
|
44
|
+
# @return [PJ_INFO]
|
43
45
|
def self.info
|
44
46
|
Api.proj_info
|
45
47
|
end
|
@@ -47,6 +49,8 @@ module Proj
|
|
47
49
|
# Returns the Proj version
|
48
50
|
#
|
49
51
|
# @see https://proj.org/development/reference/functions.html#c.proj_info proj_info
|
52
|
+
#
|
53
|
+
# @return [String]
|
50
54
|
def self.version
|
51
55
|
self.info[:version]
|
52
56
|
end
|
@@ -55,7 +59,7 @@ module Proj
|
|
55
59
|
#
|
56
60
|
# @see https://proj.org/development/reference/functions.html#c.proj_info proj_info
|
57
61
|
#
|
58
|
-
# @return Array<
|
62
|
+
# @return [Array<String>] List of search paths
|
59
63
|
def self.search_paths
|
60
64
|
self.info[:searchpath].split(";")
|
61
65
|
end
|
@@ -75,9 +79,9 @@ module Proj
|
|
75
79
|
#
|
76
80
|
# see https://proj.org/development/reference/functions.html#c.proj_torad proj_torad
|
77
81
|
#
|
78
|
-
# @param value [
|
82
|
+
# @param value [Float] Value in degrees to convert
|
79
83
|
#
|
80
|
-
# @return [
|
84
|
+
# @return [Float]
|
81
85
|
def self.degrees_to_radians(value)
|
82
86
|
Api.proj_torad(value)
|
83
87
|
end
|
@@ -86,9 +90,9 @@ module Proj
|
|
86
90
|
#
|
87
91
|
# see https://proj.org/development/reference/functions.html#c.proj_todeg proj_todeg
|
88
92
|
#
|
89
|
-
# @param value [
|
93
|
+
# @param value [Float] Value in radians to convert
|
90
94
|
#
|
91
|
-
# @return [
|
95
|
+
# @return [Float]
|
92
96
|
def self.radians_to_degrees(value)
|
93
97
|
Api.proj_todeg(value)
|
94
98
|
end
|
@@ -99,7 +103,7 @@ module Proj
|
|
99
103
|
#
|
100
104
|
# @param value [String] Value to be converted to radians
|
101
105
|
#
|
102
|
-
# @return [
|
106
|
+
# @return [Float]
|
103
107
|
def self.degrees_minutes_seconds_to_radians(value)
|
104
108
|
ptr = FFI::MemoryPointer.new(:string)
|
105
109
|
Api.proj_dmstor(value, ptr)
|
@@ -110,7 +114,7 @@ module Proj
|
|
110
114
|
# @see https://proj.org/development/reference/functions.html#c.proj_rtodms proj_rtodms
|
111
115
|
# @see https://proj.org/development/reference/functions.html#c.proj_rtodms2 proj_rtodms2
|
112
116
|
#
|
113
|
-
# @param value [
|
117
|
+
# @param value [Float] Value to be converted in radians
|
114
118
|
# @param positive [String] Character denoting positive direction, typically 'N' or 'E'. Default 'N'
|
115
119
|
# @param negative [String] Character denoting negative direction, typically 'S' or 'W'. Default 'S'
|
116
120
|
#
|
data/proj4rb.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'proj4rb'
|
3
|
-
spec.version = '4.
|
3
|
+
spec.version = '4.1.1'
|
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
|
data/test/abstract_test.rb
CHANGED
@@ -3,27 +3,4 @@ require 'minitest/autorun'
|
|
3
3
|
require 'proj'
|
4
4
|
|
5
5
|
class AbstractTest < Minitest::Test
|
6
|
-
def self.proj7?
|
7
|
-
Proj::Api::PROJ_VERSION >= Gem::Version.new("7.0.0")
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.proj8?
|
11
|
-
Proj::Api::PROJ_VERSION >= Gem::Version.new("8.0.0")
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.proj9?
|
15
|
-
Proj::Api::PROJ_VERSION >= Gem::Version.new("9.0.0")
|
16
|
-
end
|
17
|
-
|
18
|
-
def proj7?
|
19
|
-
self.class.proj7?
|
20
|
-
end
|
21
|
-
|
22
|
-
def proj8?
|
23
|
-
self.class.proj8?
|
24
|
-
end
|
25
|
-
|
26
|
-
def proj9?
|
27
|
-
self.class.proj9?
|
28
|
-
end
|
29
6
|
end
|
data/test/conversion_test.rb
CHANGED
@@ -31,8 +31,8 @@ class ConversionTest < AbstractTest
|
|
31
31
|
|
32
32
|
inverse = operation.create_inverse
|
33
33
|
proj_string = inverse.to_proj_string(:PJ_PROJ_5, multiline: true, indentation_width: 4, max_line_length: 40)
|
34
|
-
|
35
|
-
expected = if
|
34
|
+
|
35
|
+
expected = if Proj::Api::PROJ_VERSION >= '7.0.0'
|
36
36
|
<<~EOS
|
37
37
|
+proj=pipeline
|
38
38
|
+step +proj=axisswap +order=2,1
|
@@ -127,7 +127,7 @@ class ConversionTest < AbstractTest
|
|
127
127
|
conversion.grid(-1)
|
128
128
|
end
|
129
129
|
|
130
|
-
if
|
130
|
+
if Proj::Api::PROJ_VERSION >= '9.0.0'
|
131
131
|
assert_equal("File not found or invalid", error.to_s)
|
132
132
|
else
|
133
133
|
assert_equal("Unknown error (code 4096)", error.to_s)
|
@@ -141,12 +141,12 @@ class ConversionTest < AbstractTest
|
|
141
141
|
grid = conversion.grid(0)
|
142
142
|
|
143
143
|
assert_equal("ca_nrc_ntv1_can.tif", grid.name)
|
144
|
-
assert_match(/ntv1_can/, grid.full_name)
|
145
144
|
assert(grid.package_name.empty?)
|
146
145
|
assert_equal("https://cdn.proj.org/ca_nrc_ntv1_can.tif", grid.url)
|
147
146
|
assert(grid.downloadable?)
|
148
147
|
assert(grid.open_license?)
|
149
|
-
|
148
|
+
#assert_match(/ntv1_can/, grid.full_name)
|
149
|
+
#assert(grid.available?)
|
150
150
|
end
|
151
151
|
|
152
152
|
def test_xy_dist
|
@@ -275,7 +275,7 @@ class ConversionTest < AbstractTest
|
|
275
275
|
assert_in_delta(1141263.01116045, coordinate_2.y)
|
276
276
|
end
|
277
277
|
|
278
|
-
if
|
278
|
+
if Proj::Api::PROJ_VERSION >= '9.0.0'
|
279
279
|
def test_last_used_operation
|
280
280
|
wkt = <<~EOS
|
281
281
|
CONVERSION["UTM zone 31N",
|
@@ -326,16 +326,16 @@ class ConversionTest < AbstractTest
|
|
326
326
|
context = Proj::Context.new
|
327
327
|
coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LONGITUDE_LATITUDE, context)
|
328
328
|
|
329
|
-
crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984",
|
329
|
+
crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellipsoid_name: "WGS 84",
|
330
330
|
semi_major_meter: 6378137, inv_flattening: 298.257223563,
|
331
|
-
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree",
|
331
|
+
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree", pm_angular_units_conv: 0.0174532925199433,
|
332
332
|
coordinate_system: coordinate_system)
|
333
333
|
|
334
|
-
mercator = Proj::Projection.mercator_variant_a(context,
|
334
|
+
mercator = Proj::Projection.mercator_variant_a(context, center_latitude: 0, center_longitude: 1,
|
335
335
|
scale: 0.99,
|
336
336
|
false_easting: 2, false_northing: 3,
|
337
|
-
|
338
|
-
linear_unit_name: "Metre",
|
337
|
+
angular_unit_name: "Degree", angular_unit_conversion_factor: 0.0174532925199433,
|
338
|
+
linear_unit_name: "Metre", linear_unit_conversion_factor: 1.0)
|
339
339
|
|
340
340
|
cartesian = Proj::CoordinateSystem.create_cartesian_2d(context, :PJ_CART2D_EASTING_NORTHING)
|
341
341
|
|
@@ -8,9 +8,9 @@ class CoordinateSystemTest < AbstractTest
|
|
8
8
|
crs = Proj::Crs.new('EPSG:4326', context)
|
9
9
|
cs = crs.coordinate_system
|
10
10
|
axes = cs.axes
|
11
|
-
cs = Proj::CoordinateSystem.create(cs.
|
11
|
+
cs = Proj::CoordinateSystem.create(cs.cs_type, axes, context)
|
12
12
|
assert_equal(2, cs.axis_count)
|
13
|
-
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.
|
13
|
+
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.cs_type)
|
14
14
|
assert_equal(:PJ_TYPE_UNKNOWN, cs.proj_type)
|
15
15
|
refute(cs.auth_name)
|
16
16
|
refute(cs.id_code)
|
@@ -20,7 +20,7 @@ class CoordinateSystemTest < AbstractTest
|
|
20
20
|
context = Proj::Context.new
|
21
21
|
cs = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LONGITUDE_LATITUDE, context)
|
22
22
|
assert_equal(2, cs.axis_count)
|
23
|
-
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.
|
23
|
+
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.cs_type)
|
24
24
|
assert_equal(:PJ_TYPE_UNKNOWN, cs.proj_type)
|
25
25
|
refute(cs.auth_name)
|
26
26
|
refute(cs.id_code)
|
@@ -30,7 +30,7 @@ class CoordinateSystemTest < AbstractTest
|
|
30
30
|
context = Proj::Context.new
|
31
31
|
cs = Proj::CoordinateSystem.create_ellipsoidal_3d(:PJ_ELLPS3D_LATITUDE_LONGITUDE_HEIGHT, context)
|
32
32
|
assert_equal(3, cs.axis_count)
|
33
|
-
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.
|
33
|
+
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.cs_type)
|
34
34
|
assert_equal(:PJ_TYPE_UNKNOWN, cs.proj_type)
|
35
35
|
|
36
36
|
axis = cs.axis_info(0)
|
@@ -54,7 +54,7 @@ class CoordinateSystemTest < AbstractTest
|
|
54
54
|
horizontal_angular_unit_name: "foo", horizontal_angular_unit_conv_factor: 0.5,
|
55
55
|
vertical_linear_unit_name: "bar", vertical_linear_unit_conv_factor: 0.6)
|
56
56
|
assert_equal(3, cs.axis_count)
|
57
|
-
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.
|
57
|
+
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.cs_type)
|
58
58
|
assert_equal(:PJ_TYPE_UNKNOWN, cs.proj_type)
|
59
59
|
|
60
60
|
axis = cs.axis_info(0)
|
@@ -83,7 +83,7 @@ class CoordinateSystemTest < AbstractTest
|
|
83
83
|
context = Proj::Context.new
|
84
84
|
coordinate_system = Proj::CoordinateSystem.create_cartesian_2d(context, :PJ_CART2D_EASTING_NORTHING)
|
85
85
|
assert_equal(2, coordinate_system.axis_count)
|
86
|
-
assert_equal(:PJ_CS_TYPE_CARTESIAN, coordinate_system.
|
86
|
+
assert_equal(:PJ_CS_TYPE_CARTESIAN, coordinate_system.cs_type)
|
87
87
|
assert_equal(:PJ_TYPE_UNKNOWN, coordinate_system.proj_type)
|
88
88
|
end
|
89
89
|
|
@@ -91,7 +91,7 @@ class CoordinateSystemTest < AbstractTest
|
|
91
91
|
crs = Proj::Crs.new('EPSG:4326')
|
92
92
|
cs = crs.coordinate_system
|
93
93
|
refute(cs.name)
|
94
|
-
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.
|
94
|
+
assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, cs.cs_type)
|
95
95
|
assert_equal(:PJ_TYPE_UNKNOWN, cs.proj_type)
|
96
96
|
assert_equal("EPSG", cs.auth_name)
|
97
97
|
assert_equal("6422", cs.id_code)
|
data/test/crs_test.rb
CHANGED
@@ -505,9 +505,19 @@ class CrsTest < AbstractTest
|
|
505
505
|
|
506
506
|
def test_to_json
|
507
507
|
crs = Proj::Crs.new('EPSG:26915')
|
508
|
+
|
509
|
+
schema_version = case
|
510
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
511
|
+
'v0.7'
|
512
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
513
|
+
'v0.5'
|
514
|
+
else
|
515
|
+
'v0.4'
|
516
|
+
end
|
517
|
+
|
508
518
|
expected = <<~EOS
|
509
519
|
{
|
510
|
-
"$schema": "https://proj.org/schemas/#{
|
520
|
+
"$schema": "https://proj.org/schemas/#{schema_version}/projjson.schema.json",
|
511
521
|
"type": "ProjectedCRS",
|
512
522
|
"name": "NAD83 / UTM zone 15N",
|
513
523
|
"base_crs": {
|
@@ -702,9 +712,9 @@ class CrsTest < AbstractTest
|
|
702
712
|
context = Proj::Context.new
|
703
713
|
coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LATITUDE_LONGITUDE, context)
|
704
714
|
|
705
|
-
crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984",
|
715
|
+
crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellipsoid_name: "WGS 84",
|
706
716
|
semi_major_meter: 6378137, inv_flattening: 298.257223563,
|
707
|
-
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree",
|
717
|
+
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree", pm_angular_units_conv: 0.0174532925199433,
|
708
718
|
coordinate_system: coordinate_system)
|
709
719
|
|
710
720
|
crs_2 = Proj::Crs.create_from_database("EPSG", "4326", :PJ_CATEGORY_CRS)
|
@@ -720,7 +730,7 @@ class CrsTest < AbstractTest
|
|
720
730
|
|
721
731
|
def test_geocentric
|
722
732
|
context = Proj::Context.new
|
723
|
-
crs = Proj::Crs.create_geocentric(context, name: "WGS 84", datum_name: "World Geodetic System 1984",
|
733
|
+
crs = Proj::Crs.create_geocentric(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellipsoid_name: "WGS 84",
|
724
734
|
semi_major_meter: 6378137, inv_flattening: 298.257223563,
|
725
735
|
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0,
|
726
736
|
angular_units: "Degree", angular_units_conv: 0.0174532925199433,
|
@@ -732,7 +742,7 @@ class CrsTest < AbstractTest
|
|
732
742
|
|
733
743
|
def test_geocentric_datum
|
734
744
|
context = Proj::Context.new
|
735
|
-
crs = Proj::Crs.create_geocentric(context, name: "WGS 84", datum_name: "World Geodetic System 1984",
|
745
|
+
crs = Proj::Crs.create_geocentric(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellipsoid_name: "WGS 84",
|
736
746
|
semi_major_meter: 6378137, inv_flattening: 298.257223563,
|
737
747
|
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0,
|
738
748
|
angular_units: "Degree", angular_units_conv: 0.0174532925199433,
|
@@ -791,9 +801,9 @@ class CrsTest < AbstractTest
|
|
791
801
|
context = Proj::Context.new
|
792
802
|
coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LONGITUDE_LATITUDE, context)
|
793
803
|
|
794
|
-
horizontal_crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984",
|
804
|
+
horizontal_crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellipsoid_name: "WGS 84",
|
795
805
|
semi_major_meter: 6378137, inv_flattening: 298.257223563,
|
796
|
-
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree",
|
806
|
+
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree", pm_angular_units_conv: 0.0174532925199433,
|
797
807
|
coordinate_system: coordinate_system)
|
798
808
|
|
799
809
|
vertical_crs = Proj::Crs.create_vertical(context, name: "myVertCRS",
|
@@ -822,7 +832,7 @@ class CrsTest < AbstractTest
|
|
822
832
|
crs = Proj::Crs.create("EPSG:4326", context)
|
823
833
|
|
824
834
|
conversion = Proj::Projection.pole_rotation_grib_convention(context, south_pole_lat_in_unrotated_crs: 2, south_pole_long_in_unrotated_crs: 3,
|
825
|
-
axis_rotation: 4,
|
835
|
+
axis_rotation: 4, angular_unit_name: "Degree", angular_unit_conversion_factor: 0.0174532925199433)
|
826
836
|
|
827
837
|
coordinate_system = crs.coordinate_system
|
828
838
|
|
@@ -860,9 +870,9 @@ class CrsTest < AbstractTest
|
|
860
870
|
|
861
871
|
coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LONGITUDE_LATITUDE, context)
|
862
872
|
crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984",
|
863
|
-
|
873
|
+
ellipsoid_name: "WGS 84", semi_major_meter: 6378137, inv_flattening: 298.257223563,
|
864
874
|
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0,
|
865
|
-
pm_angular_units: "Degree",
|
875
|
+
pm_angular_units: "Degree", pm_angular_units_conv: 0.0174532925199433,
|
866
876
|
coordinate_system: coordinate_system)
|
867
877
|
|
868
878
|
cartesian = Proj::CoordinateSystem.create_cartesian_2d(context, :PJ_CART2D_EASTING_NORTHING)
|
@@ -922,7 +932,7 @@ class CrsTest < AbstractTest
|
|
922
932
|
crses = Proj::Crs.query_geodetic_from_datum(context, datum_auth_name: "EPSG", datum_code: "6326")
|
923
933
|
|
924
934
|
expected = case
|
925
|
-
when
|
935
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
926
936
|
12
|
927
937
|
else
|
928
938
|
11
|
@@ -940,9 +950,9 @@ class CrsTest < AbstractTest
|
|
940
950
|
context = Proj::Context.new
|
941
951
|
coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LATITUDE_LONGITUDE, context)
|
942
952
|
|
943
|
-
crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984",
|
953
|
+
crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellipsoid_name: "WGS 84",
|
944
954
|
semi_major_meter: 6378137, inv_flattening: 298.257223563,
|
945
|
-
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree",
|
955
|
+
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree", pm_angular_units_conv: 0.0174532925199433,
|
946
956
|
coordinate_system: coordinate_system)
|
947
957
|
assert_equal("WGS 84", crs.name)
|
948
958
|
|
@@ -955,9 +965,9 @@ class CrsTest < AbstractTest
|
|
955
965
|
context = Proj::Context.new
|
956
966
|
coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LATITUDE_LONGITUDE, context)
|
957
967
|
|
958
|
-
crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984",
|
968
|
+
crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellipsoid_name: "WGS 84",
|
959
969
|
semi_major_meter: 6378137, inv_flattening: 298.257223563,
|
960
|
-
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree",
|
970
|
+
prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree", pm_angular_units_conv: 0.0174532925199433,
|
961
971
|
coordinate_system: coordinate_system)
|
962
972
|
refute(crs.auth)
|
963
973
|
|
data/test/database_test.rb
CHANGED
@@ -49,9 +49,15 @@ class DatabaseTest < AbstractTest
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def test_codes
|
52
|
-
|
52
|
+
if Proj::Api::PROJ_VERSION >= '9.3.0'
|
53
|
+
types_with_no_codes = [:PJ_TYPE_TEMPORAL_CRS, :PJ_TYPE_BOUND_CRS, :PJ_TYPE_UNKNOWN, :PJ_TYPE_ENGINEERING_CRS,
|
53
54
|
:PJ_TYPE_TEMPORAL_DATUM, :PJ_TYPE_ENGINEERING_DATUM, :PJ_TYPE_PARAMETRIC_DATUM,
|
54
|
-
:PJ_TYPE_OTHER_COORDINATE_OPERATION]
|
55
|
+
:PJ_TYPE_OTHER_COORDINATE_OPERATION, :PJ_TYPE_DERIVED_PROJECTED_CRS, :PJ_TYPE_COORDINATE_METADATA]
|
56
|
+
else
|
57
|
+
types_with_no_codes = [:PJ_TYPE_TEMPORAL_CRS, :PJ_TYPE_BOUND_CRS, :PJ_TYPE_UNKNOWN, :PJ_TYPE_ENGINEERING_CRS,
|
58
|
+
:PJ_TYPE_TEMPORAL_DATUM, :PJ_TYPE_ENGINEERING_DATUM, :PJ_TYPE_PARAMETRIC_DATUM,
|
59
|
+
:PJ_TYPE_OTHER_COORDINATE_OPERATION]
|
60
|
+
end
|
55
61
|
|
56
62
|
database = Proj::Database.new(Proj::Context.current)
|
57
63
|
|
@@ -97,10 +103,12 @@ class DatabaseTest < AbstractTest
|
|
97
103
|
crs_infos = database.crs_info
|
98
104
|
|
99
105
|
expected = case
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
106
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
107
|
+
13434
|
108
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
109
|
+
13107
|
110
|
+
else
|
111
|
+
12609
|
104
112
|
end
|
105
113
|
assert_equal(expected, crs_infos.count)
|
106
114
|
|
@@ -108,7 +116,7 @@ class DatabaseTest < AbstractTest
|
|
108
116
|
assert_equal("EPSG", crs_info.auth_name)
|
109
117
|
assert_equal("2000", crs_info.code)
|
110
118
|
assert_equal("Anguilla 1957 / British West Indies Grid", crs_info.name)
|
111
|
-
assert_equal(:PJ_TYPE_PROJECTED_CRS, crs_info.
|
119
|
+
assert_equal(:PJ_TYPE_PROJECTED_CRS, crs_info.crs_type)
|
112
120
|
refute(crs_info.deprecated)
|
113
121
|
assert(crs_info.bbox_valid)
|
114
122
|
assert_equal(-63.22, crs_info.west_lon_degree)
|
@@ -125,10 +133,12 @@ class DatabaseTest < AbstractTest
|
|
125
133
|
crs_infos = database.crs_info("EPSG")
|
126
134
|
|
127
135
|
expected = case
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
136
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
137
|
+
7477
|
138
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
139
|
+
7251
|
140
|
+
else
|
141
|
+
7056
|
132
142
|
end
|
133
143
|
assert_equal(expected, crs_infos.count)
|
134
144
|
end
|
@@ -140,10 +150,12 @@ class DatabaseTest < AbstractTest
|
|
140
150
|
crs_infos = database.crs_info("EPSG", params)
|
141
151
|
|
142
152
|
expected = case
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
153
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
154
|
+
997
|
155
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
156
|
+
943
|
157
|
+
else
|
158
|
+
930
|
147
159
|
end
|
148
160
|
|
149
161
|
assert_equal(expected, crs_infos.count)
|
@@ -156,10 +168,12 @@ class DatabaseTest < AbstractTest
|
|
156
168
|
crs_infos = database.crs_info("EPSG", params)
|
157
169
|
|
158
170
|
expected = case
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
171
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
172
|
+
5839
|
173
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
174
|
+
5689
|
175
|
+
else
|
176
|
+
5534
|
163
177
|
end
|
164
178
|
|
165
179
|
assert_equal(expected, crs_infos.count)
|
@@ -176,7 +190,15 @@ class DatabaseTest < AbstractTest
|
|
176
190
|
params.north_lat_degree = 49.1
|
177
191
|
|
178
192
|
crs_infos = database.crs_info("EPSG", params)
|
179
|
-
|
193
|
+
|
194
|
+
expected = case
|
195
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
196
|
+
37
|
197
|
+
else
|
198
|
+
35
|
199
|
+
end
|
200
|
+
|
201
|
+
assert_equal(expected, crs_infos.count)
|
180
202
|
end
|
181
203
|
|
182
204
|
def test_crs_info_bounds_exclusive
|
@@ -191,7 +213,15 @@ class DatabaseTest < AbstractTest
|
|
191
213
|
params.crs_area_of_use_contains_bbox = 0
|
192
214
|
|
193
215
|
crs_infos = database.crs_info("EPSG", params)
|
194
|
-
|
216
|
+
|
217
|
+
expected = case
|
218
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
219
|
+
40
|
220
|
+
else
|
221
|
+
38
|
222
|
+
end
|
223
|
+
|
224
|
+
assert_equal(expected, crs_infos.count)
|
195
225
|
end
|
196
226
|
|
197
227
|
def test_crs_info_celestial_body
|
@@ -201,10 +231,12 @@ class DatabaseTest < AbstractTest
|
|
201
231
|
crs_infos = database.crs_info("EPSG", params)
|
202
232
|
|
203
233
|
expected = case
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
234
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
235
|
+
6951
|
236
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
237
|
+
6723
|
238
|
+
else
|
239
|
+
6532
|
208
240
|
end
|
209
241
|
|
210
242
|
assert_equal(expected, crs_infos.count)
|
@@ -237,7 +269,7 @@ class DatabaseTest < AbstractTest
|
|
237
269
|
bodies = database.celestial_bodies
|
238
270
|
|
239
271
|
expected = case
|
240
|
-
when
|
272
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
241
273
|
176
|
242
274
|
else
|
243
275
|
170
|
@@ -255,7 +287,7 @@ class DatabaseTest < AbstractTest
|
|
255
287
|
bodies = database.celestial_bodies('ESRI')
|
256
288
|
|
257
289
|
expected = case
|
258
|
-
when
|
290
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
259
291
|
78
|
260
292
|
else
|
261
293
|
72
|
@@ -349,7 +381,7 @@ class DatabaseTest < AbstractTest
|
|
349
381
|
refute(name)
|
350
382
|
end
|
351
383
|
|
352
|
-
if
|
384
|
+
if Proj::Api::PROJ_VERSION >= '7.0.0'
|
353
385
|
# This test causes a segmentation fault on proj6
|
354
386
|
def test_metadata_invalid
|
355
387
|
database = Proj::Database.new(Proj::Context.current)
|
@@ -51,20 +51,24 @@ class OperationFactoryContextTest < AbstractTest
|
|
51
51
|
index = operations.suggested_operation(:PJ_FWD, coord)
|
52
52
|
|
53
53
|
expected = case
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
55
|
+
3
|
56
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
57
|
+
2
|
58
|
+
else
|
59
|
+
7
|
58
60
|
end
|
59
61
|
assert_equal(expected, index)
|
60
62
|
|
61
63
|
operation = operations[index]
|
62
64
|
|
63
65
|
expected = case
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
when Proj::Api::PROJ_VERSION >= '9.3.0'
|
67
|
+
"NAD27 to NAD83 (7)"
|
68
|
+
when Proj::Api::PROJ_VERSION >= '9.0.0'
|
69
|
+
"NAD27 to NAD83 (1)"
|
70
|
+
else
|
71
|
+
"Ballpark geographic offset from NAD27 to NAD83"
|
68
72
|
end
|
69
73
|
|
70
74
|
assert_equal(expected, operation.name)
|
@@ -191,7 +195,7 @@ class OperationFactoryContextTest < AbstractTest
|
|
191
195
|
assert_equal(5, operations.count)
|
192
196
|
end
|
193
197
|
|
194
|
-
if
|
198
|
+
if Proj::Api::PROJ_VERSION >= '9.0.0'
|
195
199
|
def test_set_area_of_interest_name
|
196
200
|
context = Proj::Context.new
|
197
201
|
factory_context = Proj::OperationFactoryContext.new(context)
|