Class: Proj::Coordinate
- Inherits:
-
Object
- Object
- Proj::Coordinate
- 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
- .from_coord(pj_coord) ⇒ Object
-
.xy_distance(coord1, coord2) ⇒ Float
Calculate the 2-dimensional euclidean distance between two projected coordinates.
-
.xyz_distance(coord1, coord2) ⇒ Float
Calculate the 3-dimensional euclidean distance between two projected coordinates.
Instance Method Summary collapse
-
#a1 ⇒ Float
Returns a1 coordinate.
-
#a2 ⇒ Float
Returns a2 coordinate.
-
#e ⇒ Float
Returns e coordinate.
- #enu ⇒ Object
- #eql?(other) ⇒ Boolean (also: #==)
- #geod ⇒ Object
-
#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
constructor
Creates a new coordinate.
-
#k ⇒ Float
Returns k coordinate.
-
#lam ⇒ Float
Returns lam coordinate.
-
#lat ⇒ Float
Returns latitude coordinate.
-
#lon ⇒ Float
Returns longitude coordinate.
- #lp ⇒ Object
- #lpz ⇒ Object
- #lpzt ⇒ Object
-
#n ⇒ Float
Returns n coordinate.
-
#o ⇒ Float
Returns o coordinate.
- #opk ⇒ Object
-
#p ⇒ Float
Returns p coordinate.
-
#phi ⇒ Float
Returns phi coordinate.
- #pj_coord ⇒ Object
-
#s ⇒ Float
Returns s coordinate.
-
#t ⇒ Float
Returns t coordinate.
- #to_ptr ⇒ Object
-
#to_s ⇒ String
Returns nice printout of coordinate contents.
-
#u ⇒ Float
Returns u coordinate.
- #uv ⇒ Object
- #uvw ⇒ Object
- #uvwt ⇒ Object
-
#v ⇒ Float
Returns v coordinate.
-
#w ⇒ Float
Returns w coordinate.
-
#x ⇒ Float
Returns x coordinate.
- #xy ⇒ Object
- #xyz ⇒ Object
- #xyzt ⇒ Object
-
#y ⇒ Float
Returns y coordinate.
-
#z ⇒ Float
Returns z coordinate.
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.
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.
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.
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
#a1 ⇒ Float
Returns a1 coordinate
286 287 288 |
# File 'lib/proj/coordinate.rb', line 286 def a1 @coord[:v][1] end |
#a2 ⇒ Float
Returns a2 coordinate
293 294 295 |
# File 'lib/proj/coordinate.rb', line 293 def a2 @coord[:v][2] end |
#e ⇒ Float
Returns e coordinate
265 266 267 |
# File 'lib/proj/coordinate.rb', line 265 def e @coord[:v][0] end |
#enu ⇒ Object
115 116 117 |
# File 'lib/proj/coordinate.rb', line 115 def enu @coord[:enu] end |
#eql?(other) ⇒ Boolean Also known as: ==
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 |
#geod ⇒ Object
119 120 121 |
# File 'lib/proj/coordinate.rb', line 119 def geod @coord[:geod] end |
#k ⇒ Float
Returns k coordinate
258 259 260 |
# File 'lib/proj/coordinate.rb', line 258 def k @coord[:v][2] end |
#lam ⇒ Float
Returns lam coordinate
230 231 232 |
# File 'lib/proj/coordinate.rb', line 230 def lam @coord[:v][0] end |
#lat ⇒ Float
Returns latitude coordinate
223 224 225 |
# File 'lib/proj/coordinate.rb', line 223 def lat @coord[:v][1] end |
#lon ⇒ Float
Returns longitude coordinate
216 217 218 |
# File 'lib/proj/coordinate.rb', line 216 def lon @coord[:v][0] end |
#lp ⇒ Object
123 124 125 |
# File 'lib/proj/coordinate.rb', line 123 def lp @coord[:lp] end |
#lpz ⇒ Object
127 128 129 |
# File 'lib/proj/coordinate.rb', line 127 def lpz @coord[:lpz] end |
#lpzt ⇒ Object
131 132 133 |
# File 'lib/proj/coordinate.rb', line 131 def lpzt @coord[:lpzt] end |
#n ⇒ Float
Returns n coordinate
272 273 274 |
# File 'lib/proj/coordinate.rb', line 272 def n @coord[:v][1] end |
#o ⇒ Float
Returns o coordinate
244 245 246 |
# File 'lib/proj/coordinate.rb', line 244 def o @coord[:v][0] end |
#opk ⇒ Object
135 136 137 |
# File 'lib/proj/coordinate.rb', line 135 def opk @coord[:opk] end |
#p ⇒ Float
Returns p coordinate
251 252 253 |
# File 'lib/proj/coordinate.rb', line 251 def p @coord[:v][1] end |
#phi ⇒ Float
Returns phi coordinate
237 238 239 |
# File 'lib/proj/coordinate.rb', line 237 def phi @coord[:v][1] end |
#pj_coord ⇒ Object
104 105 106 |
# File 'lib/proj/coordinate.rb', line 104 def pj_coord @coord end |
#s ⇒ Float
Returns s coordinate
279 280 281 |
# File 'lib/proj/coordinate.rb', line 279 def s @coord[:v][0] end |
#t ⇒ Float
Returns t coordinate
187 188 189 |
# File 'lib/proj/coordinate.rb', line 187 def t @coord[:v][3] end |
#to_ptr ⇒ Object
100 101 102 |
# File 'lib/proj/coordinate.rb', line 100 def to_ptr @coord.to_ptr end |
#to_s ⇒ String
Returns nice printout of coordinate contents
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 |
#u ⇒ Float
Returns u coordinate
TODO - This could be u in uvw or enu. Going to ignore that
195 196 197 |
# File 'lib/proj/coordinate.rb', line 195 def u @coord[:v][0] end |
#uv ⇒ Object
139 140 141 |
# File 'lib/proj/coordinate.rb', line 139 def uv @coord[:uv] end |
#uvw ⇒ Object
143 144 145 |
# File 'lib/proj/coordinate.rb', line 143 def uvw @coord[:uvw] end |
#uvwt ⇒ Object
147 148 149 |
# File 'lib/proj/coordinate.rb', line 147 def uvwt @coord[:uvwt] end |
#v ⇒ Float
Returns v coordinate
202 203 204 |
# File 'lib/proj/coordinate.rb', line 202 def v @coord[:v][1] end |
#w ⇒ Float
Returns w coordinate
209 210 211 |
# File 'lib/proj/coordinate.rb', line 209 def w @coord[:v][2] end |
#x ⇒ Float
Returns x coordinate
166 167 168 |
# File 'lib/proj/coordinate.rb', line 166 def x @coord[:v][0] end |
#xy ⇒ Object
151 152 153 |
# File 'lib/proj/coordinate.rb', line 151 def xy @coord[:xy] end |
#xyz ⇒ Object
155 156 157 |
# File 'lib/proj/coordinate.rb', line 155 def xyz @coord[:xyz] end |
#xyzt ⇒ Object
159 160 161 |
# File 'lib/proj/coordinate.rb', line 159 def xyzt @coord[:xyzt] end |
#y ⇒ Float
Returns y coordinate
173 174 175 |
# File 'lib/proj/coordinate.rb', line 173 def y @coord[:v][1] end |
#z ⇒ Float
Returns z coordinate
180 181 182 |
# File 'lib/proj/coordinate.rb', line 180 def z @coord[:v][2] end |