lwgeom 0.1 → 0.2

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/ext/lwgeom/lwgeom.c +54 -5
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d954159e5ab11a16233f6514548027f9e23fc76c
4
- data.tar.gz: 507360127e3de317160190847458e30017701703
3
+ metadata.gz: f90f94d270e97fb98b8e98482107832dccfc25ea
4
+ data.tar.gz: 6c56624d707c2d4b30d61f21c5290493331d613c
5
5
  SHA512:
6
- metadata.gz: d4084add6566bce97abf2501674a4ddf18eb39da7624c2a63664618844dfe9c426c398783d5d5384da72e8a31d74a6dd06668605823085d8f5c3f82ffb0eaeb0
7
- data.tar.gz: 5b451a3265279b9f61caf141b4e4960d714f17e27276d5ce286d3d89eaa12f985087572e52f1a100e2b26b5e362e7b205921d8b2691cc3160fc15cbddca88e8d
6
+ metadata.gz: 81d8d8d808c76623e3617f42c7a773bfaef3a86fd7f2d2b6f6721eb5eefe0637dd07c3822a53a8d08c2e150d454e12b9c05194f336988b832dc330d61d495c5b
7
+ data.tar.gz: 7dadac221fafd6b8845bfd1271be3abb9f17127b9073edb5889eb6664e3cfb8924e3f9a88ba60586596fca06b245995af016dfb5c0597a3810e4126e7afc7472
data/ext/lwgeom/lwgeom.c CHANGED
@@ -7,21 +7,66 @@ double EARTH_MINOR_AXIS_RADIUS = 6356752.314245179498;
7
7
  LWGEOM *lwg;
8
8
  SPHEROID s;
9
9
 
10
- static VALUE get_area(VALUE self, VALUE geom_wkt)
10
+ double get_area_for_lwg()
11
11
  {
12
- lwg = lwgeom_from_wkt(RSTRING_PTR(geom_wkt), 0);
13
12
  double area = lwgeom_area_spheroid(lwg, &s);
14
13
  lwgeom_free(lwg);
14
+ return area;
15
+ }
16
+
17
+ static VALUE get_area_from_wkb(VALUE self, VALUE geom_wkb)
18
+ {
19
+ int wkb_size_a;
20
+ wkb_size_a = RSTRING_LEN(geom_wkb);
21
+ lwg = lwgeom_from_wkb(RSTRING_PTR(geom_wkb), wkb_size_a, 0);
22
+ double area = get_area_for_lwg();
23
+ return rb_float_new(area);
24
+ }
15
25
 
26
+ static VALUE get_area_from_hexwkb(VALUE self, VALUE geom_wkb)
27
+ {
28
+ lwg = lwgeom_from_hexwkb(RSTRING_PTR(geom_wkb), 0);
29
+ double area = get_area_for_lwg();
16
30
  return rb_float_new(area);
17
31
  }
18
32
 
19
- VALUE get_length(VALUE self, VALUE geom_wkt)
33
+ static VALUE get_area_from_wkt(VALUE self, VALUE geom_wkt)
20
34
  {
21
35
  lwg = lwgeom_from_wkt(RSTRING_PTR(geom_wkt), 0);
36
+ double area = lwgeom_area_spheroid(lwg, &s);
37
+ return rb_float_new(area);
38
+ }
39
+
40
+ // methods for calculating length
41
+ double get_length_for_lwg()
42
+ {
22
43
  double length = lwgeom_length_spheroid(lwg, &s);
23
44
  lwgeom_free(lwg);
45
+ return length;
46
+ }
47
+
48
+ static VALUE get_length_from_wkt(VALUE self, VALUE geom_wkt)
49
+ {
50
+ lwg = lwgeom_from_wkt(RSTRING_PTR(geom_wkt), 0);
51
+ double length = get_length_for_lwg();
52
+ return rb_float_new(length);
53
+ }
24
54
 
55
+
56
+ static VALUE get_length_from_wkb(VALUE self, VALUE geom_wkb)
57
+ {
58
+ int wkb_size_a;
59
+ wkb_size_a = RSTRING_LEN(geom_wkb);
60
+ lwg = lwgeom_from_wkb(RSTRING_PTR(geom_wkb), wkb_size_a, 0);
61
+ double area = get_length_for_lwg();
62
+ return rb_float_new(area);
63
+ }
64
+
65
+ static VALUE get_length_from_hexwkb(VALUE self, VALUE geom_hexwkb)
66
+ {
67
+ size_t wkb_size_a;
68
+ lwg = lwgeom_from_hexwkb(RSTRING_PTR(geom_hexwkb), 0);
69
+ double length = get_length_for_lwg();
25
70
  return rb_float_new(length);
26
71
  }
27
72
 
@@ -33,8 +78,12 @@ void Init_lwgeom()
33
78
  /* define class */
34
79
  VALUE cSpheroid = rb_define_class_under(mLwGeom, "Spheroid", rb_cObject);
35
80
 
36
- rb_define_module_function(cSpheroid, "get_area", get_area, 1);
37
- rb_define_module_function(cSpheroid, "get_length", get_length, 1);
81
+ rb_define_module_function(cSpheroid, "get_area_from_hexwkb", get_area_from_hexwkb, 1);
82
+ rb_define_module_function(cSpheroid, "get_area_from_wkb", get_area_from_wkb, 1);
83
+ rb_define_module_function(cSpheroid, "get_area_from_wkt", get_area_from_wkt, 1);
84
+ rb_define_module_function(cSpheroid, "get_length_from_wkt", get_length_from_wkt, 1);
85
+ rb_define_module_function(cSpheroid, "get_length_from_wkb", get_length_from_wkb, 1);
86
+ rb_define_module_function(cSpheroid, "get_length_from_hexwkb",get_length_from_hexwkb,1);
38
87
 
39
88
  spheroid_init(&s, EARTH_MAJOR_AXIS_RADIUS, EARTH_MINOR_AXIS_RADIUS);
40
89
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lwgeom
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yaroslav Nelin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-15 00:00:00.000000000 Z
11
+ date: 2015-09-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: With this gem you can call lwgeom methods from ruby
14
14
  email: