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.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +18 -0
- data/Guardfile +17 -0
- data/MIT-LICENSE +22 -0
- data/README.rdoc +29 -0
- data/Rakefile +27 -0
- data/data/FL +0 -0
- data/data/GL27 +22 -0
- data/data/IGNF +487 -0
- data/data/MD +0 -0
- data/data/TN +0 -0
- data/data/WI +0 -0
- data/data/WO +0 -0
- data/data/alaska +0 -0
- data/data/conus +0 -0
- data/data/epsg +8464 -0
- data/data/esri +5937 -0
- data/data/esri.extra +948 -0
- data/data/hawaii +0 -0
- data/data/nad.lst +142 -0
- data/data/nad27 +809 -0
- data/data/nad83 +744 -0
- data/data/ntf_r93.gsb +0 -0
- data/data/ntv1_can.dat +0 -0
- data/data/null +0 -0
- data/data/nzgd2kgrid0005.gsb +0 -0
- data/data/other.extra +53 -0
- data/data/proj_def.dat +17 -0
- data/data/prvi +0 -0
- data/data/stgeorge +0 -0
- data/data/stlrnc +0 -0
- data/data/stpaul +0 -0
- data/data/world +212 -0
- data/ffi-proj4.gemspec +23 -0
- data/lib/ffi-proj4.rb +164 -0
- data/lib/ffi-proj4/error.rb +92 -0
- data/lib/ffi-proj4/point.rb +39 -0
- data/lib/ffi-proj4/projection.rb +310 -0
- data/lib/ffi-proj4/projxy.rb +64 -0
- data/lib/ffi-proj4/tools.rb +57 -0
- data/lib/ffi-proj4/version.rb +5 -0
- data/test/point_tests.rb +69 -0
- data/test/projection_tests.rb +197 -0
- data/test/simple_transformation_tests.rb +82 -0
- data/test/test_helper.rb +87 -0
- data/test/transformation_tests.rb +108 -0
- metadata +108 -0
@@ -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
|