Changeset 7556

Show
Ignore:
Timestamp:
10/04/07 10:54:41
Author:
robert
Message:

From Trajce Nikolov, added support for extract a region for geospatial imagery

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • OpenSceneGraph/trunk/src/osgPlugins/gdal/DataSetLayer.cpp

    r7434 r7556  
    2121#include <ogr_spatialref.h> 
    2222 
     23#include <osgDB/ImageOptions> 
     24 
    2325using namespace GDALPlugin; 
    2426 
    2527DataSetLayer::DataSetLayer(): 
    26     _dataset(0) 
     28_dataset(0), _gdalReader(0) 
    2729{ 
    2830} 
    2931 
    3032DataSetLayer::DataSetLayer(const std::string& fileName): 
    31     _dataset(0) 
     33_dataset(0), _gdalReader(0) 
    3234{ 
    3335    openFile(fileName); 
     
    3537 
    3638DataSetLayer::DataSetLayer(const DataSetLayer& dataSetLayer,const osg::CopyOp& copyop): 
    37     ProxyLayer(dataSetLayer) 
     39ProxyLayer(dataSetLayer), _gdalReader(dataSetLayer._gdalReader) 
    3840{ 
    3941    if (dataSetLayer._dataset) open(); 
     
    5052 
    5153    if (getFileName().empty()) return; 
    52      
     54 
    5355    _dataset = static_cast<GDALDataset*>(GDALOpen(getFileName().c_str(),GA_ReadOnly)); 
    54      
     56 
    5557    setUpLocator(); 
    5658} 
     
    6163    { 
    6264        GDALClose(static_cast<GDALDatasetH>(_dataset)); 
    63          
     65 
    6466        _dataset = 0; 
    6567    } 
     
    8082    if (!_dataset || sourceMaxX<sourceMinX || sourceMaxY<sourceMinY) return 0; 
    8183 
    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 
     108void DataSetLayer::setGdalReader(const osgDB::ReaderWriter* rw) 
     109
     110    _gdalReader = const_cast<osgDB::ReaderWriter*>(rw); 
    85111} 
    86112 
     
    88114{ 
    89115    if (!isOpen()) return; 
    90      
     116 
    91117    const char* pszSourceSRS = _dataset->GetProjectionRef(); 
    92118    if (!pszSourceSRS || strlen(pszSourceSRS)==0) pszSourceSRS = _dataset->GetGCPProjection(); 
  • OpenSceneGraph/trunk/src/osgPlugins/gdal/DataSetLayer.h

    r7320 r7556  
    1616 
    1717#include <osgTerrain/Layer> 
     18#include <osgDB/ReaderWriter> 
    1819 
    1920#include <gdal_priv.h> 
     
    4647        virtual osgTerrain::ImageLayer* extractImageLayer(unsigned int sourceMinX, unsigned int sourceMinY, unsigned int sourceMaxX, unsigned int sourceMaxY, unsigned int targetWidth=0, unsigned int targetHeight=0); 
    4748 
     49        void setGdalReader(const osgDB::ReaderWriter* rw); 
     50 
    4851    protected: 
    4952     
     
    5457        GDALDataset* _dataset; 
    5558 
     59        osgDB::ReaderWriter* _gdalReader; 
     60 
     61 
    5662}; 
    5763 
  • OpenSceneGraph/trunk/src/osgPlugins/gdal/ReaderWriterGDAL.cpp

    r7317 r7556  
    5454            // open a DataSetLayer. 
    5555            osg::ref_ptr<GDALPlugin::DataSetLayer> dataset = new GDALPlugin::DataSetLayer(fileName); 
     56            dataset->setGdalReader(this); 
    5657             
    5758            if (dataset->isOpen()) return dataset.release();