Further work on new ProxyLayer

This commit is contained in:
Robert Osfield
2007-08-29 16:29:05 +00:00
parent 2f895b839e
commit 9a9ffbe229
9 changed files with 317 additions and 10 deletions

View File

@@ -13,28 +13,51 @@
#include "DataSetLayer.h"
#include <osg/Notify>
using namespace GDALPlugin;
DataSetLayer::DataSetLayer()
DataSetLayer::DataSetLayer():
_dataset(0)
{
_dataset = 0;
}
DataSetLayer::DataSetLayer(const std::string& fileName)
DataSetLayer::DataSetLayer(const std::string& fileName):
_dataset(0)
{
setFileName(fileName);
_dataset = (GDALDataset*)GDALOpen(fileName.c_str(),GA_ReadOnly);
openFile(fileName);
}
DataSetLayer::DataSetLayer(const DataSetLayer& dataSetLayer,const osg::CopyOp& copyop):
ProxyLayer(dataSetLayer)
{
_dataset = (GDALDataset*)GDALOpen(getFileName().c_str(),GA_ReadOnly);
if (dataSetLayer._dataset) open();
}
DataSetLayer::~DataSetLayer()
{
if (_dataset) delete _dataset;
close();
}
void DataSetLayer::open()
{
if (_dataset) return;
if (getFileName().empty()) return;
_dataset = static_cast<GDALDataset*>(GDALOpen(getFileName().c_str(),GA_ReadOnly));
setUpLocator();
}
void DataSetLayer::close()
{
if (_dataset)
{
GDALClose(static_cast<GDALDatasetH>(_dataset));
_dataset = 0;
}
}
unsigned int DataSetLayer::getNumColumns() const
@@ -47,3 +70,16 @@ unsigned int DataSetLayer::getNumRows() const
return _dataset!=0 ? _dataset->GetRasterYSize() : 0;
}
osgTerrain::ImageLayer* DataSetLayer::extractImageLayer(unsigned int minX, unsigned int minY, unsigned int maxX, unsigned int maxY)
{
if (!_dataset || maxX<minX || maxY<minY) return 0;
osg::notify(osg::NOTICE)<<"DataSetLayer::extractImageLayer("<<minX<<", "<<minY<<", "<<maxX<<", "<<maxY<<") not yet implemented"<<std::endl;
return 0;
}
void DataSetLayer::setUpLocator()
{
osg::notify(osg::NOTICE)<<"DataSetLayer::setUpLocator()"<<std::endl;
}

View File

@@ -33,15 +33,24 @@ class DataSetLayer : public osgTerrain::ProxyLayer
META_Object(GDALPlugin, DataSetLayer);
bool valid() const { return _dataset!=0; }
virtual bool isOpen() const { return _dataset!=0; }
virtual void open();
virtual void close();
virtual unsigned int getNumColumns() const;
virtual unsigned int getNumRows() const;
virtual osgTerrain::ImageLayer* extractImageLayer(unsigned int minX, unsigned int minY, unsigned int maxX, unsigned int maxY);
protected:
virtual ~DataSetLayer();
void setUpLocator();
GDALDataset* _dataset;
};

View File

@@ -54,7 +54,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
// open a DataSetLayer.
osg::ref_ptr<GDALPlugin::DataSetLayer> dataset = new GDALPlugin::DataSetLayer(fileName);
if (dataset->valid()) return dataset.release();
if (dataset->isOpen()) return dataset.release();
return ReadResult::FILE_NOT_HANDLED;
}