TeLayer* TeImportRaster (const string& layerName, TeRaster* rasterIn, TeDatabase* database) { if (!database || layerName.empty() || !rasterIn || (rasterIn->params().status_ != TeRasterParams::TeReadyToRead && rasterIn->params().status_ != TeRasterParams::TeReadyToWrite)) return 0; // find a valid layer name string newLayerName = layerName; TeLayerMap& layerMap = database->layerMap(); TeLayerMap::iterator it; bool flag = true; int n = 1; while (flag) { for (it = layerMap.begin(); it != layerMap.end(); ++it) { if (TeStringCompare(it->second->name(),newLayerName)) break; } if (it == layerMap.end()) flag = 0; else newLayerName = layerName + "_" +Te2String(n); n++; } TeLayer* newLayer = new TeLayer(newLayerName,database,rasterIn->projection()); if (newLayer->id() <= 0 ) return 0; // couldnĀ“t create new layer // block dimension guessing unsigned int bw = 512; unsigned int bh = 512; // an initial guess... // if raster is up to 512x512 store it in one block if (rasterIn->params().nlines_< 512 && rasterIn->params().ncols_< 512) { bw = rasterIn->params().ncols_; bh = rasterIn->params().nlines_; } // if ncols<1024 build blocks of 1 line else if (rasterIn->params().ncols_ < 1024) { bw = rasterIn->params().ncols_; bh = 1; } if (TeProgress::instance()) TeProgress::instance()->reset(); bool res = TeImportRaster(newLayer, rasterIn, bw, bh, TeRasterParams::TeNoCompression, "", rasterIn->params().dummy_[0], rasterIn->params().useDummy_, TeRasterParams::TeNoExpansible); if (res) return newLayer; database->deleteLayer(newLayer->id()); return 0; }
aRTcomponent* aRTdb::ImportRaster(SEXP options) { string filename = GET_STRING_ELEMENT(options, "file"); string layername = GET_STRING_ELEMENT(options, "lname"); double dummy = GET_REAL_ELEMENT (options, "dummy"); TeRaster raster(filename.c_str()); bool ok; aRTlayer* child = new aRTlayer(Database, layername); AddChild(child); PrintSilent("Importing raster \'%s\' to layer \'%s\' ... ", filename.c_str(), layername.c_str()); ok = TeImportRaster (child->Layer(), &raster, raster.params().ncols_, raster.params().nlines_, TeRasterParams::TeNoCompression, "", // object id dummy, true); // usedummy if(!ok) { PrintSilentNo; error("Could not import the raster"); } PrintSilentYes; return child; }