geodesic_wgs84 1.32.16 → 1.32.17

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 484164f90bf349f74e8cce75167b362e751eca85
4
- data.tar.gz: ec55ae2fe7c28b685d61e1ed0407718f2fad92b0
3
+ metadata.gz: d05f76ec707266ede381b02ed6734f911f2e8af6
4
+ data.tar.gz: 8a1eaba21553245498a8309dc606491839c55427
5
5
  SHA512:
6
- metadata.gz: 46b492042cc3dc9ffe58af012cba41953b121adc1ff66a029e0b07132a6b0c8875659e0a0d97b0737e1e0a331a76b3cdf8d6b550d71e6a87bf9e3653ec5e517d
7
- data.tar.gz: a31750e62e7f7eb299c3e4e8b32ce0a408b061f751a52020564290169ab7a33585cfc8de199a1acfaee02d0b8e5fb61b7959936c7c8372cd776cb999b82fc667
6
+ metadata.gz: 365788de78244ea88b7294536cd72f56de439d6bef89075bd80f67e4ebfcbbb1899466c334ae80b031ecb84cbb1113e87eb27b12bb7548dfa2f37ccc88c0751a
7
+ data.tar.gz: 19904afe323151bd542c10ac0a8ebb1b1ebf5c88270ba9a8bde8a86a8757b0019dfae851f088b0d36295d4c7c26017e8334d5ba2e0d058dc7fe5a9780ab596d9
@@ -228,6 +228,85 @@ wgs84_distance(int argc, VALUE *argv, VALUE klass)
228
228
  }
229
229
 
230
230
 
231
+ static VALUE
232
+ wgs84_course(double bearing)
233
+ {
234
+ char *ptr;
235
+
236
+ if (bearing < -157.5)
237
+ ptr = (char *) "S";
238
+ else if (bearing < -112.5)
239
+ ptr = (char *) "SW";
240
+ else if (bearing < -67.5)
241
+ ptr = (char *) "W";
242
+ else if (bearing < -22.5)
243
+ ptr = (char *) "NW";
244
+ else if (bearing < 22.5)
245
+ ptr = (char *) "N";
246
+ else if (bearing < 67.5)
247
+ ptr = (char *) "NO";
248
+ else if (bearing < 112.5)
249
+ ptr = (char *) "O";
250
+ else if (bearing < 157.5)
251
+ ptr = (char *) "SO";
252
+ else
253
+ ptr = (char *) "S";
254
+ return rb_str_new2(ptr);
255
+ }
256
+
257
+
258
+ static VALUE
259
+ wgs84_dist_course(int argc, VALUE *argv, VALUE klass)
260
+ {
261
+ int i;
262
+ double dbl[4], azi1, azi2, s12;
263
+ VALUE tmp1, tmp2;
264
+
265
+ if (argc == 4) {
266
+ for (i = 0; i < 4; i++)
267
+ dbl[i] = wgs84_get_value(argv[i]);
268
+ geod_inverse(&g, dbl[0], dbl[1], dbl[2], dbl[3], &s12, &azi1, &azi2);
269
+ return rb_ary_new3(3L, INT2NUM((int) round(s12)), INT2NUM((int) azi1), wgs84_course(azi1));
270
+ }
271
+
272
+ if (argc == 1 && TYPE(*argv) == T_ARRAY && RARRAY_LEN(*argv) == 4) {
273
+ for (i = 0; i < 4; i++)
274
+ dbl[i] = wgs84_get_value(rb_ary_entry(*argv, i));
275
+ geod_inverse(&g, dbl[0], dbl[1], dbl[2], dbl[3], &s12, &azi1, &azi2);
276
+ return rb_ary_new3(3L, INT2NUM((int) round(s12)), INT2NUM((int) azi1), wgs84_course(azi1));
277
+ }
278
+
279
+ if (argc == 2) {
280
+ tmp1 = rb_check_array_type(argv[0]);
281
+ tmp2 = rb_check_array_type(argv[1]);
282
+ if (!NIL_P(tmp1) && !NIL_P(tmp2)) {
283
+ dbl[0] = wgs84_get_value(rb_ary_entry(tmp1, 0));
284
+ dbl[1] = wgs84_get_value(rb_ary_entry(tmp1, 1));
285
+ dbl[2] = wgs84_get_value(rb_ary_entry(tmp2, 0));
286
+ dbl[3] = wgs84_get_value(rb_ary_entry(tmp2, 1));
287
+ geod_inverse(&g, dbl[0], dbl[1], dbl[2], dbl[3], &s12, &azi1, &azi2);
288
+ return rb_ary_new3(3L, INT2NUM((int) round(s12)), INT2NUM((int) azi1), wgs84_course(azi1));
289
+ }
290
+ }
291
+
292
+ if (argc == 1 && TYPE(*argv) == T_ARRAY && RARRAY_LEN(*argv) == 2) {
293
+ tmp1 = rb_check_array_type(rb_ary_entry(*argv, 0));
294
+ tmp2 = rb_check_array_type(rb_ary_entry(*argv, 1));
295
+ if (!NIL_P(tmp1) && !NIL_P(tmp2)) {
296
+ dbl[0] = wgs84_get_value(rb_ary_entry(tmp1, 0));
297
+ dbl[1] = wgs84_get_value(rb_ary_entry(tmp1, 1));
298
+ dbl[2] = wgs84_get_value(rb_ary_entry(tmp2, 0));
299
+ dbl[3] = wgs84_get_value(rb_ary_entry(tmp2, 1));
300
+ geod_inverse(&g, dbl[0], dbl[1], dbl[2], dbl[3], &s12, &azi1, &azi2);
301
+ return rb_ary_new3(3L, INT2NUM((int) round(s12)), INT2NUM((int) azi1), wgs84_course(azi1));
302
+ }
303
+ }
304
+
305
+ rb_raise(rb_eArgError, "wrong number of arguments");
306
+ return Qnil;
307
+ }
308
+
309
+
231
310
  static VALUE
