rgeo 3.0.0.pre.rc.3 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -3
  3. data/ext/geos_c_impl/extconf.rb +1 -0
  4. data/ext/geos_c_impl/factory.c +43 -5
  5. data/ext/geos_c_impl/factory.h +13 -2
  6. data/ext/geos_c_impl/geometry.c +178 -122
  7. data/ext/geos_c_impl/geometry_collection.c +17 -19
  8. data/ext/geos_c_impl/line_string.c +46 -36
  9. data/ext/geos_c_impl/point.c +0 -2
  10. data/ext/geos_c_impl/polygon.c +10 -11
  11. data/ext/geos_c_impl/polygon.h +1 -1
  12. data/ext/geos_c_impl/preface.h +3 -0
  13. data/ext/geos_c_impl/ruby_more.c +7 -0
  14. data/ext/geos_c_impl/ruby_more.h +8 -0
  15. data/lib/rgeo/cartesian/analysis.rb +5 -3
  16. data/lib/rgeo/cartesian/bounding_box.rb +74 -79
  17. data/lib/rgeo/cartesian/calculations.rb +20 -26
  18. data/lib/rgeo/cartesian/factory.rb +47 -49
  19. data/lib/rgeo/cartesian/planar_graph.rb +10 -16
  20. data/lib/rgeo/cartesian/sweepline_intersector.rb +1 -3
  21. data/lib/rgeo/cartesian/valid_op.rb +1 -3
  22. data/lib/rgeo/coord_sys/cs/entities.rb +91 -101
  23. data/lib/rgeo/coord_sys/cs/factories.rb +0 -2
  24. data/lib/rgeo/coord_sys/cs/wkt_parser.rb +70 -29
  25. data/lib/rgeo/feature/curve.rb +0 -1
  26. data/lib/rgeo/feature/factory.rb +25 -27
  27. data/lib/rgeo/feature/factory_generator.rb +3 -4
  28. data/lib/rgeo/feature/geometry.rb +41 -30
  29. data/lib/rgeo/feature/geometry_collection.rb +3 -4
  30. data/lib/rgeo/feature/line_string.rb +1 -2
  31. data/lib/rgeo/feature/linear_ring.rb +0 -1
  32. data/lib/rgeo/feature/multi_curve.rb +0 -1
  33. data/lib/rgeo/feature/multi_surface.rb +0 -1
  34. data/lib/rgeo/feature/point.rb +0 -1
  35. data/lib/rgeo/feature/polygon.rb +1 -2
  36. data/lib/rgeo/feature/surface.rb +0 -1
  37. data/lib/rgeo/feature/types.rb +69 -85
  38. data/lib/rgeo/geographic/factory.rb +87 -80
  39. data/lib/rgeo/geographic/interface.rb +44 -27
  40. data/lib/rgeo/geographic/projected_feature_methods.rb +2 -6
  41. data/lib/rgeo/geographic/projected_window.rb +35 -21
  42. data/lib/rgeo/geographic/simple_mercator_projector.rb +27 -15
  43. data/lib/rgeo/geographic/spherical_feature_methods.rb +8 -3
  44. data/lib/rgeo/geographic/spherical_math.rb +17 -20
  45. data/lib/rgeo/geos/capi_factory.rb +50 -50
  46. data/lib/rgeo/geos/ffi_factory.rb +50 -49
  47. data/lib/rgeo/geos/ffi_feature_methods.rb +72 -98
  48. data/lib/rgeo/geos/interface.rb +16 -16
  49. data/lib/rgeo/geos/utils.rb +5 -5
  50. data/lib/rgeo/geos/zm_factory.rb +50 -42
  51. data/lib/rgeo/geos/zm_feature_methods.rb +15 -9
  52. data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +4 -4
  53. data/lib/rgeo/impl_helper/basic_geometry_methods.rb +1 -2
  54. data/lib/rgeo/impl_helper/basic_line_string_methods.rb +18 -24
  55. data/lib/rgeo/impl_helper/basic_point_methods.rb +1 -3
  56. data/lib/rgeo/impl_helper/basic_polygon_methods.rb +15 -16
  57. data/lib/rgeo/impl_helper/utils.rb +3 -9
  58. data/lib/rgeo/impl_helper/valid_op.rb +12 -16
  59. data/lib/rgeo/version.rb +1 -1
  60. data/lib/rgeo/wkrep/wkb_generator.rb +42 -47
  61. data/lib/rgeo/wkrep/wkb_parser.rb +17 -18
  62. data/lib/rgeo/wkrep/wkt_generator.rb +23 -16
  63. data/lib/rgeo/wkrep/wkt_parser.rb +23 -13
  64. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91ca209240d93482556f0aaf2b1dcb3beca7710af47a3cba6b12014a09a8b3be
