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;
}
Example #2
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;
}