232
311
  wgs84_average(VALUE klass, VALUE array, VALUE target)
233
312
  {
@@ -312,6 +391,7 @@ Init_geodesic_wgs84(void)
312
391
  rb_define_method(cWGS84, "as_bigdec", wgs84_as_bigdec, 1);
313
392
  rb_define_method(cWGS84, "lat_lon", wgs84_lat_lon, -1);
314
393
  rb_define_method(cWGS84, "distance", wgs84_distance, -1);
394
+ rb_define_method(cWGS84, "dist_course", wgs84_dist_course, -1);
315
395
  rb_define_method(cWGS84, "average", wgs84_average, 2);
316
396
  rb_define_method(cWGS84, "center", wgs84_center, 2);
317
397
  }
@@ -1,3 +1,3 @@
1
1
  module GeodesicWgs84
2
- VERSION = "1.32.16"
2
+ VERSION = "1.32.17"
3
3
  end
@@ -124,5 +124,13 @@ class TestGeodesicWgs84 < MiniTest::Test
124
124
  def test_lat_lon_wetzlar
125
125
  assert_equal [50.553778, 8.492278], @wgs84.lat_lon("50 33 13.6", "8 29 32.2")
126
126
  end
127
+
128
+ def test_dist_limburg_marburg
129
+ assert_equal [68058, -134], @wgs84.distance(50.833833, 8.769333, 50.405778, 8.082222)
130
+ end
131
+
132
+ def test_dist_course_limburg_marburg
133
+ assert_equal [68058, -134, "SW"], @wgs84.dist_course(50.833833, 8.769333, 50.405778, 8.082222)
134
+ end
127
135
  end
128
136
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geodesic_wgs84
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.32.16
4
+ version: 1.32.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Volker Wiegand
@@ -80,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
80
  version: '0'
81
81
  requirements: []
82
82
  rubyforge_project:
83
- rubygems_version: 2.4.2
83
+ rubygems_version: 2.4.4
84
84
  signing_key:
85
85
  specification_version: 4
86
86
  summary: Calculate distances on Earth using WGS84