4
- data.tar.gz: b22b62247f1c4f3d07d4e7e4c1552999ae42d1d0d94808cc2fa7805e48914acd
3
+ metadata.gz: 792e1494e9ef340bb740e8675b2ce67e4d02fa6c4333ad93c523e348e5153812
4
+ data.tar.gz: a4051c1728401caca45807c9e786a5e5130761c95a95ff6bdb60265130aa2049
5
5
  SHA512:
6
- metadata.gz: 803a18e2ccb670da3db22c630bda86bb6ad80643c8a3e4e6bae448a1e3003632904bdf90b2d7642601857c01b92ffbf4a5e354fd292fb85033db7c0e19cd49b3
7
- data.tar.gz: 142ada28031864f3a2960605b504aa3daf222db98d190fc208589b31841f328cefb5192391594a6237b48d1aab907eae2250e63c12824ef65d22f6ca01546057
6
+ metadata.gz: 3a6ee8000fd92f7bef89915d9d7e11aea0fb413248778d0f5e5218516d98cc6d16afba66d92c670c9f0539d37a6c7e934a5fcc3ad839626d7299b7c5ae8ffc57
7
+ data.tar.gz: 580f0a56261c8ab5698e14a78e7f61bcdb8fa362160db4ed1662dbb792d1d8ec7272a1e3387568b00c6b8403547aae128363ad230cf622ec5b5908a0e17b8d6f
data/README.md CHANGED
@@ -5,11 +5,10 @@
5
5
 
6
6
  RGeo is a geospatial data library for Ruby.
7
7
 
8
- :warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning:
8
+ ***Contributors Wanted!***
9
9
 
