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 +4 -4
- data/ext/geodesic_wgs84/geodesic_wgs84.c +80 -0
- data/lib/geodesic_wgs84/version.rb +1 -1
- data/spec/geodesic_wgs84_spec.rb +8 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d05f76ec707266ede381b02ed6734f911f2e8af6
|
|
4
|
+
data.tar.gz: 8a1eaba21553245498a8309dc606491839c55427
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
}
|
data/spec/geodesic_wgs84_spec.rb
CHANGED
|
@@ -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.
|
|
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.
|
|
83
|
+
rubygems_version: 2.4.4
|
|
84
84
|
signing_key:
|
|
85
85
|
specification_version: 4
|
|
86
86
|
summary: Calculate distances on Earth using WGS84
|