std::vector<OGRGeometry *> ogr_from_sfc(Rcpp::List sfc, OGRSpatialReference **sref) { Rcpp::List wkblst = CPL_write_wkb(sfc, false); std::vector<OGRGeometry *> g(sfc.length()); OGRSpatialReference *local_srs = NULL; Rcpp::List crs = sfc.attr("crs"); Rcpp::IntegerVector epsg(1); epsg[0] = crs["epsg"]; Rcpp::String p4s = crs["proj4string"]; if (p4s != NA_STRING) { Rcpp::CharacterVector cv = crs["proj4string"]; local_srs = new OGRSpatialReference; OGRErr err = local_srs->importFromProj4(cv[0]); if (err != 0) { local_srs->Release(); // #nocov handle_error(err); // #nocov } } for (int i = 0; i < wkblst.length(); i++) { Rcpp::RawVector r = wkblst[i]; OGRErr err = OGRGeometryFactory::createFromWkb(&(r[0]), local_srs, &(g[i]), r.length(), wkbVariantIso); if (err != 0) { if (local_srs != NULL) // #nocov local_srs->Release(); // #nocov handle_error(err); // #nocov } } if (sref != NULL) *sref = local_srs; // return and release later, or else if (local_srs != NULL) local_srs->Release(); // release now return g; }
// [[Rcpp::export]] XPtrImage magick_image_readbin(Rcpp::RawVector x, Rcpp::CharacterVector density, Rcpp::IntegerVector depth, bool strip = false){ XPtrImage image = create(); #if MagickLibVersion >= 0x689 Magick::ReadOptions opts = Magick::ReadOptions(); #if MagickLibVersion >= 0x690 opts.quiet(1); #endif if(density.size()) opts.density(std::string(density.at(0)).c_str()); if(depth.size()) opts.depth(depth.at(0)); Magick::readImages(image.get(), Magick::Blob(x.begin(), x.length()), opts); #else Magick::readImages(image.get(), Magick::Blob(x.begin(), x.length())); #endif if(strip) for_each (image->begin(), image->end(), Magick::stripImage()); return image; }
// [[Rcpp::export]] XPtrImage magick_image_read_list(Rcpp::List list){ XPtrImage image = create(); for(int i = 0; i < list.size(); i++) { if(TYPEOF(list[i]) != RAWSXP) throw std::runtime_error("magick_image_read_list can only read raw vectors"); Rcpp::RawVector x = list[i]; Magick::readImages(image.get(), Magick::Blob(x.begin(), x.length())); } return image; }
// [[Rcpp::export]] bool context_assign_bin(std::string name, Rcpp::RawVector data, Rcpp::XPtr< v8::Persistent<v8::Context> > ctx) { // Test if context still exists if(!ctx) throw std::runtime_error("Context has been disposed."); // Create scope HandleScope handle_scope; Context::Scope context_scope(*ctx); v8::Handle<v8::Object> global = (*ctx)->Global(); // Currently converts raw vectors to strings. Better would be ArrayBuffer (Uint8Array specifically) Local<v8::String> mystring = v8::String::New((const char*) RAW(data), data.length()); global->Set(String::NewSymbol(name.c_str()), mystring); return true; }