ffi-proj4 0.1.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.
@@ -0,0 +1,108 @@
1
+
2
+ $: << File.dirname(__FILE__)
3
+ require 'test_helper'
4
+
5
+ class TransformationTests < MiniTest::Unit::TestCase
6
+ include TestHelper
7
+
8
+ def setup
9
+ @proj_wgs84 = Proj4::Projection.new(["init=epsg:4326"])
10
+ @proj_gk = Proj4::Projection.new(["init=epsg:31467"])
11
+ @proj_merc = Proj4::Projection.new(["proj=merc"])
12
+ @lon = 8.429263044355672
13
+ @lat = 48.98963932449638
14
+ @z = 46.318651656620204
15
+ @rw = 3458305
16
+ @hw = 5428192
17
+ @zw = -51.49743285309523
18
+ end
19
+
20
+ def test_gk_to_wgs84
21
+ from = Proj4::Point.new(@rw, @hw, @zw)
22
+ to = @proj_gk.transform(@proj_wgs84, from)
23
+ refute_equal(from.object_id, to.object_id)
24
+ assert_in_delta(@lon, to.x * Proj4::RAD_TO_DEG, TOLERANCE)
25
+ assert_in_delta(@lat, to.y * Proj4::RAD_TO_DEG, TOLERANCE)
26
+ assert_in_delta(0, to.z, TOLERANCE * (10 ** 3))
27
+ end
28
+
29
+ def test_gk_to_wgs84_inplace
30
+ from = Proj4::Point.new(@rw, @hw, @zw)
31
+ to = @proj_gk.transform!(@proj_wgs84, from)
32
+ assert_equal(from.object_id, to.object_id)
33
+ assert_in_delta(@lon, to.x * Proj4::RAD_TO_DEG, TOLERANCE)
34
+ assert_in_delta(@lat, to.y * Proj4::RAD_TO_DEG, TOLERANCE)
35
+ assert_in_delta(0, to.z, TOLERANCE * (10 ** 3))
36
+ end
37
+
38
+ def test_wgs84_to_gk
39
+ point = @proj_wgs84.transform(@proj_gk, Proj4::Point.new(@lon * Proj4::DEG_TO_RAD, @lat * Proj4::DEG_TO_RAD, 0))
40
+ assert_equal(@rw, point.x.round)
41
+ assert_equal(@hw, point.y.round)
42
+ assert_in_delta(@zw, point.z, TOLERANCE)
43
+ end
44
+
45
+ def test_no_dst_proj
46
+ assert_raises TypeError do
47
+ point = @proj_wgs84.transform(nil, Proj4::Point.new(@lon * Proj4::DEG_TO_RAD, @lat * Proj4::DEG_TO_RAD, 0))
48
+ end
49
+ end
50
+
51
+ def test_not_a_point
52
+ assert_raises TypeError do
53
+ point = @proj_wgs84.transform(@proj_gk, nil)
54
+ end
55
+ end
56
+
57
+ def test_mercator_at_pole_raise
58
+ assert_raises Proj4::ToleranceConditionError do
59
+ point = @proj_wgs84.transform(@proj_merc, Proj4::Point.new(0, 90 * Proj4::DEG_TO_RAD, 0))
60
+ end
61
+ end
62
+
63
+ def test_mercator_at_pole_rescue
64
+ begin
65
+ point = @proj_wgs84.transform(@proj_merc, Proj4::Point.new(0, 90 * Proj4::DEG_TO_RAD, 0))
66
+ rescue => exception
67
+ assert_kind_of(Proj4::ToleranceConditionError, exception)
68
+ assert_equal('tolerance condition error', exception.message)
69
+ assert_equal(20, exception.errnum)
70
+ end
71
+ end
72
+
73
+ class XYPoint
74
+ attr_accessor :x, :y, :extra
75
+
76
+ def initialize(x, y, extra)
77
+ @x = x
78
+ @y = y
79
+ @extra = extra
80
+ end
81
+ end
82
+
83
+ def test_no_z
84
+ point = @proj_gk.transform(@proj_wgs84, XYPoint.new(@rw, @hw, 'foo'))
85
+ assert_kind_of(XYPoint, point)
86
+ assert_equal('foo', point.extra)
87
+ assert_in_delta(@lon, point.x * Proj4::RAD_TO_DEG, TOLERANCE)
88
+ assert_in_delta(@lat, point.y * Proj4::RAD_TO_DEG, TOLERANCE)
89
+ end
90
+
91
+ def test_no_float
92
+ assert_raises TypeError do
93
+ @proj_gk.transform(@proj_wgs84, XYPoint.new('x', 'y', 'foo'))
94
+ end
95
+ end
96
+
97
+ def test_collection
98
+ from0 = Proj4::Point.new(@rw, @hw, @zw)
99
+ from1 = Proj4::Point.new(0, 0, 0)
100
+ collection = @proj_gk.transform_all!(@proj_wgs84, [ from0, from1 ])
101
+ to0 = collection[0]
102
+ to1 = collection[1]
103
+ assert_equal(from1.object_id, to1.object_id)
104
+ assert_in_delta(@lon, to0.x * Proj4::RAD_TO_DEG, TOLERANCE)
105
+ assert_in_delta(@lat, to0.y * Proj4::RAD_TO_DEG, TOLERANCE)
106
+ assert_in_delta(0, to0.z, TOLERANCE * (10 ** 3))
107
+ end
108
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ffi-proj4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - J Smith
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ description: An ffi wrapper for the PROJ.4 Cartographic Projections library.
28
+ email: dark.panda@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - ".gitignore"
34
+ - Gemfile
35
+ - Guardfile
36
+ - MIT-LICENSE
37
+ - README.rdoc
38
+ - Rakefile
39
+ - data/FL
40
+ - data/GL27
41
+ - data/IGNF
42
+ - data/MD
43
+ - data/TN
44
+ - data/WI
45
+ - data/WO
46
+ - data/alaska
47
+ - data/conus
48
+ - data/epsg
49
+ - data/esri
50
+ - data/esri.extra
51
+ - data/hawaii
52
+ - data/nad.lst
53
+ - data/nad27
54
+ - data/nad83
55
+ - data/ntf_r93.gsb
56
+ - data/ntv1_can.dat
57
+ - data/null
58
+ - data/nzgd2kgrid0005.gsb
59
+ - data/other.extra
60
+ - data/proj_def.dat
61
+ - data/prvi
62
+ - data/stgeorge
63
+ - data/stlrnc
64
+ - data/stpaul
65
+ - data/world
66
+ - ffi-proj4.gemspec
67
+ - lib/ffi-proj4.rb
68
+ - lib/ffi-proj4/error.rb
69
+ - lib/ffi-proj4/point.rb
70
+ - lib/ffi-proj4/projection.rb
71
+ - lib/ffi-proj4/projxy.rb
72
+ - lib/ffi-proj4/tools.rb
73
+ - lib/ffi-proj4/version.rb
74
+ - test/point_tests.rb
75
+ - test/projection_tests.rb
76
+ - test/simple_transformation_tests.rb
77
+ - test/test_helper.rb
78
+ - test/transformation_tests.rb
79
+ homepage: http://github.com/dark-panda/ffi-proj4
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.3.1
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 2.2.2
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: An ffi wrapper for the PROJ.4 Cartographic Projections library.
103
+ test_files:
104
+ - test/point_tests.rb
105
+ - test/projection_tests.rb
106
+ - test/simple_transformation_tests.rb
107
+ - test/test_helper.rb
108
+ - test/transformation_tests.rb