rgeo 2.3.1 → 3.0.1
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/.yardopts +6 -0
- data/README.md +23 -14
- data/ext/geos_c_impl/analysis.c +30 -25
- data/ext/geos_c_impl/analysis.h +8 -7
- data/ext/geos_c_impl/coordinates.c +27 -21
- data/ext/geos_c_impl/coordinates.h +5 -2
- data/ext/geos_c_impl/errors.c +19 -10
- data/ext/geos_c_impl/errors.h +11 -4
- data/ext/geos_c_impl/extconf.rb +42 -28
- data/ext/geos_c_impl/factory.c +540 -451
- data/ext/geos_c_impl/factory.h +105 -95
- data/ext/geos_c_impl/geometry.c +593 -387
- data/ext/geos_c_impl/geometry.h +10 -5
- data/ext/geos_c_impl/geometry_collection.c +306 -339
- data/ext/geos_c_impl/geometry_collection.h +6 -20
- data/ext/geos_c_impl/globals.c +169 -0
- data/ext/geos_c_impl/globals.h +46 -0
- data/ext/geos_c_impl/line_string.c +271 -231
- data/ext/geos_c_impl/line_string.h +5 -8
- data/ext/geos_c_impl/main.c +16 -16
- data/ext/geos_c_impl/point.c +65 -67
- data/ext/geos_c_impl/point.h +4 -7
- data/ext/geos_c_impl/polygon.c +137 -135
- data/ext/geos_c_impl/polygon.h +11 -11
- data/ext/geos_c_impl/preface.h +16 -10
- data/ext/geos_c_impl/ruby_more.c +67 -0
- data/ext/geos_c_impl/ruby_more.h +25 -0
- data/lib/rgeo/cartesian/analysis.rb +5 -3
- data/lib/rgeo/cartesian/bounding_box.rb +74 -79
- data/lib/rgeo/cartesian/calculations.rb +64 -33
- data/lib/rgeo/cartesian/factory.rb +57 -102
- data/lib/rgeo/cartesian/feature_classes.rb +68 -46
- data/lib/rgeo/cartesian/feature_methods.rb +67 -25
- data/lib/rgeo/cartesian/interface.rb +6 -41
- data/lib/rgeo/cartesian/planar_graph.rb +373 -0
- data/lib/rgeo/cartesian/sweepline_intersector.rb +147 -0
- data/lib/rgeo/cartesian/valid_op.rb +69 -0
- data/lib/rgeo/cartesian.rb +3 -0
- data/lib/rgeo/coord_sys/cs/entities.rb +303 -99
- data/lib/rgeo/coord_sys/cs/factories.rb +0 -2
- data/lib/rgeo/coord_sys/cs/wkt_parser.rb +90 -42
- data/lib/rgeo/coord_sys.rb +1 -20
- data/lib/rgeo/error.rb +15 -0
- data/lib/rgeo/feature/curve.rb +0 -11
- data/lib/rgeo/feature/factory.rb +26 -36
- data/lib/rgeo/feature/factory_generator.rb +6 -14
- data/lib/rgeo/feature/geometry.rb +146 -66
- data/lib/rgeo/feature/geometry_collection.rb +16 -9
- data/lib/rgeo/feature/line_string.rb +4 -5
- data/lib/rgeo/feature/linear_ring.rb +0 -1
- data/lib/rgeo/feature/multi_curve.rb +0 -6
- data/lib/rgeo/feature/multi_surface.rb +3 -4
- data/lib/rgeo/feature/point.rb +4 -5
- data/lib/rgeo/feature/polygon.rb +1 -2
- data/lib/rgeo/feature/surface.rb +3 -4
- data/lib/rgeo/feature/types.rb +69 -85
- data/lib/rgeo/geographic/factory.rb +98 -125
- data/lib/rgeo/geographic/interface.rb +69 -166
- data/lib/rgeo/geographic/projected_feature_classes.rb +21 -9
- data/lib/rgeo/geographic/projected_feature_methods.rb +67 -42
- data/lib/rgeo/geographic/projected_window.rb +36 -22
- data/lib/rgeo/geographic/{proj4_projector.rb → projector.rb} +3 -5
- data/lib/rgeo/geographic/simple_mercator_projector.rb +26 -25
- data/lib/rgeo/geographic/spherical_feature_classes.rb +29 -9
- data/lib/rgeo/geographic/spherical_feature_methods.rb +86 -9
- data/lib/rgeo/geographic/spherical_math.rb +17 -20
- data/lib/rgeo/geographic.rb +1 -1
- data/lib/rgeo/geos/capi_factory.rb +87 -158
- data/lib/rgeo/geos/capi_feature_classes.rb +50 -36
- data/lib/rgeo/geos/ffi_factory.rb +105 -173
- data/lib/rgeo/geos/ffi_feature_classes.rb +34 -10
- data/lib/rgeo/geos/ffi_feature_methods.rb +105 -127
- data/lib/rgeo/geos/interface.rb +20 -59
- data/lib/rgeo/geos/utils.rb +5 -5
- data/lib/rgeo/geos/zm_factory.rb +53 -95
- data/lib/rgeo/geos/zm_feature_methods.rb +30 -33
- data/lib/rgeo/geos.rb +8 -8
- data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +9 -22
- data/lib/rgeo/impl_helper/basic_geometry_methods.rb +1 -2
- data/lib/rgeo/impl_helper/basic_line_string_methods.rb +28 -56
- data/lib/rgeo/impl_helper/basic_point_methods.rb +2 -14
- data/lib/rgeo/impl_helper/basic_polygon_methods.rb +17 -26
- data/lib/rgeo/impl_helper/utils.rb +21 -0
- data/lib/rgeo/impl_helper/valid_op.rb +350 -0
- data/lib/rgeo/impl_helper/validity_check.rb +139 -0
- data/lib/rgeo/impl_helper.rb +1 -0
- data/lib/rgeo/version.rb +1 -1
- data/lib/rgeo/wkrep/wkb_generator.rb +73 -63
- data/lib/rgeo/wkrep/wkb_parser.rb +33 -31
- data/lib/rgeo/wkrep/wkt_generator.rb +52 -45
- data/lib/rgeo/wkrep/wkt_parser.rb +48 -35
- data/lib/rgeo.rb +1 -3
- metadata +50 -13
- data/lib/rgeo/coord_sys/srs_database/entry.rb +0 -107
- data/lib/rgeo/coord_sys/srs_database/sr_org.rb +0 -64
- data/lib/rgeo/coord_sys/srs_database/url_reader.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 792e1494e9ef340bb740e8675b2ce67e4d02fa6c4333ad93c523e348e5153812
|
4
|
+
data.tar.gz: a4051c1728401caca45807c9e786a5e5130761c95a95ff6bdb60265130aa2049
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a6ee8000fd92f7bef89915d9d7e11aea0fb413248778d0f5e5218516d98cc6d16afba66d92c670c9f0539d37a6c7e934a5fcc3ad839626d7299b7c5ae8ffc57
|
7
|
+
data.tar.gz: 580f0a56261c8ab5698e14a78e7f61bcdb8fa362160db4ed1662dbb792d1d8ec7272a1e3387568b00c6b8403547aae128363ad230cf622ec5b5908a0e17b8d6f
|
data/.yardopts
ADDED
data/README.md
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
## RGeo
|
2
2
|
|
3
3
|
[](http://badge.fury.io/rb/rgeo)
|
4
|
-
[](https://github.com/rgeo/rgeo/actions?query=workflow%3ACI+branch%
|
4
|
+
[](https://github.com/rgeo/rgeo/actions?query=workflow%3ACI+branch%3Amain+event%3Apush)
|
5
5
|
|
6
6
|
RGeo is a geospatial data library for Ruby.
|
7
7
|
|
8
|
-
|
8
|
+
***Contributors Wanted!***
|
9
9
|
|
10
|
-
|
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
|
|
@@ -37,7 +36,7 @@ Use the core **rgeo** gem to:
|
|
37
36
|
|
38
37
|
RGeo works with the following Ruby implementations:
|
39
38
|
|
40
|
-
* MRI Ruby 2.
|
39
|
+
* MRI Ruby 2.6.0 or later.
|
41
40
|
* Partial support for JRuby 9.0 or later. The FFI implementation of GEOS
|
42
41
|
is available (ffi-geos gem required) but CAPI is not.
|
43
42
|
* See earlier versions for support for older ruby versions.
|
@@ -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
|
|
@@ -109,7 +116,7 @@ ActiveRecord connection adapter for SpatiaLite, based on sqlite3 (*not maintaine
|
|
109
116
|
RDoc Documentation is available at https://www.rubydoc.info/gems/rgeo
|
110
117
|
|
111
118
|
Contributions are welcome. Please read the
|
112
|
-
[Contributing guidelines](https://github.com/rgeo/rgeo/blob/
|
119
|
+
[Contributing guidelines](https://github.com/rgeo/rgeo/blob/main/CONTRIBUTING.md).
|
113
120
|
|
114
121
|
Support may be available on the
|
115
122
|
[rgeo-users google group](https://groups.google.com/forum/#!forum/rgeo-users)
|
@@ -124,13 +131,15 @@ generate documentation locally if you're working on RGeo: `yardoc server`.
|
|
124
131
|
|
125
132
|
Here's the current list of available topics:
|
126
133
|
|
127
|
-
- [An introduction to Spatial Programming With RGeo](https://github.com/rgeo/rgeo/blob/
|
128
|
-
- [Enable GEOS and Proj4 on Heroku](https://github.com/rgeo/rgeo/blob/
|
129
|
-
- [Installing GEOS](https://github.com/rgeo/rgeo/blob/
|
130
|
-
- [Factory Compatibility](https://github.com/rgeo/rgeo/blob/
|
131
|
-
- [Which factory should I use?](https://github.com/rgeo/rgeo/blob/
|
132
|
-
- [
|
133
|
-
- [
|
134
|
+
- [An introduction to Spatial Programming With RGeo](https://github.com/rgeo/rgeo/blob/main/doc/An-Introduction-to-Spatial-Programming-With-RGeo.md)
|
135
|
+
- [Enable GEOS and Proj4 on Heroku](https://github.com/rgeo/rgeo/blob/main/doc/Enable-GEOS-and-Proj4-on-Heroku.md)
|
136
|
+
- [Installing GEOS](https://github.com/rgeo/rgeo/blob/main/doc/Installing-GEOS.md)
|
137
|
+
- [Factory Compatibility](https://github.com/rgeo/rgeo/blob/main/doc/Factory-Compatibility.md)
|
138
|
+
- [Which factory should I use?](https://github.com/rgeo/rgeo/blob/main/doc/Which-factory-should-I-use.md)
|
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)
|
141
|
+
- [Examples](https://github.com/rgeo/rgeo/blob/main/doc/Examples.md)
|
142
|
+
- [Who uses `rgeo`?](https://github.com/rgeo/rgeo/blob/main/doc/Gallery.md)
|
134
143
|
|
135
144
|
You can see an exhaustive and up to date list at https://rubydoc.info/gems/rgeo/index.
|
136
145
|
### Acknowledgments
|
@@ -157,4 +166,4 @@ by [J Smith](https://github.com/dark-panda).
|
|
157
166
|
|
158
167
|
Copyright (c) Daniel Azuma, Tee Parham
|
159
168
|
|
160
|
-
[License](https://github.com/rgeo/rgeo/blob/
|
169
|
+
[License](https://github.com/rgeo/rgeo/blob/main/LICENSE.txt)
|
data/ext/geos_c_impl/analysis.c
CHANGED
@@ -6,12 +6,13 @@
|
|
6
6
|
|
7
7
|
#ifdef RGEO_GEOS_SUPPORTED
|
8
8
|
|
9
|
-
#include <ruby.h>
|
10
9
|
#include <geos_c.h>
|
10
|
+
#include <ruby.h>
|
11
11
|
|
12
12
|
#include "analysis.h"
|
13
|
-
#include "factory.h"
|
14
13
|
#include "errors.h"
|
14
|
+
#include "factory.h"
|
15
|
+
#include "globals.h"
|
15
16
|
|
16
17
|
RGEO_BEGIN_C
|
17
18
|
|
@@ -23,9 +24,9 @@ RGEO_BEGIN_C
|
|
23
24
|
* otherwise.
|
24
25
|
*/
|
25
26
|
#ifdef RGEO_GEOS_SUPPORTS_ISCCW
|
26
|
-
VALUE
|
27
|
+
VALUE
|
28
|
+
rgeo_geos_analysis_ccw_p(VALUE self, VALUE ring)
|
27
29
|
{
|
28
|
-
|
29
30
|
const RGeo_GeometryData* ring_data;
|
30
31
|
const GEOSCoordSequence* coord_seq;
|
31
32
|
char is_ccw;
|
@@ -34,43 +35,47 @@ VALUE rgeo_geos_analysis_ccw_p(VALUE self, VALUE ring)
|
|
34
35
|
|
35
36
|
ring_data = RGEO_GEOMETRY_DATA_PTR(ring);
|
36
37
|
|
37
|
-
coord_seq =
|
38
|
-
if (!coord_seq) {
|
39
|
-
|
40
|
-
|
38
|
+
coord_seq = GEOSGeom_getCoordSeq(ring_data->geom);
|
39
|
+
if (!coord_seq) {
|
40
|
+
rb_raise(rb_eGeosError, "Could not retrieve CoordSeq from given ring.");
|
41
|
+
}
|
42
|
+
if (!GEOSCoordSeq_isCCW(coord_seq, &is_ccw)) {
|
43
|
+
rb_raise(rb_eGeosError, "Could not determine if the CoordSeq is CCW.");
|
41
44
|
}
|
42
45
|
|
43
46
|
return is_ccw ? Qtrue : Qfalse;
|
44
|
-
}
|
47
|
+
}
|
45
48
|
#endif // RGEO_GEOS_SUPPORTS_ISCCW
|
46
49
|
|
47
|
-
|
48
50
|
/**
|
49
51
|
* call-seq:
|
50
|
-
* RGeo::Geos::Analysis.ccw_supported? -> true or false
|
51
|
-
*
|
52
|
+
* RGeo::Geos::Analysis.ccw_supported? -> true or false
|
53
|
+
*
|
52
54
|
* Checks if the RGEO_GEOS_SUPPORTS_ISCCW macro is defined, returns +true+
|
53
55
|
* if it is, +false+ otherwise
|
54
56
|
*/
|
55
|
-
VALUE
|
57
|
+
VALUE
|
58
|
+
rgeo_geos_analysis_supports_ccw(VALUE self)
|
56
59
|
{
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
60
|
+
#ifdef RGEO_GEOS_SUPPORTS_ISCCW
|
61
|
+
return Qtrue;
|
62
|
+
#else
|
63
|
+
return Qfalse;
|
64
|
+
#endif
|
62
65
|
}
|
63
66
|
|
64
|
-
|
65
|
-
|
67
|
+
void
|
68
|
+
rgeo_init_geos_analysis()
|
66
69
|
{
|
67
70
|
VALUE geos_analysis_module;
|
68
71
|
|
69
|
-
geos_analysis_module = rb_define_module_under(
|
70
|
-
rb_define_singleton_method(
|
71
|
-
|
72
|
-
|
73
|
-
|
72
|
+
geos_analysis_module = rb_define_module_under(rgeo_geos_module, "Analysis");
|
73
|
+
rb_define_singleton_method(
|
74
|
+
geos_analysis_module, "ccw_supported?", rgeo_geos_analysis_supports_ccw, 0);
|
75
|
+
#ifdef RGEO_GEOS_SUPPORTS_ISCCW
|
76
|
+
rb_define_singleton_method(
|
77
|
+
geos_analysis_module, "ccw?", rgeo_geos_analysis_ccw_p, 1);
|
78
|
+
#endif // RGEO_GEOS_SUPPORTS_ISCCW
|
74
79
|
}
|
75
80
|
|
76
81
|
RGEO_END_C
|
data/ext/geos_c_impl/analysis.h
CHANGED
@@ -9,8 +9,6 @@
|
|
9
9
|
|
10
10
|
#ifdef RGEO_GEOS_SUPPORTED
|
11
11
|
|
12
|
-
#include "factory.h"
|
13
|
-
|
14
12
|
RGEO_BEGIN_C
|
15
13
|
|
16
14
|
/*
|
@@ -21,19 +19,22 @@ RGEO_BEGIN_C
|
|
21
19
|
* otherwise.
|
22
20
|
*/
|
23
21
|
#ifdef RGEO_GEOS_SUPPORTS_CCW
|
24
|
-
VALUE
|
22
|
+
VALUE
|
23
|
+
rgeo_geos_analysis_ccw_p(VALUE self, VALUE ring);
|
25
24
|
#endif // RGEO_GEOS_SUPPORTS_CCW
|
26
25
|
|
27
26
|
/**
|
28
27
|
* call-seq:
|
29
|
-
* RGeo::Geos::Analysis.ccw_supported? -> true or false
|
30
|
-
*
|
28
|
+
* RGeo::Geos::Analysis.ccw_supported? -> true or false
|
29
|
+
*
|
31
30
|
* Checks if the RGEO_GEOS_SUPPORTS_ISCCW macro is defined, returns +true+
|
32
31
|
* if it is, +false+ otherwise
|
33
32
|
*/
|
34
|
-
VALUE
|
33
|
+
VALUE
|
34
|
+
rgeo_geos_analysis_supports_ccw(VALUE self);
|
35
35
|
|
36
|
-
void
|
36
|
+
void
|
37
|
+
rgeo_init_geos_analysis();
|
37
38
|
|
38
39
|
RGEO_END_C
|
39
40
|
|
@@ -1,8 +1,9 @@
|
|
1
|
-
#include <ruby.h>
|
2
1
|
#include <geos_c.h>
|
2
|
+
#include <ruby.h>
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
VALUE
|
5
|
+
extract_points_from_coordinate_sequence(const GEOSCoordSequence* coord_sequence,
|
6
|
+
int zCoordinate)
|
6
7
|
{
|
7
8
|
VALUE result = Qnil;
|
8
9
|
VALUE point;
|
@@ -10,20 +11,20 @@ VALUE extract_points_from_coordinate_sequence(GEOSContextHandle_t context, const
|
|
10
11
|
unsigned int i;
|
11
12
|
double val;
|
12
13
|
|
13
|
-
if(
|
14
|
+
if (GEOSCoordSeq_getSize(coord_sequence, &count)) {
|
14
15
|
result = rb_ary_new2(count);
|
15
|
-
for(i = 0; i < count; ++i) {
|
16
|
-
if(zCoordinate) {
|
16
|
+
for (i = 0; i < count; ++i) {
|
17
|
+
if (zCoordinate) {
|
17
18
|
point = rb_ary_new2(3);
|
18
19
|
} else {
|
19
20
|
point = rb_ary_new2(2);
|
20
21
|
}
|
21
|
-
|
22
|
+
GEOSCoordSeq_getX(coord_sequence, i, &val);
|
22
23
|
rb_ary_push(point, rb_float_new(val));
|
23
|
-
|
24
|
+
GEOSCoordSeq_getY(coord_sequence, i, &val);
|
24
25
|
rb_ary_push(point, rb_float_new(val));
|
25
|
-
if(zCoordinate) {
|
26
|
-
|
26
|
+
if (zCoordinate) {
|
27
|
+
GEOSCoordSeq_getZ(coord_sequence, i, &val);
|
27
28
|
rb_ary_push(point, rb_float_new(val));
|
28
29
|
}
|
29
30
|
rb_ary_push(result, point);
|
@@ -33,7 +34,8 @@ VALUE extract_points_from_coordinate_sequence(GEOSContextHandle_t context, const
|
|
33
34
|
return result;
|
34
35
|
}
|
35
36
|
|
36
|
-
VALUE
|
37
|
+
VALUE
|
38
|
+
extract_points_from_polygon(const GEOSGeometry* polygon, int zCoordinate)
|
37
39
|
{
|
38
40
|
VALUE result = Qnil;
|
39
41
|
|
@@ -43,20 +45,24 @@ VALUE extract_points_from_polygon(GEOSContextHandle_t context, const GEOSGeometr
|
|
43
45
|
unsigned int i;
|
44
46
|
|
45
47
|
if (polygon) {
|
46
|
-
ring =
|
47
|
-
coord_sequence =
|
48
|
+
ring = GEOSGetExteriorRing(polygon);
|
49
|
+
coord_sequence = GEOSGeom_getCoordSeq(ring);
|
48
50
|
|
49
|
-
if(coord_sequence) {
|
50
|
-
interior_ring_count =
|
51
|
+
if (coord_sequence) {
|
52
|
+
interior_ring_count = GEOSGetNumInteriorRings(polygon);
|
51
53
|
result = rb_ary_new2(interior_ring_count + 1); // exterior + inner rings
|
52
54
|
|
53
|
-
rb_ary_push(
|
55
|
+
rb_ary_push(
|
56
|
+
result,
|
57
|
+
extract_points_from_coordinate_sequence(coord_sequence, zCoordinate));
|
54
58
|
|
55
|
-
for(i = 0; i < interior_ring_count; ++i) {
|
56
|
-
ring =
|
57
|
-
coord_sequence =
|
58
|
-
if(coord_sequence) {
|
59
|
-
rb_ary_push(result,
|
59
|
+
for (i = 0; i < interior_ring_count; ++i) {
|
60
|
+
ring = GEOSGetInteriorRingN(polygon, i);
|
61
|
+
coord_sequence = GEOSGeom_getCoordSeq(ring);
|
62
|
+
if (coord_sequence) {
|
63
|
+
rb_ary_push(result,
|
64
|
+
extract_points_from_coordinate_sequence(coord_sequence,
|
65
|
+
zCoordinate));
|
60
66
|
}
|
61
67
|
}
|
62
68
|
}
|
@@ -1,2 +1,5 @@
|
|
1
|
-
VALUE
|
2
|
-
|
1
|
+
VALUE
|
2
|
+
extract_points_from_coordinate_sequence(const GEOSCoordSequence* coord_sequence,
|
3
|
+
int zCoordinate);
|
4
|
+
VALUE
|
5
|
+
extract_points_from_polygon(const GEOSGeometry* polygon, int zCoordinate);
|
data/ext/geos_c_impl/errors.c
CHANGED
@@ -9,23 +9,32 @@
|
|
9
9
|
#ifdef RGEO_GEOS_SUPPORTED
|
10
10
|
|
11
11
|
#include "errors.h"
|
12
|
+
#include "globals.h"
|
12
13
|
|
13
14
|
RGEO_BEGIN_C
|
14
15
|
|
15
|
-
|
16
|
-
VALUE
|
17
|
-
|
18
|
-
VALUE
|
16
|
+
VALUE rb_eRGeoError;
|
17
|
+
VALUE rb_eRGeoInvalidGeometry;
|
18
|
+
VALUE rb_eRGeoParseError;
|
19
|
+
VALUE rb_eRGeoUnsupportedOperation;
|
20
|
+
VALUE rb_eGeosError;
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
22
|
+
void
|
23
|
+
rgeo_init_geos_errors()
|
24
|
+
{
|
23
25
|
VALUE error_module;
|
24
26
|
|
25
|
-
rgeo_module = rb_define_module("RGeo");
|
26
27
|
error_module = rb_define_module_under(rgeo_module, "Error");
|
27
|
-
|
28
|
-
|
28
|
+
rb_eRGeoError =
|
29
|
+
rb_define_class_under(error_module, "RGeoError", rb_eRuntimeError);
|
30
|
+
rb_eRGeoInvalidGeometry =
|
31
|
+
rb_define_class_under(error_module, "InvalidGeometry", rb_eRGeoError);
|
32
|
+
rb_eRGeoUnsupportedOperation =
|
33
|
+
rb_define_class_under(error_module, "UnsupportedOperation", rb_eRGeoError);
|
34
|
+
rb_eRGeoParseError =
|
35
|
+
rb_define_class_under(error_module, "ParseError", rb_eRGeoError);
|
36
|
+
rb_eGeosError =
|
37
|
+
rb_define_class_under(error_module, "GeosError", rb_eRGeoError);
|
29
38
|
}
|
30
39
|
|
31
40
|
RGEO_END_C
|
data/ext/geos_c_impl/errors.h
CHANGED
@@ -8,12 +8,19 @@
|
|
8
8
|
|
9
9
|
RGEO_BEGIN_C
|
10
10
|
|
11
|
-
//
|
12
|
-
extern VALUE
|
11
|
+
// Main rgeo error type
|
12
|
+
extern VALUE rb_eRGeoError;
|
13
|
+
// RGeo::Error::InvalidGeometry
|
14
|
+
extern VALUE rb_eRGeoInvalidGeometry;
|
15
|
+
// RGeo::Error::ParseError
|
16
|
+
extern VALUE rb_eRGeoParseError;
|
17
|
+
// RGeo::Error::UnsupportedOperation
|
18
|
+
extern VALUE rb_eRGeoUnsupportedOperation;
|
13
19
|
// RGeo error specific to the GEOS implementation.
|
14
|
-
extern VALUE
|
20
|
+
extern VALUE rb_eGeosError;
|
15
21
|
|
16
|
-
void
|
22
|
+
void
|
23
|
+
rgeo_init_geos_errors();
|
17
24
|
|
18
25
|
RGEO_END_C
|
19
26
|
|
data/ext/geos_c_impl/extconf.rb
CHANGED
@@ -6,42 +6,56 @@
|
|
6
6
|
#
|
7
7
|
# -----------------------------------------------------------------------------
|
8
8
|
def create_dummy_makefile
|
9
|
-
File.
|
9
|
+
File.write("Makefile", ".PHONY: install\ninstall:\n")
|
10
10
|
end
|
11
11
|
|
12
12
|
if RUBY_DESCRIPTION =~ /^jruby\s/
|
13
13
|
create_dummy_makefile
|
14
|
-
|
15
|
-
|
14
|
+
exit
|
15
|
+
end
|
16
16
|
|
17
|
-
|
17
|
+
require "mkmf"
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
19
|
+
if ENV.key?("DEBUG") || ENV.key?("MAINTAINER_MODE")
|
20
|
+
$CFLAGS << " -DDEBUG" \
|
21
|
+
" -Wall" \
|
22
|
+
" -ggdb" \
|
23
|
+
" -pedantic" \
|
24
|
+
" -std=c17"
|
27
25
|
|
28
|
-
|
29
|
-
if
|
30
|
-
|
31
|
-
have_func("GEOSPreparedContains_r", "geos_c.h")
|
32
|
-
have_func("GEOSPreparedDisjoint_r", "geos_c.h")
|
33
|
-
have_func("GEOSUnaryUnion_r", "geos_c.h")
|
34
|
-
have_func("GEOSCoordSeq_isCCW_r", "geos_c.h")
|
35
|
-
have_func("rb_memhash", "ruby.h")
|
36
|
-
end
|
26
|
+
extra_flags = ENV.fetch("MAINTAINER_MODE", ENV.fetch("DEBUG", ""))
|
27
|
+
$CFLAGS << " " << extra_flags if extra_flags.strip.start_with?("-")
|
28
|
+
end
|
37
29
|
|
38
|
-
|
39
|
-
create_makefile("rgeo/geos/geos_c_impl")
|
40
|
-
else
|
41
|
-
puts "**** WARNING: Unable to find GEOS headers or libraries."
|
42
|
-
puts "**** Ensure that 'geos-config' is in your PATH or provide that full path via --with-geos-config"
|
43
|
-
puts "**** Compiling without GEOS support."
|
30
|
+
geosconfig = with_config("geos-config") || find_executable("geos-config")
|
44
31
|
|
45
|
-
|
32
|
+
if geosconfig
|
33
|
+
puts "Using GEOS compile configuration from #{geosconfig}"
|
34
|
+
$INCFLAGS << " " << IO.popen([geosconfig, "--cflags"], &:read).strip
|
35
|
+
geos_libs = IO.popen([geosconfig, "--clibs"], &:read)
|
36
|
+
geos_libs.split.each do |flag|
|
37
|
+
$libs << " " << flag unless $libs.include?(flag)
|
46
38
|
end
|
47
39
|
end
|
40
|
+
|
41
|
+
found_geos = false
|
42
|
+
if have_header("geos_c.h")
|
43
|
+
found_geos = true if have_func("GEOSSetSRID_r", "geos_c.h")
|
44
|
+
have_func("GEOSPreparedContains_r", "geos_c.h")
|
45
|
+
have_func("GEOSPreparedDisjoint_r", "geos_c.h")
|
46
|
+
have_func("GEOSUnaryUnion_r", "geos_c.h")
|
47
|
+
have_func("GEOSCoordSeq_isCCW_r", "geos_c.h")
|
48
|
+
have_func("GEOSDensify", "geos_c.h")
|
49
|
+
have_func("rb_memhash", "ruby.h")
|
50
|
+
have_func("rb_gc_mark_movable", "ruby.h")
|
51
|
+
end
|
52
|
+
|
53
|
+
if found_geos
|
54
|
+
create_makefile("rgeo/geos/geos_c_impl")
|
55
|
+
else
|
56
|
+
puts "**** WARNING: Unable to find GEOS headers or libraries."
|
57
|
+
puts "**** Ensure that 'geos-config' is in your PATH or provide that full path via --with-geos-config"
|
58
|
+
puts "**** Compiling without GEOS support."
|
59
|
+
|
60
|
+
create_dummy_makefile
|
61
|
+
end
|