示例#1
0
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));
	}
}
示例#2
0
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));
}
示例#3
0
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();
}
示例#4
0
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));
}
示例#5
0
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));
}
示例#6
0
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();
}