static VALUE method_geometry_buffer(VALUE self, VALUE distance) { VALUE result = Qnil; RGeo_GeometryData* self_data = RGEO_GEOMETRY_DATA_PTR(self); const GEOSGeometry* self_geom = self_data->geom; if (self_geom) { VALUE factory = self_data->factory; int resolution = NUM2INT(RGEO_FACTORY_DATA_PTR(factory)->buffer_resolution); result = rgeo_wrap_geos_geometry(factory, GEOSBuffer_r(self_data->geos_context, self_geom, rb_num2dbl(distance), resolution), Qnil); } return result; }
static void ST_Buffer(sqlite3_context *context, int nbArgs, sqlite3_value **args) { GEOS_START(context); GEOS_GET_GEOM(g1, args, 0); double distance = sqlite3_value_double(args[1]); if (g1 == NULL) { if (error_count(&error) > 0) { sqlite3_result_error(context, error_message(&error), -1); } else { sqlite3_result_null(context); } return; } GEOSGeometry *result = GEOSBuffer_r(GEOS_HANDLE, g1->geometry, distance, DEFAULT_QUADRANT_SEGMENTS); if (result != NULL) { set_geos_geom_result(context, GEOS_CONTEXT, result, &error); GEOSGeom_destroy_r( GEOS_HANDLE, result ); } else { geom_geos_get_error(&error); sqlite3_result_error(context, error_message(&error), -1); } GEOS_FREE_GEOM( g1, 0 ); }