Class: Proj::Coordinate

Inherits:
Object
  • Object
show all
Defined in:
lib/proj/coordinate.rb

Overview

A four dimensional coordinate of double values.

For most geographic CRSes, the units will be in degrees.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(x: nil, y: nil, z: nil, t: nil, u: nil, v: nil, w: nil, lam: nil, phi: nil, lat: nil, lon: nil, s: nil, a1: nil, a2: nil, o: nil, p: nil, k: nil, e: nil, n: nil) ⇒ Coordinate

Creates a new coordinate.

Examples:


coord = Proj::Coordinate.new(:x => 1, :y => 2, :z => 3, :t => 4)
coord = Proj::Coordinate.new(:u => 5, :v => 6, :w => 7, :t => 8)
coord = Proj::Coordinate.new(:lam => 9, :phi => 10, :z => 11, :t => 12)
coord = Proj::Coordinate.new(:lon => 9, :lat => 10, :z => 11, :t => 12)
coord = Proj::Coordinate.new(:s => 13, :a1 => 14, :a2 => 15)
coord = Proj::Coordinate.new(:o => 16, :p => 17, :k => 18)
coord = Proj::Coordinate.new(:e => 19, :n => 20, :u => 21)


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/proj/coordinate.rb', line 50

def initialize(x: nil, y: nil, z: nil, t: nil,
               u: nil, v: nil, w: nil, # t: nil
               lam: nil, phi: nil, # z: nil, t: nil,
               lat: nil, lon: nil, # z: nil, t: nil,
               s: nil, a1: nil, a2: nil,
               o: nil, p: nil, k: nil,
               e: nil, n: nil) #u: nil

  @coord = Api::PjCoord.new

  keys = if x && y && z && t
           [:x, :y, :z, :t]
         elsif x && y && z
           [:x, :y, :z]
         elsif x && y
           [:x, :y]
         elsif u && v && w && t
           [:u, :v, :w, :t]
         elsif u && v && w
           [:u, :v, :w]
         elsif u && v
           [:u, :v]
         elsif lam && phi && z && t
           [:lam, :phi, :z, :t]
         elsif lam && phi && z
           [:lam, :phi, :z]
         elsif lam && phi
           [:lam, :phi]
         elsif lon && lat && z && t
           [:lon, :lat, :z, :t]
         elsif lon && lat && z
           [:lon, :lat, :z]
         elsif lon && lat
           [:lon, :lat]
         elsif s && a1 && a2
           [:s, :a1, :a2]
         elsif e && n && u
           [:e, :n, :u]
         elsif o && p && k
           [:o, :p, :k]
         else
           []
         end

  coord_struct = @coord[:v]
  keys.each_with_index do |key, index|
    coord_struct[index] = binding.local_variable_get(key)
  end
end

Class Method Details

.from_coord(pj_coord) ⇒ Object



8
9
10
11
12
# File 'lib/proj/coordinate.rb', line 8

def self.from_coord(pj_coord)
  result = self.allocate
  result.instance_variable_set(:@coord, pj_coord)
  result
end

.xy_distance(coord1, coord2) ⇒ Float

Calculate the 2-dimensional euclidean distance between two projected coordinates.

Parameters:

  • coord1 (Coordinate)

    Coordinate of first point

  • coord2 (Coordinate)

    Coordinate of second point

Returns:

  • (Float)

    Distance between the coordinates

See Also:



22
23
24
# File 'lib/proj/coordinate.rb', line 22

def self.xy_distance(coord1, coord2)
  Api.proj_xy_dist(coord1, coord2)
end

.xyz_distance(coord1, coord2) ⇒ Float

Calculate the 3-dimensional euclidean distance between two projected coordinates.

Parameters:

  • coord1 (Coordinate)

    Coordinate of first point

  • coord2 (Coordinate)

    Coordinate of second point

Returns:

  • (Float)

    Distance between the coordinates

See Also:



34
35
36
# File 'lib/proj/coordinate.rb', line 34

def self.xyz_distance(coord1, coord2)
  Api.proj_xyz_dist(coord1, coord2)
end

Instance Method Details

#a1Float

Returns a1 coordinate

Returns:

  • (Float)


286
287
288
# File 'lib/proj/coordinate.rb', line 286

def a1
  @coord[:v][1]
end

#a2Float

Returns a2 coordinate

Returns:

  • (Float)


293
294
295
# File 'lib/proj/coordinate.rb', line 293

def a2
  @coord[:v][2]
end

#eFloat

Returns e coordinate

Returns:

  • (Float)


265
266
267
# File 'lib/proj/coordinate.rb', line 265

def e
  @coord[:v][0]
end

#enuObject



115
116
117
# File 'lib/proj/coordinate.rb', line 115

def enu
  @coord[:enu]
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


108
109
110
111
# File 'lib/proj/coordinate.rb', line 108

def eql?(other)
  other.is_a?(Coordinate) &&
    self.x == other.x && self.y == other.y && self.z == other.z && self.t == other.t
