Class: Proj4::Projection
- Inherits:
-
Object
show all
- Includes:
- Tools
- Defined in:
- lib/ffi-proj4/projection.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#datum ⇒ Object
-
#datum_transform(proj, *args) ⇒ Object
-
#datum_transform!(proj, *args) ⇒ Object
(also: #datum_transform_rad!)
-
#datum_transform_deg(proj, *args) ⇒ Object
-
#datum_transform_deg!(proj, *args) ⇒ Object
-
#definition ⇒ Object
(also: #getDef)
-
#forward(*args) ⇒ Object
(also: #forward_rad, #forwardRad)
-
#forward!(*args) ⇒ Object
(also: #forward_rad!, #forwardRad!)
-
#forward_all(proj, collection) ⇒ Object
-
#forward_all!(collection) ⇒ Object
-
#forward_deg(*args) ⇒ Object
(also: #forwardDeg)
-
#forward_deg!(*args) ⇒ Object
(also: #forwardDeg!)
-
#geocentric? ⇒ Boolean
(also: #isGeocent?, #isGeocentric?)
-
#initialize(arg, auto_free = true) ⇒ Projection
constructor
A new instance of Projection.
-
#inverse(*args) ⇒ Object
(also: #inverse_rad, #inverseRad)
-
#inverse!(*args) ⇒ Object
(also: #inverse_rad!, #inverseRad!)
-
#inverse_deg(*args) ⇒ Object
(also: #inverseDeg)
-
#inverse_deg!(*args) ⇒ Object
(also: #inverseDeg!)
-
#lat_long? ⇒ Boolean
(also: #isLatLong?)
-
#projection ⇒ Object
-
#to_hash ⇒ Object
(also: #definition_as_hash)
-
#to_s ⇒ Object
(also: #inspect)
-
#transform(proj, *args) ⇒ Object
(also: #transform_rad, #transformRad)
-
#transform!(proj, *args) ⇒ Object
(also: #transform_rad!, #transformRad!)
-
#transform_all(proj, collection) ⇒ Object
-
#transform_all!(proj, collection) ⇒ Object
-
#transform_deg(proj, *args) ⇒ Object
-
#transform_deg!(proj, *args) ⇒ Object
Methods included from Tools
#bool_result, #deg_to_rad, #deg_to_rad!, #rad_to_deg, #rad_to_deg!
Constructor Details
#initialize(arg, auto_free = true) ⇒ Projection
Returns a new instance of Projection.
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/ffi-proj4/projection.rb', line 10
def initialize(arg, auto_free = true)
args = case arg
when Array
arg.collect { |a| a.sub(/^\+/, '') }
when String
if arg =~ /^(epsg|esri):/i
[ "+init=#{arg}" ]
else
arg.strip.split(/ /).collect { |a| a.sub(/^\+/, '') }
end
when Hash
arg.collect { |k, v|
if v.nil?
k.to_s
else
"#{k.to_s.strip}=#{v.to_s.strip}"
end
}
when Proj4::Projection
arg.definition.strip.split(/ /).collect { |a| a.sub(/^\+/, '') }
else
raise ArgumentError.new("Unknown type #{arg.class} for projection definition")
end
params = args.collect(&:strip).collect { |a|
if !(a =~ /^\+/)
"+#{a}"
else
a
end
}.join(' ')
ptr = FFIProj4.pj_init_plus(params)
if ptr.null?
result = FFIProj4.pj_get_errno_ref.read_int
raise ProjectionParseError.new(FFIProj4.pj_strerrno(result))
else
@ptr = FFI::AutoPointer.new(
ptr,
self.class.method(:release)
)
end
self.ptr.autorelease = auto_free
end
|
Instance Attribute Details
#ptr ⇒ Object
Returns the value of attribute ptr.
8
9
10
|
# File 'lib/ffi-proj4/projection.rb', line 8
def ptr
@ptr
end
|
Class Method Details
.release(ptr) ⇒ Object
57
58
59
|
# File 'lib/ffi-proj4/projection.rb', line 57
def self.release(ptr) FFIProj4.pj_free(ptr)
end
|
Instance Method Details
#datum ⇒ Object
229
230
231
|
# File 'lib/ffi-proj4/projection.rb', line 229
def datum
self.to_hash[:datum]
end
|
200
201
202
|
# File 'lib/ffi-proj4/projection.rb', line 200
def datum_transform(proj, *args)
self.datum_transform!(proj, *(dup_args(*args)))
end
|
195
196
197
|
# File 'lib/ffi-proj4/projection.rb', line 195
def datum_transform!(proj, *args)
perform_transform(:pj_datum_transform, proj, *args)
end
|
208
209
210
|
# File 'lib/ffi-proj4/projection.rb', line 208
def datum_transform_deg(proj, *args)
self.datum_transform_deg!(proj, *(dup_args(*args)))
end
|
204
205
206
|
# File 'lib/ffi-proj4/projection.rb', line 204
def datum_transform_deg!(proj, *args)
self.datum_transform!(proj, *args).to_deg!
end
|
#definition ⇒ Object
Also known as:
getDef
72
73
74
|
# File 'lib/ffi-proj4/projection.rb', line 72
def definition
@definition ||= FFIProj4.pj_get_def(self.ptr, 0).strip
end
|
#forward(*args) ⇒ Object
Also known as:
forward_rad, forwardRad
112
113
114
|
# File 'lib/ffi-proj4/projection.rb', line 112
def forward(*args)
self.forward!(*dup_args(*args))
end
|
#forward!(*args) ⇒ Object
Also known as:
forward_rad!, forwardRad!
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/ffi-proj4/projection.rb', line 94
def forward!(*args)
xy, point = xy_and_point_from_args(*args)
ret = FFIProj4.pj_fwd(xy, self.ptr)
result = FFIProj4.pj_get_errno_ref.read_int
if result == 0
point.x = ret[:x]
point.y = ret[:y]
point.z = 0 if point.respond_to?(:z=)
point
else
raise Proj4::Error.instantiate_error(result)
end
end
|
#forward_all(proj, collection) ⇒ Object
135
136
137
138
139
|
# File 'lib/ffi-proj4/projection.rb', line 135
def forward_all(proj, collection)
collection.collect do |args|
self.forward!(proj, *(dup_args(*args)))
end
end
|
#forward_all!(collection) ⇒ Object
128
129
130
131
132
133
|
# File 'lib/ffi-proj4/projection.rb', line 128
def forward_all!(collection)
collection.each do |args|
self.forward_all!(proj, *args)
end
collection
end
|
#forward_deg(*args) ⇒ Object
Also known as:
forwardDeg
123
124
125
|
# File 'lib/ffi-proj4/projection.rb', line 123
def forward_deg(*args)
self.forward_deg!(*dup_args(*args))
end
|
#forward_deg!(*args) ⇒ Object
Also known as:
forwardDeg!
118
119
120
|
# File 'lib/ffi-proj4/projection.rb', line 118
def forward_deg!(*args)
self.forward!(*args_deg_to_rad(*args))
end
|
#geocentric? ⇒ Boolean
Also known as:
isGeocent?, isGeocentric?
66
67
68
|
# File 'lib/ffi-proj4/projection.rb', line 66
def geocentric?
bool_result(FFIProj4.pj_is_geocent(self.ptr))
end
|
#inverse(*args) ⇒ Object
Also known as:
inverse_rad, inverseRad
159
160
161
|
# File 'lib/ffi-proj4/projection.rb', line 159
def inverse(*args)
self.inverse!(*dup_args(*args))
end
|
#inverse!(*args) ⇒ Object
Also known as:
inverse_rad!, inverseRad!
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
# File 'lib/ffi-proj4/projection.rb', line 141
def inverse!(*args)
xy, point = xy_and_point_from_args(*args)
ret = FFIProj4.pj_inv(xy, self.ptr)
result = FFIProj4.pj_get_errno_ref.read_int
if result == 0
point.x = ret[:x]
point.y = ret[:y]
point.z = 0 if point.respond_to?(:z=)
point
else
raise Proj4::Error.instantiate_error(result)
end
end
|
#inverse_deg(*args) ⇒ Object
Also known as:
inverseDeg
170
171
172
|
# File 'lib/ffi-proj4/projection.rb', line 170
def inverse_deg(*args)
self.inverse_deg!(*dup_args(*args))
end
|
#inverse_deg!(*args) ⇒ Object
Also known as:
inverseDeg!
165
166
167
|
# File 'lib/ffi-proj4/projection.rb', line 165
def inverse_deg!(*args)
self.inverse!(*args).to_deg!
end
|
#lat_long? ⇒ Boolean
Also known as:
isLatLong?
61
62
63
|
# File 'lib/ffi-proj4/projection.rb', line 61
def lat_long?
bool_result(FFIProj4.pj_is_latlong(self.ptr))
end
|
#projection ⇒ Object
225
226
227
|
# File 'lib/ffi-proj4/projection.rb', line 225
def projection
self.to_hash[:proj]
end
|
#to_hash ⇒ Object
Also known as:
definition_as_hash
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/ffi-proj4/projection.rb', line 77
def to_hash
@hash ||= self.definition.split(/ /).inject({}) { |memo, opt|
memo.tap {
k, v = opt.split('=')
k.sub!(/^\+/, '')
v = true if v.nil?
memo[k.to_sym] = v
}
}
end
|
#to_s ⇒ Object
Also known as:
inspect
89
90
91
|
# File 'lib/ffi-proj4/projection.rb', line 89
def to_s
"#<Proj4::Projection #{definition}>"
end
|
181
182
183
|
# File 'lib/ffi-proj4/projection.rb', line 181
def transform(proj, *args)
self.transform!(proj, *(dup_args(*args)))
end
|
175
176
177
|
# File 'lib/ffi-proj4/projection.rb', line 175
def transform!(proj, *args)
perform_transform(:pj_transform, proj, *args)
end
|
219
220
221
222
223
|
# File 'lib/ffi-proj4/projection.rb', line 219
def transform_all(proj, collection)
collection.collect do |args|
self.transform!(proj, *(dup_args(*args)))
end
end
|
212
213
214
215
216
217
|
# File 'lib/ffi-proj4/projection.rb', line 212
def transform_all!(proj, collection)
collection.each do |args|
self.transform!(proj, *args)
end
collection
end
|
191
192
193
|
# File 'lib/ffi-proj4/projection.rb', line 191
def transform_deg(proj, *args)
self.transform_deg!(proj, *(dup_args(*args)))
end
|
187
188
189
|
# File 'lib/ffi-proj4/projection.rb', line 187
def transform_deg!(proj, *args)
self.transform!(proj, *args).to_deg!
end
|