Handle<Value> FieldDefn::New(const Arguments& args) { HandleScope scope; 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(); FieldDefn *f = static_cast<FieldDefn *>(ptr); f->Wrap(args.This()); return args.This(); } else { std::string field_name(""); std::string type_name("string"); NODE_ARG_STR(0, "field name", field_name); NODE_ARG_STR(1, "field type", type_name); int field_type = getFieldTypeByName(type_name); if (field_type < 0) { return NODE_THROW("Unrecognized field type"); } FieldDefn* def = new FieldDefn(new OGRFieldDefn(field_name.c_str(), static_cast<OGRFieldType>(field_type))); def->owned_ = true; def->Wrap(args.This()); } return args.This(); }
Handle<Value> LayerFields::indexOf(const Arguments& args) { HandleScope scope; Handle<Object> parent = args.This()->GetHiddenValue(String::NewSymbol("parent_"))->ToObject(); Layer *layer = ObjectWrap::Unwrap<Layer>(parent); if (!layer->get()) { return NODE_THROW("Layer object already destroyed"); } OGRFeatureDefn *def = layer->get()->GetLayerDefn(); if (!def) { return NODE_THROW("Layer has no layer definition set"); } std::string name(""); NODE_ARG_STR(0, "field name", name); return scope.Close(Integer::New(def->GetFieldIndex(name.c_str()))); }
Handle<Value> Geometry::createFromWkt(const Arguments &args) { HandleScope scope; std::string wkt_string; SpatialReference *srs = NULL; NODE_ARG_STR(0, "wkt", wkt_string); NODE_ARG_WRAPPED_OPT(1, "srs", SpatialReference, srs); char *wkt = (char*) wkt_string.c_str(); OGRGeometry *geom = NULL; OGRSpatialReference *ogr_srs = NULL; if (srs) { ogr_srs = srs->get(); } OGRErr err = OGRGeometryFactory::createFromWkt(&wkt, ogr_srs, &geom); if (err) { return NODE_THROW_OGRERR(err); } return scope.Close(Geometry::New(geom, true)); }