end

#geodObject



119
120
121
# File 'lib/proj/coordinate.rb', line 119

def geod
  @coord[:geod]
end

#kFloat

Returns k coordinate

Returns:

  • (Float)


258
259
260
# File 'lib/proj/coordinate.rb', line 258

def k
  @coord[:v][2]
end

#lamFloat

Returns lam coordinate

Returns:

  • (Float)


230
231
232
# File 'lib/proj/coordinate.rb', line 230

def lam
  @coord[:v][0]
end

#latFloat

Returns latitude coordinate

Returns:

  • (Float)


223
224
225
# File 'lib/proj/coordinate.rb', line 223

def lat
  @coord[:v][1]
end

#lonFloat

Returns longitude coordinate

Returns:

  • (Float)


216
217
218
# File 'lib/proj/coordinate.rb', line 216

def lon
  @coord[:v][0]
end

#lpObject



123
124
125
# File 'lib/proj/coordinate.rb', line 123

def lp
  @coord[:lp]
end

#lpzObject



127
128
129
# File 'lib/proj/coordinate.rb', line 127

def lpz
  @coord[:lpz]
end

#lpztObject



131
132
133
# File 'lib/proj/coordinate.rb', line 131

def lpzt
  @coord[:lpzt]
end

#nFloat

Returns n coordinate

Returns:

  • (Float)


272
273
274
# File 'lib/proj/coordinate.rb', line 272

def n
  @coord[:v][1]
end

#oFloat

Returns o coordinate

Returns:

  • (Float)


244
245
246
# File 'lib/proj/coordinate.rb', line 244

def o
  @coord[:v][0]
end

#opkObject



135
136
137
# File 'lib/proj/coordinate.rb', line 135

def opk
  @coord[:opk]
end

#pFloat

Returns p coordinate

Returns:

  • (Float)


251
252
253
# File 'lib/proj/coordinate.rb', line 251

def p
  @coord[:v][1]
end

#phiFloat

Returns phi coordinate

Returns:

  • (Float)


237
238
239
# File 'lib/proj/coordinate.rb', line 237

def phi
  @coord[:v][1]
end

#pj_coordObject



104
105
106
# File 'lib/proj/coordinate.rb', line 104

def pj_coord
  @coord
end

#sFloat

Returns s coordinate

Returns:

  • (Float)


279
280
281
# File 'lib/proj/coordinate.rb', line 279

def s
  @coord[:v][0]
end

#tFloat

Returns t coordinate

Returns:

  • (Float)


187
188
189
# File 'lib/proj/coordinate.rb', line 187

def t
  @coord[:v][3]
end

#to_ptrObject



100
101
102
# File 'lib/proj/coordinate.rb', line 100

def to_ptr
  @coord.to_ptr
end

#to_sString

Returns nice printout of coordinate contents

Returns:

  • (String)


300
301
302
# File 'lib/proj/coordinate.rb', line 300

def to_s
  "v0: #{self.x}, v1: #{self.y}, v2: #{self.z}, v3: #{self.t}"
end

#uFloat

Returns u coordinate

TODO - This could be u in uvw or enu. Going to ignore that

Returns:

  • (Float)


195
196
197
# File 'lib/proj/coordinate.rb', line 195

def u
  @coord[:v][0]
end

#uvObject



139
140
141
# File 'lib/proj/coordinate.rb', line 139

def uv
  @coord[:uv]
end

#uvwObject



143
144
145
# File 'lib/proj/coordinate.rb', line 143

def uvw
  @coord[:uvw]
end

#uvwtObject



147
148
149
# File 'lib/proj/coordinate.rb', line 147

def uvwt
  @coord[:uvwt]
end

#vFloat

Returns v coordinate

Returns:

  • (Float)


202
203
204
# File 'lib/proj/coordinate.rb', line 202

def v
  @coord[:v][1]
end

#wFloat

Returns w coordinate

Returns:

  • (Float)


209
210
211
# File 'lib/proj/coordinate.rb', line 209

def w
  @coord[:v][2]
end

#xFloat

Returns x coordinate

Returns:

  • (Float)


166
167
168
# File 'lib/proj/coordinate.rb', line 166

def x
  @coord[:v][0]
end

#xyObject



151
152
153
# File 'lib/proj/coordinate.rb', line 151

def xy
  @coord[:xy]
end

#xyzObject



155
156
157
# File 'lib/proj/coordinate.rb', line 155

def xyz
  @coord[:xyz]
end

#xyztObject



159
160
161
# File 'lib/proj/coordinate.rb', line 159

def xyzt
  @coord[:xyzt]
end

#yFloat

Returns y coordinate

Returns:

  • (Float)


173
174
175
# File 'lib/proj/coordinate.rb', line 173

def y
  @coord[:v][1]
end

#zFloat

Returns z coordinate

Returns:

  • (Float)


180
181
182
# File 'lib/proj/coordinate.rb', line 180

def z
  @coord[:v][2]
end