Skip to content

Commit

Permalink
initial WCS support based on GDAL
Browse files Browse the repository at this point in the history
  • Loading branch information
blazek committed Apr 25, 2012
1 parent 13bbb60 commit 7d500ea
Show file tree
Hide file tree
Showing 7 changed files with 1,491 additions and 3 deletions.
17 changes: 15 additions & 2 deletions src/providers/gdal/CMakeLists.txt
@@ -1,9 +1,21 @@
SET(GDAL_SRCS qgsgdalprovider.cpp qgsgdaldataitems.cpp)
SET(GDAL_MOC_HDRS qgsgdalprovider.h)
SET(GDAL_SRCS
qgsgdalprovider.cpp
qgsgdaldataitems.cpp
qgswcscapabilities.cpp
qgswcssourceselect.cpp
)
SET(GDAL_MOC_HDRS
qgsgdalprovider.h
qgsgdaldataitems.h
qgswcscapabilities.h
qgswcssourceselect.h
)

INCLUDE_DIRECTORIES (
../../core
../../core/raster
../../gui
${CMAKE_CURRENT_BINARY_DIR}/../../ui
${GDAL_INCLUDE_DIR}
# ${PROJ_INCLUDE_DIR}
# ${GEOS_INCLUDE_DIR}
Expand All @@ -14,6 +26,7 @@ ADD_LIBRARY (gdalprovider MODULE ${GDAL_SRCS} ${GDAL_MOC_SRCS})

TARGET_LINK_LIBRARIES (gdalprovider
qgis_core
qgis_gui
)

INSTALL(TARGETS gdalprovider
Expand Down
7 changes: 7 additions & 0 deletions src/providers/gdal/qgsgdaldataitems.cpp
@@ -1,6 +1,8 @@
#include "qgsgdaldataitems.h"
#include "qgsgdalprovider.h"
#include "qgslogger.h"
//#include "qgsowssourceselect.h"
#include "qgswcssourceselect.h"

#include <QFileInfo>

Expand Down Expand Up @@ -146,3 +148,8 @@ QGISEXTERN QgsDataItem * dataItem( QString thePath, QgsDataItem* parentItem )
}
return 0;
}

QGISEXTERN QgsWCSSourceSelect * selectWidget( QWidget * parent, Qt::WFlags fl )
{
return new QgsWCSSourceSelect( parent, fl );
}
31 changes: 30 additions & 1 deletion src/providers/gdal/qgsgdalprovider.cpp
Expand Up @@ -24,11 +24,13 @@
#include "qgsapplication.h"
#include "qgscoordinatetransform.h"
#include "qgsdataitem.h"
#include "qgsdatasourceuri.h"
#include "qgsrectangle.h"
#include "qgscoordinatereferencesystem.h"
#include "qgsrasterbandstats.h"
#include "qgsrasterlayer.h"
#include "qgsrasterpyramid.h"
#include "qgswcscapabilities.h"

#include <QImage>
#include <QSettings>
Expand Down Expand Up @@ -105,8 +107,33 @@ QgsGdalProvider::QgsGdalProvider( QString const & uri )

mGdalDataset = NULL;

// The uri is either a file name or encoded parameters for WCS
QString gdalUri = uri;
if ( uri.contains("url=") && uri.contains("identifier=") && !QFile::exists(uri) )
{
// WCS
QgsDataSourceURI dsUri;
dsUri.setEncodedUri( uri );
gdalUri = "<WCS_GDAL>";
// prepareUri adds ? or & if necessary, GDAL fails otherwise
gdalUri += "<ServiceURL>" + QgsWcsCapabilities::prepareUri( dsUri.param("url") ) + "</ServiceURL>";
gdalUri += "<CoverageName>" + dsUri.param("identifier") + "</CoverageName>";
gdalUri += "<PreferredFormat>" + dsUri.param("format") + "</PreferredFormat>";

// TODO: There is no tag for CRS response.
// There is undocumented CRS tag, but it only overrides CRS param in requests
// but BBOX is left unchanged and thus results in server error (usually).
gdalUri += "<GetCoverageExtra>&amp;RESPONSE_CRS=" + dsUri.param("crs") + "</GetCoverageExtra>";
if ( dsUri.hasParam("username") && dsUri.hasParam("password") )
{
gdalUri += "<UserPwd>" + dsUri.param("username") + ":" + dsUri.param("password") + "</UserPwd>";
}
gdalUri += "</WCS_GDAL>";
QgsDebugMsg( "WCS uri: " + gdalUri );
}

//mGdalBaseDataset = GDALOpen( QFile::encodeName( uri ).constData(), GA_ReadOnly );
mGdalBaseDataset = GDALOpen( TO8F( uri ), GA_ReadOnly );
mGdalBaseDataset = GDALOpen( TO8F( gdalUri ), GA_ReadOnly );

CPLErrorReset();
if ( mGdalBaseDataset == NULL )
Expand Down Expand Up @@ -1168,6 +1195,8 @@ int QgsGdalProvider::srcDataType( int bandNo ) const

int QgsGdalProvider::dataType( int bandNo ) const
{
if ( mGdalDataType.size() == 0 ) return QgsRasterDataProvider::UnknownDataType;

return dataTypeFormGdal( mGdalDataType[bandNo-1] );
}

Expand Down

0 comments on commit 7d500ea

Please sign in to comment.