proj4rb 2.2.1 → 2.2.2
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.
- checksums.yaml +4 -4
- data/ChangeLog +66 -61
- data/Gemfile +4 -4
- data/Rakefile +27 -27
- data/lib/api/api.rb +110 -83
- data/lib/api/api_4_9.rb +30 -30
- data/lib/api/api_5_0.rb +300 -300
- data/lib/api/api_5_1.rb +6 -6
- data/lib/api/api_5_2.rb +4 -4
- data/lib/api/api_6_0.rb +41 -42
- data/lib/api/api_6_1.rb +4 -4
- data/lib/api/api_6_2.rb +6 -5
- data/lib/area.rb +32 -32
- data/lib/config.rb +69 -69
- data/lib/context.rb +102 -102
- data/lib/coordinate.rb +197 -197
- data/lib/crs.rb +204 -204
- data/lib/ellipsoid.rb +41 -41
- data/lib/error.rb +17 -17
- data/lib/operation.rb +42 -42
- data/lib/pj_object.rb +80 -80
- data/lib/point.rb +72 -72
- data/lib/prime_meridian.rb +39 -39
- data/lib/proj.rb +30 -30
- data/lib/projection.rb +206 -206
- data/lib/transformation.rb +60 -60
- data/lib/unit.rb +53 -53
- data/proj4rb.gemspec +32 -32
- data/test/abstract_test.rb +7 -7
- data/test/context_test.rb +81 -81
- data/test/coordinate_test.rb +34 -34
- data/test/crs_test.rb +372 -372
- data/test/ellipsoid_test.rb +34 -34
- data/test/operation_test.rb +29 -29
- data/test/prime_meridians_test.rb +33 -33
- data/test/proj_test.rb +16 -16
- data/test/projection_test.rb +223 -223
- data/test/transformation_test.rb +67 -67
- data/test/unit_test.rb +47 -47
- metadata +2 -2
data/lib/transformation.rb
CHANGED
@@ -1,61 +1,61 @@
|
|
1
|
-
module Proj
|
2
|
-
# Transformation objects convert {Coordinate Coordinates} from one {Crs} to another.
|
3
|
-
class Transformation < PjObject
|
4
|
-
# Transforms a {Coordinate} from the source {Crs} to the target {Crs}. Coordinates should be expressed in
|
5
|
-
# the units and axis order of the definition of the source CRS. The returned transformed coordinate will
|
6
|
-
# be in the units and axis order of the definition of the target CRS.
|
7
|
-
#
|
8
|
-
# For most geographic Crses, the units will be in degrees. For geographic CRS defined by the EPSG authority,
|
9
|
-
# the order of coordinates is latitude first, longitude second. When using a PROJ initialization string,
|
10
|
-
# on contrary, the order will be longitude first, latitude second.
|
11
|
-
#
|
12
|
-
# For projected CRS, the units may vary (metre, us-foot, etc..).
|
13
|
-
#
|
14
|
-
# For projected CRS defined by the EPSG authority, and with EAST / NORTH directions, the axis order might be
|
15
|
-
# easting first, northing second, or the reverse. When using a PROJ string, the order will be
|
16
|
-
# easting first, northing second, except if the +axis parameter modifies it.
|
17
|
-
#
|
18
|
-
# @param source [Crs | String] - The source Crs. See the Crs documentation for the string format
|
19
|
-
# @param target [Crs | String] - The target Crs. See the Crs documentation for the string format
|
20
|
-
# @param context [Context]
|
21
|
-
def initialize(source, target, context=nil)
|
22
|
-
pointer = if source.is_a?(Crs) && target.is_a?(Crs)
|
23
|
-
if Api.method_defined?(:proj_create_crs_to_crs_from_pj)
|
24
|
-
Api.proj_create_crs_to_crs_from_pj(context, source, target, nil, nil)
|
25
|
-
else
|
26
|
-
Api.proj_create_crs_to_crs(context, source.definition, target.definition, nil)
|
27
|
-
end
|
28
|
-
else
|
29
|
-
Api.proj_create_crs_to_crs(context, source, target, nil)
|
30
|
-
end
|
31
|
-
|
32
|
-
if pointer.null?
|
33
|
-
Error.check
|
34
|
-
end
|
35
|
-
|
36
|
-
super(pointer, context)
|
37
|
-
end
|
38
|
-
|
39
|
-
# Transforms a {Coordinate} from the source {Crs} to the target {Crs}. Coordinates should be expressed in
|
40
|
-
# the units and axis order of the definition of the source CRS. The returned transformed coordinate will
|
41
|
-
# be in the units and axis order of the definition of the target CRS.
|
42
|
-
#
|
43
|
-
# @param coord [Coordinate]
|
44
|
-
# @return [Coordinate]
|
45
|
-
def forward(coord)
|
46
|
-
struct = Api.proj_trans(self, :PJ_FWD, coord)
|
47
|
-
Coordinate.from_coord(struct)
|
48
|
-
end
|
49
|
-
|
50
|
-
# Transforms a {Coordinate} from the target {Crs} to the source {Crs}. Coordinates should be expressed in
|
51
|
-
# the units and axis order of the definition of the source CRS. The returned transformed coordinate will
|
52
|
-
# be in the units and axis order of the definition of the target CRS.
|
53
|
-
#
|
54
|
-
# @param coord [Coordinate]
|
55
|
-
# @return [Coordinate]
|
56
|
-
def inverse(coord)
|
57
|
-
struct = Api.proj_trans(self, :PJ_INV, coord)
|
58
|
-
Coordinate.from_coord(struct)
|
59
|
-
end
|
60
|
-
end
|
1
|
+
module Proj
|
2
|
+
# Transformation objects convert {Coordinate Coordinates} from one {Crs} to another.
|
3
|
+
class Transformation < PjObject
|
4
|
+
# Transforms a {Coordinate} from the source {Crs} to the target {Crs}. Coordinates should be expressed in
|
5
|
+
# the units and axis order of the definition of the source CRS. The returned transformed coordinate will
|
6
|
+
# be in the units and axis order of the definition of the target CRS.
|
7
|
+
#
|
8
|
+
# For most geographic Crses, the units will be in degrees. For geographic CRS defined by the EPSG authority,
|
9
|
+
# the order of coordinates is latitude first, longitude second. When using a PROJ initialization string,
|
10
|
+
# on contrary, the order will be longitude first, latitude second.
|
11
|
+
#
|
12
|
+
# For projected CRS, the units may vary (metre, us-foot, etc..).
|
13
|
+
#
|
14
|
+
# For projected CRS defined by the EPSG authority, and with EAST / NORTH directions, the axis order might be
|
15
|
+
# easting first, northing second, or the reverse. When using a PROJ string, the order will be
|
16
|
+
# easting first, northing second, except if the +axis parameter modifies it.
|
17
|
+
#
|
18
|
+
# @param source [Crs | String] - The source Crs. See the Crs documentation for the string format
|
19
|
+
# @param target [Crs | String] - The target Crs. See the Crs documentation for the string format
|
20
|
+
# @param context [Context]
|
21
|
+
def initialize(source, target, context=nil)
|
22
|
+
pointer = if source.is_a?(Crs) && target.is_a?(Crs)
|
23
|
+
if Api.method_defined?(:proj_create_crs_to_crs_from_pj)
|
24
|
+
Api.proj_create_crs_to_crs_from_pj(context, source, target, nil, nil)
|
25
|
+
else
|
26
|
+
Api.proj_create_crs_to_crs(context, source.definition, target.definition, nil)
|
27
|
+
end
|
28
|
+
else
|
29
|
+
Api.proj_create_crs_to_crs(context, source, target, nil)
|
30
|
+
end
|
31
|
+
|
32
|
+
if pointer.null?
|
33
|
+
Error.check
|
34
|
+
end
|
35
|
+
|
36
|
+
super(pointer, context)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Transforms a {Coordinate} from the source {Crs} to the target {Crs}. Coordinates should be expressed in
|
40
|
+
# the units and axis order of the definition of the source CRS. The returned transformed coordinate will
|
41
|
+
# be in the units and axis order of the definition of the target CRS.
|
42
|
+
#
|
43
|
+
# @param coord [Coordinate]
|
44
|
+
# @return [Coordinate]
|
45
|
+
def forward(coord)
|
46
|
+
struct = Api.proj_trans(self, :PJ_FWD, coord)
|
47
|
+
Coordinate.from_coord(struct)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Transforms a {Coordinate} from the target {Crs} to the source {Crs}. Coordinates should be expressed in
|
51
|
+
# the units and axis order of the definition of the source CRS. The returned transformed coordinate will
|
52
|
+
# be in the units and axis order of the definition of the target CRS.
|
53
|
+
#
|
54
|
+
# @param coord [Coordinate]
|
55
|
+
# @return [Coordinate]
|
56
|
+
def inverse(coord)
|
57
|
+
struct = Api.proj_trans(self, :PJ_INV, coord)
|
58
|
+
Coordinate.from_coord(struct)
|
59
|
+
end
|
60
|
+
end
|
61
61
|
end
|
data/lib/unit.rb
CHANGED
@@ -1,54 +1,54 @@
|
|
1
|
-
module Proj
|
2
|
-
class Unit
|
3
|
-
attr_reader :id, :to_meter, :factor, :name
|
4
|
-
|
5
|
-
def self.list
|
6
|
-
# First get linear units
|
7
|
-
pointer_to_array = FFI::Pointer.new(Api::PJ_UNITS, Api.proj_list_units)
|
8
|
-
result = Array.new
|
9
|
-
0.step do |i|
|
10
|
-
ellipse_info = Api::PJ_UNITS.new(pointer_to_array[i])
|
11
|
-
break if ellipse_info[:id].nil?
|
12
|
-
result << self.new(ellipse_info[:id], ellipse_info[:to_meter], ellipse_info[:factor], ellipse_info[:name])
|
13
|
-
end
|
14
|
-
|
15
|
-
# Now get angular linear units
|
16
|
-
if Api.method_defined?(:proj_list_angular_units)
|
17
|
-
pointer_to_array = FFI::Pointer.new(Api::PJ_UNITS, Api.proj_list_angular_units)
|
18
|
-
0.step do |i|
|
19
|
-
ellipse_info = Api::PJ_UNITS.new(pointer_to_array[i])
|
20
|
-
break result if ellipse_info[:id].nil?
|
21
|
-
result << self.new(ellipse_info[:id], ellipse_info[:to_meter], ellipse_info[:factor], ellipse_info[:name])
|
22
|
-
end
|
23
|
-
end
|
24
|
-
result
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.get(id)
|
28
|
-
self.list.find {|ellipsoid| ellipsoid.id == id}
|
29
|
-
end
|
30
|
-
|
31
|
-
def initialize(id, to_meter, factor, name)
|
32
|
-
@id = id
|
33
|
-
@to_meter = to_meter
|
34
|
-
@factor = factor
|
35
|
-
@name = name
|
36
|
-
end
|
37
|
-
|
38
|
-
def <=>(other)
|
39
|
-
self.id <=> other.id
|
40
|
-
end
|
41
|
-
|
42
|
-
def ==(other)
|
43
|
-
self.id == other.id
|
44
|
-
end
|
45
|
-
|
46
|
-
def to_s
|
47
|
-
self.id
|
48
|
-
end
|
49
|
-
|
50
|
-
def inspect
|
51
|
-
"#<#{self.class} id=\"#{id}\", to_meter=\"#{to_meter}\", factor=\"#{factor}\", name=\"#{name}\">"
|
52
|
-
end
|
53
|
-
end
|
1
|
+
module Proj
|
2
|
+
class Unit
|
3
|
+
attr_reader :id, :to_meter, :factor, :name
|
4
|
+
|
5
|
+
def self.list
|
6
|
+
# First get linear units
|
7
|
+
pointer_to_array = FFI::Pointer.new(Api::PJ_UNITS, Api.proj_list_units)
|
8
|
+
result = Array.new
|
9
|
+
0.step do |i|
|
10
|
+
ellipse_info = Api::PJ_UNITS.new(pointer_to_array[i])
|
11
|
+
break if ellipse_info[:id].nil?
|
12
|
+
result << self.new(ellipse_info[:id], ellipse_info[:to_meter], ellipse_info[:factor], ellipse_info[:name])
|
13
|
+
end
|
14
|
+
|
15
|
+
# Now get angular linear units
|
16
|
+
if Api.method_defined?(:proj_list_angular_units)
|
17
|
+
pointer_to_array = FFI::Pointer.new(Api::PJ_UNITS, Api.proj_list_angular_units)
|
18
|
+
0.step do |i|
|
19
|
+
ellipse_info = Api::PJ_UNITS.new(pointer_to_array[i])
|
20
|
+
break result if ellipse_info[:id].nil?
|
21
|
+
result << self.new(ellipse_info[:id], ellipse_info[:to_meter], ellipse_info[:factor], ellipse_info[:name])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
result
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.get(id)
|
28
|
+
self.list.find {|ellipsoid| ellipsoid.id == id}
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize(id, to_meter, factor, name)
|
32
|
+
@id = id
|
33
|
+
@to_meter = to_meter
|
34
|
+
@factor = factor
|
35
|
+
@name = name
|
36
|
+
end
|
37
|
+
|
38
|
+
def <=>(other)
|
39
|
+
self.id <=> other.id
|
40
|
+
end
|
41
|
+
|
42
|
+
def ==(other)
|
43
|
+
self.id == other.id
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
self.id
|
48
|
+
end
|
49
|
+
|
50
|
+
def inspect
|
51
|
+
"#<#{self.class} id=\"#{id}\", to_meter=\"#{to_meter}\", factor=\"#{factor}\", name=\"#{name}\">"
|
52
|
+
end
|
53
|
+
end
|
54
54
|
end
|
data/proj4rb.gemspec
CHANGED
@@ -1,33 +1,33 @@
|
|
1
|
-
Gem::Specification.new do |spec|
|
2
|
-
spec.name = 'proj4rb'
|
3
|
-
spec.version = '2.2.
|
4
|
-
spec.summary = 'Ruby bindings for the Proj.4 Carthographic Projection library'
|
5
|
-
spec.description = <<-EOF
|
6
|
-
Proj4rb is a ruby binding for the Proj.4 Carthographic Projection library, that supports conversions between a very large number of geographic coordinate systems and datumspec.
|
7
|
-
EOF
|
8
|
-
spec.platform = Gem::Platform::RUBY
|
9
|
-
spec.authors = ['Guilhem Vellut', 'Jochen Topf', 'Charlie Savage']
|
10
|
-
spec.homepage = 'https://github.com/cfis/proj4rb'
|
11
|
-
spec.required_ruby_version = '>= 2.4.1'
|
12
|
-
spec.license = 'MIT'
|
13
|
-
|
14
|
-
spec.requirements << 'Proj (Proj4) Library'
|
15
|
-
spec.require_path = 'lib'
|
16
|
-
spec.files = Dir['ChangeLog',
|
17
|
-
'Gemfile',
|
18
|
-
'MIT-LICENSE',
|
19
|
-
'proj4rb.gemspec',
|
20
|
-
'Rakefile',
|
21
|
-
'README.rdoc',
|
22
|
-
'lib/**/*.rb',
|
23
|
-
'test/*.rb']
|
24
|
-
|
25
|
-
spec.test_files = Dir["test/test_*.rb"]
|
26
|
-
|
27
|
-
spec.add_dependency "ffi"
|
28
|
-
|
29
|
-
spec.add_development_dependency('bundler')
|
30
|
-
spec.add_development_dependency('rake')
|
31
|
-
spec.add_development_dependency('minitest')
|
32
|
-
spec.add_development_dependency('yard')
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = 'proj4rb'
|
3
|
+
spec.version = '2.2.2'
|
4
|
+
spec.summary = 'Ruby bindings for the Proj.4 Carthographic Projection library'
|
5
|
+
spec.description = <<-EOF
|
6
|
+
Proj4rb is a ruby binding for the Proj.4 Carthographic Projection library, that supports conversions between a very large number of geographic coordinate systems and datumspec.
|
7
|
+
EOF
|
8
|
+
spec.platform = Gem::Platform::RUBY
|
9
|
+
spec.authors = ['Guilhem Vellut', 'Jochen Topf', 'Charlie Savage']
|
10
|
+
spec.homepage = 'https://github.com/cfis/proj4rb'
|
11
|
+
spec.required_ruby_version = '>= 2.4.1'
|
12
|
+
spec.license = 'MIT'
|
13
|
+
|
14
|
+
spec.requirements << 'Proj (Proj4) Library'
|
15
|
+
spec.require_path = 'lib'
|
16
|
+
spec.files = Dir['ChangeLog',
|
17
|
+
'Gemfile',
|
18
|
+
'MIT-LICENSE',
|
19
|
+
'proj4rb.gemspec',
|
20
|
+
'Rakefile',
|
21
|
+
'README.rdoc',
|
22
|
+
'lib/**/*.rb',
|
23
|
+
'test/*.rb']
|
24
|
+
|
25
|
+
spec.test_files = Dir["test/test_*.rb"]
|
26
|
+
|
27
|
+
spec.add_dependency "ffi"
|
28
|
+
|
29
|
+
spec.add_development_dependency('bundler')
|
30
|
+
spec.add_development_dependency('rake')
|
31
|
+
spec.add_development_dependency('minitest')
|
32
|
+
spec.add_development_dependency('yard')
|
33
33
|
end
|
data/test/abstract_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require 'bundler/setup'
|
2
|
-
require 'minitest/autorun'
|
3
|
-
require 'proj'
|
4
|
-
|
5
|
-
class AbstractTest < Minitest::Test
|
6
|
-
end
|
7
|
-
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'proj'
|
4
|
+
|
5
|
+
class AbstractTest < Minitest::Test
|
6
|
+
end
|
7
|
+
|
data/test/context_test.rb
CHANGED
@@ -1,82 +1,82 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require_relative './abstract_test'
|
4
|
-
|
5
|
-
class ContextTest < AbstractTest
|
6
|
-
def test_create
|
7
|
-
context = Proj::Context.new
|
8
|
-
assert(context.to_ptr)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_finalize
|
12
|
-
500.times do
|
13
|
-
context = Proj::Context.new
|
14
|
-
assert(context.to_ptr)
|
15
|
-
GC.start
|
16
|
-
end
|
17
|
-
assert(true)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_one_per_thread
|
21
|
-
context_1 = Proj::Context.current
|
22
|
-
context_2 = Proj::Context.current
|
23
|
-
assert_same(context_1, context_2)
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_database_path
|
27
|
-
refute_nil(Proj::Context.current.database_path)
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_log_level
|
31
|
-
assert_equal(:PJ_LOG_NONE, Proj::Context.current.log_level)
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_set_log_level
|
35
|
-
context = Proj::Context.new
|
36
|
-
context.log_level = :PJ_LOG_ERROR
|
37
|
-
assert_equal(:PJ_LOG_ERROR, context.log_level)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_invalid_database_path
|
41
|
-
path = '/wrong'
|
42
|
-
error = assert_raises(Proj::Error) do
|
43
|
-
Proj::Context.current.database_path = path
|
44
|
-
end
|
45
|
-
# TODO - if you run this test on its own you get a useful error message, if you run all tests
|
46
|
-
# at once you get a useless error message. Not sure what is causing the difference
|
47
|
-
assert_match(/No such file or directory|generic error of unknown origin/, error.to_s)
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_set_log_function
|
51
|
-
context = Proj::Context.new
|
52
|
-
called = false
|
53
|
-
|
54
|
-
data = FFI::MemoryPointer.new(:int)
|
55
|
-
data.write_int(5)
|
56
|
-
|
57
|
-
context.set_log_function(data) do |pointer, int, message|
|
58
|
-
called = true
|
59
|
-
refute(pointer.null?)
|
60
|
-
assert_equal(5, pointer.read_int)
|
61
|
-
assert_equal(1, int)
|
62
|
-
assert_equal('proj_context_set_database_path: Open of /wrong failed', message)
|
63
|
-
end
|
64
|
-
|
65
|
-
begin
|
66
|
-
context.database_path = '/wrong'
|
67
|
-
rescue
|
68
|
-
end
|
69
|
-
|
70
|
-
assert(called)
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_use_proj4_init_rules
|
74
|
-
refute(Proj::Context.current.use_proj4_init_rules)
|
75
|
-
|
76
|
-
Proj::Context.current.use_proj4_init_rules = true
|
77
|
-
assert(Proj::Context.current.use_proj4_init_rules)
|
78
|
-
|
79
|
-
Proj::Context.current.use_proj4_init_rules = false
|
80
|
-
refute(Proj::Context.current.use_proj4_init_rules)
|
81
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative './abstract_test'
|
4
|
+
|
5
|
+
class ContextTest < AbstractTest
|
6
|
+
def test_create
|
7
|
+
context = Proj::Context.new
|
8
|
+
assert(context.to_ptr)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_finalize
|
12
|
+
500.times do
|
13
|
+
context = Proj::Context.new
|
14
|
+
assert(context.to_ptr)
|
15
|
+
GC.start
|
16
|
+
end
|
17
|
+
assert(true)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_one_per_thread
|
21
|
+
context_1 = Proj::Context.current
|
22
|
+
context_2 = Proj::Context.current
|
23
|
+
assert_same(context_1, context_2)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_database_path
|
27
|
+
refute_nil(Proj::Context.current.database_path)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_log_level
|
31
|
+
assert_equal(:PJ_LOG_NONE, Proj::Context.current.log_level)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_set_log_level
|
35
|
+
context = Proj::Context.new
|
36
|
+
context.log_level = :PJ_LOG_ERROR
|
37
|
+
assert_equal(:PJ_LOG_ERROR, context.log_level)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_invalid_database_path
|
41
|
+
path = '/wrong'
|
42
|
+
error = assert_raises(Proj::Error) do
|
43
|
+
Proj::Context.current.database_path = path
|
44
|
+
end
|
45
|
+
# TODO - if you run this test on its own you get a useful error message, if you run all tests
|
46
|
+
# at once you get a useless error message. Not sure what is causing the difference
|
47
|
+
assert_match(/No such file or directory|generic error of unknown origin/, error.to_s)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_set_log_function
|
51
|
+
context = Proj::Context.new
|
52
|
+
called = false
|
53
|
+
|
54
|
+
data = FFI::MemoryPointer.new(:int)
|
55
|
+
data.write_int(5)
|
56
|
+
|
57
|
+
context.set_log_function(data) do |pointer, int, message|
|
58
|
+
called = true
|
59
|
+
refute(pointer.null?)
|
60
|
+
assert_equal(5, pointer.read_int)
|
61
|
+
assert_equal(1, int)
|
62
|
+
assert_equal('proj_context_set_database_path: Open of /wrong failed', message)
|
63
|
+
end
|
64
|
+
|
65
|
+
begin
|
66
|
+
context.database_path = '/wrong'
|
67
|
+
rescue
|
68
|
+
end
|
69
|
+
|
70
|
+
assert(called)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_use_proj4_init_rules
|
74
|
+
refute(Proj::Context.current.use_proj4_init_rules)
|
75
|
+
|
76
|
+
Proj::Context.current.use_proj4_init_rules = true
|
77
|
+
assert(Proj::Context.current.use_proj4_init_rules)
|
78
|
+
|
79
|
+
Proj::Context.current.use_proj4_init_rules = false
|
80
|
+
refute(Proj::Context.current.use_proj4_init_rules)
|
81
|
+
end
|
82
82
|
end
|