Handle<Value> Geometry::New(const Arguments& args) { HandleScope scope; Geometry *f; if (!args.IsConstructCall()) { return NODE_THROW("Cannot call constructor as function, you need to use 'new' keyword"); } if (args[0]->IsExternal()) { Local<External> ext = Local<External>::Cast(args[0]); void* ptr = ext->Value(); f = static_cast<Geometry *>(ptr); } else { return NODE_THROW("Geometry doesnt have a constructor, use Geometry.createFromWkt(), Geometry.create() or type-specific constructor. ie. new ogr.Point()"); OGRwkbGeometryType geometry_type; NODE_ARG_ENUM(0, "geometry type", OGRwkbGeometryType, geometry_type); OGRGeometry *geom = OGRGeometryFactory::createGeometry(geometry_type); f = new Geometry(geom); } f->Wrap(args.This()); return args.This(); }
Handle<Value> Dataset::addBand(const Arguments& args) { HandleScope scope; Dataset *ds = ObjectWrap::Unwrap<Dataset>(args.This()); if(!ds->this_) return NODE_THROW("Dataset object has already been destroyed"); GDALDataType type; Handle<Array> band_options = Array::New(0); char **options = NULL; NODE_ARG_ENUM(0, "data type", GDALDataType, type); NODE_ARG_ARRAY_OPT(1, "band creation options", band_options); if (band_options->Length() > 0) { options = new char* [band_options->Length()]; for (unsigned int i = 0; i < band_options->Length(); ++i) { options[i] = TOSTR(band_options->Get(i)); } } CPLErr err = ds->this_->AddBand(type, options); if (options) { delete [] options; } if(err) return NODE_THROW_CPLERR(err); return scope.Close(RasterBand::New(ds->this_->GetRasterBand(ds->this_->GetRasterCount()))); }
Handle<Value> Geometry::create(const Arguments &args) { HandleScope scope; OGRwkbGeometryType type = wkbUnknown; NODE_ARG_ENUM(0, "type", OGRwkbGeometryType, type); return scope.Close(Geometry::New(OGRGeometryFactory::createGeometry(type), true)); }