Changeset: 27511903bc8d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=27511903bc8d
Modified Files:
geom/monetdb5/geom.c
geom/monetdb5/geom.h
Branch: sfcgal
Log Message:
Better control for errors. If you getNumberGeometries returns one and you are
able to get the Geometry, despite it was not extracted from a multi-geometry,
do not return error but the geometry
diffs (97 lines):
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -2363,6 +2363,7 @@ wkbsubPolygonize(bat *outBAT_id, bat* bB
str wkbSimplify(wkb** outWKB, wkb** geom, float* tolerance){
GEOSGeom geosGeometry = wkb2geos(*geom);
GEOSGeometry* outGeometry;
+ int srid;
if(!(outGeometry = GEOSSimplify(geosGeometry, *tolerance))) {
*outWKB = NULL;
@@ -2370,8 +2371,10 @@ str wkbSimplify(wkb** outWKB, wkb** geom
return createException(MAL, "geom.Simplify", "GEOSSimplify
failed");
}
+ srid = GEOSGetSRID(geosGeometry);
GEOSGeom_destroy(geosGeometry);
+ GEOSSetSRID(outGeometry, srid);
*outWKB = geos2wkb(outGeometry);
GEOSGeom_destroy(outGeometry);
@@ -2381,6 +2384,7 @@ str wkbSimplify(wkb** outWKB, wkb** geom
str wkbSimplifyPreserveTopology(wkb** outWKB, wkb** geom, float* tolerance){
GEOSGeom geosGeometry = wkb2geos(*geom);
GEOSGeometry* outGeometry;
+ int srid;
if(!(outGeometry = GEOSTopologyPreserveSimplify(geosGeometry,
*tolerance))) {
*outWKB = NULL;
@@ -2388,8 +2392,10 @@ str wkbSimplifyPreserveTopology(wkb** ou
return createException(MAL, "geom.SimplifyPreserveTopology",
"GEOSTopologyPreserveSimplify failed");
}
+ srid = GEOSGetSRID(geosGeometry);
GEOSGeom_destroy(geosGeometry);
+ GEOSSetSRID(outGeometry, srid);
*outWKB = geos2wkb(outGeometry);
GEOSGeom_destroy(outGeometry);
@@ -6036,6 +6042,8 @@ wkbGeometryN(wkb **out, wkb **geom, cons
{
int geometriesNum = -1;
GEOSGeom geosGeometry = NULL;
+ const GEOSGeometry *outGeometry = NULL;
+ str err = MAL_SUCCEED;
//no geometry at this position
if (wkb_isnil(*geom) || *geometryNum == int_nil || *geometryNum <= 0) {
@@ -6057,18 +6065,25 @@ wkbGeometryN(wkb **out, wkb **geom, cons
GEOSGeom_destroy(geosGeometry);
throw(MAL, "geom.GeometryN", "GEOSGetNumGeometries failed");
}
- if (geometriesNum == 1 || //geometry is not a multi geometry
- geometriesNum < *geometryNum) { //no geometry at this position
+
+ if (geometriesNum < *geometryNum) { //no geometry at this position
GEOSGeom_destroy(geosGeometry);
if ((*out = wkbNULLcopy()) == NULL)
throw(MAL, "geom.GeometryN", MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
- *out = geos2wkb(GEOSGetGeometryN(geosGeometry, *geometryNum - 1));
+ if ( (outGeometry = GEOSGetGeometryN(geosGeometry, *geometryNum - 1)) ==
NULL) {
+ GEOSGeom_destroy(geosGeometry);
+ throw(MAL, "geom.GeometryN", "GEOSGetGeometryN failed");
+ }
+
+ if ( (*out = geos2wkb(outGeometry)) == NULL) {
+ GEOSGeom_destroy(geosGeometry);
+ throw(MAL, "geom.GeometryN", "geos2wkb failed:%s", err);
+ }
+
GEOSGeom_destroy(geosGeometry);
- if (*out == NULL)
- throw(MAL, "geom.GeometryN", MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
diff --git a/geom/monetdb5/geom.h b/geom/monetdb5/geom.h
--- a/geom/monetdb5/geom.h
+++ b/geom/monetdb5/geom.h
@@ -38,9 +38,9 @@
#define geom_export extern
#endif
-#define GEOMBULK_DEBUG 1
-#define OPENCL_DYNAMIC 1
-#define OPENCL_THREADS 8
+//#define GEOMBULK_DEBUG 1
+#define OPENCL_DYNAMIC 0
+#define OPENCL_THREADS 1
#define BATrmprops(b) \
b->tsorted = b->trevsorted = 0; \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list