Handle<Value> DatasetBands::get(const Arguments& args) { HandleScope scope; Handle<Object> parent = args.This()->GetHiddenValue(String::NewSymbol("parent_"))->ToObject(); Dataset *ds = ObjectWrap::Unwrap<Dataset>(parent); if (ds->uses_ogr){ OGRDataSource* raw = ds->getDatasource(); if (!raw) { return NODE_THROW("Dataset object has already been destroyed"); } return Null(); } else { GDALDataset* raw = ds->getDataset(); if (!raw) { return NODE_THROW("Dataset object has already been destroyed"); } int band_id; NODE_ARG_INT(0, "band id", band_id); GDALRasterBand *band = raw->GetRasterBand(band_id); return scope.Close(RasterBand::New(band)); } }
Handle<Value> MultiPoint::getGeometry(const Arguments& args) { HandleScope scope; MultiPoint *geom = ObjectWrap::Unwrap<MultiPoint>(args.This()); int i; NODE_ARG_INT(0, "index", i); return scope.Close(Point::New(static_cast<OGRPoint*>(geom->this_->getGeometryRef(i)), false)); }
Handle<Value> LineStringPoints::resize(const Arguments& args) { HandleScope scope; Handle<Object> parent = args.This()->GetHiddenValue(String::NewSymbol("parent_"))->ToObject(); LineString *geom = ObjectWrap::Unwrap<LineString>(parent); int count; NODE_ARG_INT(0, "point count", count) geom->get()->setNumPoints(count); return Undefined(); }
Handle<Value> Dataset::getRasterBand(const Arguments& args) { HandleScope scope; GDALRasterBand *poBand; int band_id; NODE_ARG_INT(0, "band id", band_id); Dataset *ds = ObjectWrap::Unwrap<Dataset>(args.This()); if(!ds->this_) return NODE_THROW("Dataset object has already been destroyed"); poBand = ds->this_->GetRasterBand(band_id); if (poBand == NULL) { return NODE_THROW("Specified band not found"); } return scope.Close(RasterBand::New(poBand)); }
Handle<Value> LineStringPoints::get(const Arguments& args) { HandleScope scope; Handle<Object> parent = args.This()->GetHiddenValue(String::NewSymbol("parent_"))->ToObject(); LineString *geom = ObjectWrap::Unwrap<LineString>(parent); OGRPoint *pt = new OGRPoint(); int i; NODE_ARG_INT(0, "index", i); if(i < 0 || i >= geom->get()->getNumPoints()) { return scope.Close(Null()); } geom->get()->getPoint(i, pt); return scope.Close(Point::New(pt)); }
Handle<Value> LineStringPoints::set(const Arguments& args) { HandleScope scope; Handle<Object> parent = args.This()->GetHiddenValue(String::NewSymbol("parent_"))->ToObject(); LineString *geom = ObjectWrap::Unwrap<LineString>(parent); int i; NODE_ARG_INT(0, "index", i); if(i < 0 || i >= geom->get()->getNumPoints()) { return NODE_THROW("Point index out of range"); } int n = args.Length() - 1; if(n == 0) { return NODE_THROW("Point must be given"); } else if(n == 1) { if(!args[1]->IsObject()) { return NODE_THROW("Point or object expected for second argument"); } if(IS_WRAPPED(args[1], Point)){ //set from Point object Point* pt = ObjectWrap::Unwrap<Point>(args[1]->ToObject()); geom->get()->setPoint(i, pt->get()); } else { Handle<Object> obj = args[1]->ToObject(); //set from object {x: 0, y: 5} double x, y; NODE_DOUBLE_FROM_OBJ(obj, "x", x); NODE_DOUBLE_FROM_OBJ(obj, "y", y); Handle<String> z_prop_name = String::NewSymbol("z"); if (obj->HasOwnProperty(z_prop_name)) { Handle<Value> z_val = obj->Get(z_prop_name); if (!z_val->IsNumber()) { return NODE_THROW("z property must be number"); } geom->get()->setPoint(i, x, y, z_val->NumberValue()); } else { geom->get()->setPoint(i, x, y); } } } else { //set x, y, z from numeric arguments if(!args[1]->IsNumber()){ return NODE_THROW("Number expected for second argument"); } if(!args[2]->IsNumber()){ return NODE_THROW("Number expected for third argument"); } if(n == 2){ geom->get()->setPoint(i, args[1]->NumberValue(), args[2]->NumberValue()); } else { if(!args[3]->IsNumber()){ return NODE_THROW("Number expected for fourth argument"); } geom->get()->setPoint(i, args[1]->NumberValue(), args[2]->NumberValue(), args[3]->NumberValue()); } } return Undefined(); }