void object::test<2> () { numcalls = 0; initGEOS(notice, notice); GEOS_interruptRegisterCallback(countCalls); ensure_equals(numcalls, 0); GEOSGeometry* geom1 = GEOSGeomFromWKT("LINESTRING(0 0, 1 1, 2 2, 4 4)"); GEOSGeometry* geom2 = GEOSGeomFromWKT("LINESTRING(0 0, 1 1.01, 4 4.001)"); ensure("GEOSGeomFromWKT failed", nullptr != geom1); GEOSGeometry* geom3 = GEOSSnap(geom1, geom2, 0.1); ensure("GEOSSnap failed", nullptr != geom3); ensure("interrupt callback never called", numcalls > 0); GEOSGeom_destroy(geom1); GEOSGeom_destroy(geom2); GEOSGeom_destroy(geom3); GEOS_interruptRegisterCallback(nullptr); /* unregister */ finishGEOS(); }
LWGEOM* lwgeom_snap(const LWGEOM* geom1, const LWGEOM* geom2, double tolerance) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this lwgeom library " "was compiled against (%d) doesn't support " "'Snap' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); return NULL; #else /* POSTGIS_GEOS_VERSION >= 33 */ int srid, is3d; GEOSGeometry *g1, *g2, *g3; LWGEOM* out; srid = geom1->srid; error_if_srid_mismatch(srid, (int)(geom2->srid)); is3d = (FLAGS_GET_Z(geom1->flags) || FLAGS_GET_Z(geom2->flags)) ; initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)LWGEOM2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } g2 = (GEOSGeometry *)LWGEOM2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); return NULL; } g3 = GEOSSnap(g1, g2, tolerance); if (g3 == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); lwerror("GEOSSnap: %s", lwgeom_geos_errmsg); return NULL; } GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSSetSRID(g3, srid); out = GEOS2LWGEOM(g3, is3d); if (out == NULL) { GEOSGeom_destroy(g3); lwerror("GEOSSnap() threw an error (result LWGEOM geometry formation)!"); return NULL; } GEOSGeom_destroy(g3); return out; #endif /* POSTGIS_GEOS_VERSION >= 33 */ }