Changeset 7556
- Timestamp:
- 10/04/07 10:54:41
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
OpenSceneGraph/trunk/src/osgPlugins/gdal/DataSetLayer.cpp
r7434 r7556 21 21 #include <ogr_spatialref.h> 22 22 23 #include <osgDB/ImageOptions> 24 23 25 using namespace GDALPlugin; 24 26 25 27 DataSetLayer::DataSetLayer(): 26 _dataset(0)28 _dataset(0), _gdalReader(0) 27 29 { 28 30 } 29 31 30 32 DataSetLayer::DataSetLayer(const std::string& fileName): 31 _dataset(0)33 _dataset(0), _gdalReader(0) 32 34 { 33 35 openFile(fileName); … … 35 37 36 38 DataSetLayer::DataSetLayer(const DataSetLayer& dataSetLayer,const osg::CopyOp& copyop): 37 ProxyLayer(dataSetLayer)39 ProxyLayer(dataSetLayer), _gdalReader(dataSetLayer._gdalReader) 38 40 { 39 41 if (dataSetLayer._dataset) open(); … … 50 52 51 53 if (getFileName().empty()) return; 52 54 53 55 _dataset = static_cast<GDALDataset*>(GDALOpen(getFileName().c_str(),GA_ReadOnly)); 54 56 55 57 setUpLocator(); 56 58 } … … 61 63 { 62 64 GDALClose(static_cast<GDALDatasetH>(_dataset)); 63 65 64 66 _dataset = 0; 65 67 } … … 80 82 if (!_dataset || sourceMaxX<sourceMinX || sourceMaxY<sourceMinY) return 0; 81 83 82 osg::notify(osg::NOTICE)<<"DataSetLayer::extractImageLayer("<<sourceMinX<<", "<<sourceMinY<<", "<<sourceMaxX<<", "<<sourceMaxY<<", target:"<<targetWidth<<", "<<targetHeight<<") not yet implemented"<<std::endl; 83 84 return 0; 84 if (!_gdalReader) return 0; 85 86 osg::ref_ptr<osgDB::ImageOptions> imageOptions = new osgDB::ImageOptions; 87 imageOptions->_sourceImageWindowMode = osgDB::ImageOptions::PIXEL_WINDOW; 88 imageOptions->_sourcePixelWindow.windowX = sourceMinX; 89 imageOptions->_sourcePixelWindow.windowY = sourceMinY; 90 imageOptions->_sourcePixelWindow.windowWidth = sourceMaxX-sourceMinX; 91 imageOptions->_sourcePixelWindow.windowHeight = sourceMaxY-sourceMinY; 92 imageOptions->_destinationPixelWindow.windowX = 0; 93 imageOptions->_destinationPixelWindow.windowY = 0; 94 imageOptions->_destinationPixelWindow.windowWidth = targetWidth; 95 imageOptions->_destinationPixelWindow.windowHeight = targetHeight; 96 97 osgDB::ReaderWriter::ReadResult result = _gdalReader->readImage(getFileName(),imageOptions.get()); 98 osg::Image* image = result.getImage(); 99 if (!image) return 0; 100 101 osgTerrain::ImageLayer* layer = new osgTerrain::ImageLayer; 102 layer->setFileName(getFileName()); 103 layer->setImage(image); 104 105 return layer; 106 } 107 108 void DataSetLayer::setGdalReader(const osgDB::ReaderWriter* rw) 109 { 110 _gdalReader = const_cast<osgDB::ReaderWriter*>(rw); 85 111 } 86 112 … … 88 114 { 89 115 if (!isOpen()) return; 90 116 91 117 const char* pszSourceSRS = _dataset->GetProjectionRef(); 92 118 if (!pszSourceSRS || strlen(pszSourceSRS)==0) pszSourceSRS = _dataset->GetGCPProjection(); OpenSceneGraph/trunk/src/osgPlugins/gdal/DataSetLayer.h
r7320 r7556 16 16 17 17 #include <osgTerrain/Layer> 18 #include <osgDB/ReaderWriter> 18 19 19 20 #include <gdal_priv.h> … … 46 47 virtual osgTerrain::ImageLayer* extractImageLayer(unsigned int sourceMinX, unsigned int sourceMinY, unsigned int sourceMaxX, unsigned int sourceMaxY, unsigned int targetWidth=0, unsigned int targetHeight=0); 47 48 49 void setGdalReader(const osgDB::ReaderWriter* rw); 50 48 51 protected: 49 52 … … 54 57 GDALDataset* _dataset; 55 58 59 osgDB::ReaderWriter* _gdalReader; 60 61 56 62 }; 57 63 OpenSceneGraph/trunk/src/osgPlugins/gdal/ReaderWriterGDAL.cpp
r7317 r7556 54 54 // open a DataSetLayer. 55 55 osg::ref_ptr<GDALPlugin::DataSetLayer> dataset = new GDALPlugin::DataSetLayer(fileName); 56 dataset->setGdalReader(this); 56 57 57 58 if (dataset->isOpen()) return dataset.release();