10
- This organization is looking for maintainers, see [this issue](https://github.com/rgeo/rgeo/issues/216) for more information.
10
+ If you use RGeo and are interested in contributing, please check out our [open issues](https://github.com/rgeo/rgeo/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%2C%22help+wanted%22) to see if there's anything you're able to help with.
11
11
 
12
- :warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning::warning:
13
12
 
14
13
  ### Summary
15
14
 
@@ -74,6 +73,14 @@ If you are using proj.4 extensions, include
74
73
  gem "rgeo-proj4"
75
74
  ```
76
75
 
76
+ ### Upgrading to Version 3.0
77
+
78
+ See [doc/Upgrading-to-v3.md](doc/Upgrading-to-v3.md) for a checklist of changes to make before upgrading to RGeo 3.0.
79
+
80
+ For a brief overview of the changes, see [NEWS.md](NEWS.md).
81
+
82
+ For a comprehensive list of all changes, see [History.md](History.md).
83
+
77
84
 
78
85
  ### Extensions
79
86
 
@@ -130,6 +137,7 @@ Here's the current list of available topics:
130
137
  - [Factory Compatibility](https://github.com/rgeo/rgeo/blob/main/doc/Factory-Compatibility.md)
131
138
  - [Which factory should I use?](https://github.com/rgeo/rgeo/blob/main/doc/Which-factory-should-I-use.md)
132
139
  - [Geometry validity handling](https://github.com/rgeo/rgeo/blob/main/doc/Geometry-Validity.md)
140
+ - [Upgrading to Version 3](https://github.com/rgeo/rgeo/blob/main/doc/Upgrading-to-v3.md)
133
141
  - [Examples](https://github.com/rgeo/rgeo/blob/main/doc/Examples.md)
134
142
  - [Who uses `rgeo`?](https://github.com/rgeo/rgeo/blob/main/doc/Gallery.md)
135
143
 
@@ -45,6 +45,7 @@ if have_header("geos_c.h")
45
45
  have_func("GEOSPreparedDisjoint_r", "geos_c.h")
46
46
  have_func("GEOSUnaryUnion_r", "geos_c.h")
47
47
  have_func("GEOSCoordSeq_isCCW_r", "geos_c.h")
48
+ have_func("GEOSDensify", "geos_c.h")
48
49
  have_func("rb_memhash", "ruby.h")
49
50
  have_func("rb_gc_mark_movable", "ruby.h")
50
51
  end
@@ -378,6 +378,7 @@ method_factory_write_for_marshal(VALUE self, VALUE obj)
378
378
  wkb_writer = self_data->marshal_wkb_writer;
379
379
  if (!wkb_writer) {
380
380
  wkb_writer = GEOSWKBWriter_create();
381
+ GEOSWKBWriter_setOutputDimension(wkb_writer, 2);
381
382
  if (has_3d) {
382
383
  GEOSWKBWriter_setOutputDimension(wkb_writer, 3);
383
384
  }
@@ -427,6 +428,7 @@ method_factory_write_for_psych(VALUE self, VALUE obj)
427
428
  wkt_writer = self_data->psych_wkt_writer;
428
429
  if (!wkt_writer) {
429
430
  wkt_writer = GEOSWKTWriter_create();
431
+ GEOSWKTWriter_setOutputDimension(wkt_writer, 2);
430
432
  GEOSWKTWriter_setTrim(wkt_writer, 1);
431
433
  if (has_3d) {
432
434
  GEOSWKTWriter_setOutputDimension(wkt_writer, 3);
@@ -820,7 +822,7 @@ rgeo_wrap_geos_geometry_clone(VALUE factory,
820
822
  }
821
823
 
822
824
  const GEOSGeometry*
823
- rgeo_convert_to_geos_geometry(VALUE factory, VALUE obj, VALUE type)
825
+ rgeo_convert_to_geos_geometry(VALUE factory, VALUE obj, VALUE type, int* state)
824
826
  {
825
827
  VALUE object;
826
828
 
@@ -831,10 +833,28 @@ rgeo_convert_to_geos_geometry(VALUE factory, VALUE obj, VALUE type)
831
833
  object =
832
834
  rb_funcall(rgeo_feature_module, rb_intern("cast"), 3, obj, factory, type);
833
835
  }
834
- if (NIL_P(object))
836
+ if (NIL_P(object)) {
837
+ rb_protect(
838
+ rb_exc_raise_value,
839
+ rb_exc_new_cstr(rb_eRGeoInvalidGeometry,
840
+ "Unable to cast the geometry to the GEOS Factory"),
841
+ state);
842
+ }
843
+
844
+ if (*state) {
845
+ return NULL;
846
+ }
847
+
848
+ if (!rgeo_is_geos_object(object)) {
849
+ rb_protect(rb_exc_raise_value,
850
+ rb_exc_new_cstr(rb_eRGeoError, "Not a GEOS Geometry object."),
851
+ state);
852
+ }
853
+
854
+ if (*state) {
835
855
  return NULL;
856
+ }
836
857
 
837
- Check_TypedStruct(object, &rgeo_geometry_type);
838
858
  return RGEO_GEOMETRY_DATA_PTR(object)->geom;
839
859
  }
840
860
 
@@ -849,6 +869,7 @@ rgeo_convert_to_detached_geos_geometry(VALUE obj,
849
869
  GEOSGeometry* geom;
850
870
  RGeo_GeometryData* object_data;
851
871
  const GEOSPreparedGeometry* prep;
872
+
852
873
  if (klasses) {
853
874
  *klasses = Qnil;
854
875
  }
@@ -862,7 +883,24 @@ rgeo_convert_to_detached_geos_geometry(VALUE obj,
862
883
  type,
863
884
  ID2SYM(rb_intern("force_new")),
864
885
  ID2SYM(rb_intern("keep_subtype")));
865
- if (*state || NIL_P(object)) {
886
+
887
+ if (NIL_P(object)) {
888
+ rb_protect(
889
+ rb_exc_raise_value,
890
+ rb_exc_new_cstr(rb_eRGeoInvalidGeometry,
891
+ "Unable to cast the geometry to the GEOS Factory"),
892
+ state);
893
+ }
894
+ if (*state) {
895
+ return NULL;
896
+ }
897
+
898
+ if (!rgeo_is_geos_object(object)) {
899
+ rb_protect(rb_exc_raise_value,
900
+ rb_exc_new_cstr(rb_eRGeoError, "Not a GEOS Geometry object."),
901
+ state);
902
+ }
903
+ if (*state) {
866
904
  return NULL;
867
905
  }
868
906
 
@@ -1023,7 +1061,7 @@ rgeo_geos_coordseq_hash(const GEOSGeometry* geom, st_index_t hash)
1023
1061
  for (i = 0; i < len; ++i) {
1024
1062
  if (GEOSCoordSeq_getX(cs, i, &hash_struct.x)) {
1025
1063
  if (GEOSCoordSeq_getY(cs, i, &hash_struct.y)) {
1026
- if (!GEOSCoordSeq_getY(cs, i, &hash_struct.z)) {
1064
+ if (!GEOSCoordSeq_getZ(cs, i, &hash_struct.z)) {
1027
1065
  hash_struct.z = 0;
1028
1066
  }
1029
1067
  hash_struct.seed_hash = hash;
@@ -154,9 +154,18 @@ rgeo_wrap_geos_geometry_clone(VALUE factory,
154
154
  specified by an appropriate feature module. Passing Qnil for the type
155
155
  disables this auto-cast. The returned GEOS geometry is owned by rgeo,
156
156
  and you should not dispose it or take ownership of it yourself.
157
+
158
+ The state parameter is given to follow `rb_protect*` ruby methods: this
159
+ method calls `#cast`, and this call may raise. if it does raise, state
160
+ will be set to a non-zero value, and you'll have access to the error
161
+ in `rb_errinfo()`. IT IS THE CALLER'S RESPONSIBILITY TO PROPAGATE THE
162
+ ERROR. You could also discard the error with `rb_set_errinfo(Qnil)`,
163
+ this will just ignore the error altogether. The error can be raised
164
+ with `rb_jump_tag(state)` which is helpful if you need to free data
165
+ before you raise the error.
157
166
  */
158
167
  const GEOSGeometry*
159
- rgeo_convert_to_geos_geometry(VALUE factory, VALUE obj, VALUE type);
168
+ rgeo_convert_to_geos_geometry(VALUE factory, VALUE obj, VALUE type, int* state);
160
169
 
161
170
  /*
162
171
  Gets a GEOS geometry for a given ruby Geometry object. You must provide
@@ -179,7 +188,9 @@ rgeo_convert_to_geos_geometry(VALUE factory, VALUE obj, VALUE type);
179
188
  will be set to a non-zero value, and you'll have access to the error
180
189
  in `rb_errinfo()`. IT IS THE CALLER'S RESPONSIBILITY TO PROPAGATE THE
181
190
  ERROR. You could also discard the error with `rb_set_errinfo(Qnil)`,
182
- this will just ignore the error altogether.
191
+ this will just ignore the error altogether. The error can be raised
192
+ with `rb_jump_tag(state)` which is helpful if you need to free data
193
+ before you raise the error.
183
194
  */
184
195
  GEOSGeometry*
185
196
  rgeo_convert_to_detached_geos_geometry(VALUE obj,