void QgsZonalStatisticsDialog::insertAvailableLayers() { //insert available raster layers //enter available layers into the combo box QMap<QString, QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance()->mapLayers(); QMap<QString, QgsMapLayer*>::iterator layer_it = mapLayers.begin(); for ( ; layer_it != mapLayers.end(); ++layer_it ) { QgsRasterLayer* rl = dynamic_cast<QgsRasterLayer*>( layer_it.value() ); if ( rl ) { QgsRasterDataProvider* rp = rl->dataProvider(); if ( rp && rp->name() == "gdal" ) { mRasterLayerComboBox->addItem( rl->name(), QVariant( rl->id() ) ); } } else { QgsVectorLayer* vl = dynamic_cast<QgsVectorLayer*>( layer_it.value() ); if ( vl && vl->geometryType() == QGis::Polygon ) { QgsVectorDataProvider* provider = vl->dataProvider(); if ( provider->capabilities() & QgsVectorDataProvider::AddAttributes ) { mPolygonLayerComboBox->addItem( vl->name(), QVariant( vl->id() ) ); } } } } }
int QgsLegendModel::addRasterLayerItems( QStandardItem* layerItem, QgsMapLayer* rlayer ) { if ( !layerItem || !rlayer ) { return 1; } QgsRasterLayer* rasterLayer = qobject_cast<QgsRasterLayer *>( rlayer ); if ( !rasterLayer ) { return 2; } QList< QPair< QString, QColor > > rasterItemList = rasterLayer->legendSymbologyItems(); QList< QPair< QString, QColor > >::const_iterator itemIt = rasterItemList.constBegin(); for ( ; itemIt != rasterItemList.constEnd(); ++itemIt ) { QgsComposerRasterSymbolItem* currentSymbolItem = new QgsComposerRasterSymbolItem( itemIt->first ); if ( mHasTopLevelWindow ) { QPixmap itemPixmap( 20, 20 ); itemPixmap.fill( itemIt->second ); currentSymbolItem->setIcon( QIcon( itemPixmap ) ); } currentSymbolItem->setLayerID( rasterLayer->id() ); currentSymbolItem->setColor( itemIt->second ); int currentRowCount = layerItem->rowCount(); layerItem->setChild( currentRowCount, 0, currentSymbolItem ); } return 0; }
int QgsLegendModel::addRasterLayerItem( QStandardItem* layerItem, QgsMapLayer* rlayer ) { if ( !layerItem || !rlayer ) { return 1; } QgsRasterLayer* rasterLayer = qobject_cast<QgsRasterLayer *>( rlayer ); if ( !rasterLayer ) { return 2; } QgsComposerRasterSymbolItem* currentSymbolItem = new QgsComposerRasterSymbolItem(); //use a vector symbol item without symbol if ( mHasTopLevelWindow ) //only use QIcon / QPixmap if we have a running x-server { currentSymbolItem->setIcon( QIcon( rasterLayer->legendAsPixmap( true ) ) ); } currentSymbolItem->setLayerID( rasterLayer->id() ); int currentRowCount = layerItem->rowCount(); layerItem->setChild( currentRowCount, 0, currentSymbolItem ); return 0; }
int QgsLegendModel::addRasterLayerItems( QStandardItem* layerItem, QgsMapLayer* rlayer ) { if ( !layerItem || !rlayer ) { return 1; } QgsRasterLayer* rasterLayer = qobject_cast<QgsRasterLayer *>( rlayer ); if ( !rasterLayer ) { return 2; } QList< QPair< QString, QColor > > rasterItemList = rasterLayer->legendSymbologyItems(); QList< QPair< QString, QColor > >::const_iterator itemIt = rasterItemList.constBegin(); int row = 0; for ( ; itemIt != rasterItemList.constEnd(); ++itemIt ) { QgsComposerRasterSymbolItem* currentSymbolItem = new QgsComposerRasterSymbolItem( itemIt->first ); QgsComposerRasterSymbolItem* oldSymbolItem = dynamic_cast<QgsComposerRasterSymbolItem*>( layerItem->child( row, 0 ) ); if ( oldSymbolItem ) { currentSymbolItem->setUserText( oldSymbolItem->userText() ); currentSymbolItem->setText( currentSymbolItem->userText() ); } if ( mHasTopLevelWindow ) { QPixmap itemPixmap( 20, 20 ); itemPixmap.fill( itemIt->second ); currentSymbolItem->setIcon( QIcon( itemPixmap ) ); } currentSymbolItem->setLayerID( rasterLayer->id() ); currentSymbolItem->setColor( itemIt->second ); int currentRowCount = layerItem->rowCount(); layerItem->setChild( currentRowCount, 0, currentSymbolItem ); row++; } // Delete following old items (if current number of items decreased) for ( int i = layerItem->rowCount() - 1; i >= row; --i ) { layerItem->removeRow( i ); } return 0; }
QByteArray* QgsWCSServer::getCoverage() { QStringList wcsLayersId = mConfigParser->wcsLayers(); QList<QgsMapLayer*> layerList; QStringList mErrors = QStringList(); //defining coverage name QString coveName = ""; //read COVERAGE QMap<QString, QString>::const_iterator cove_name_it = mParameters.find( "COVERAGE" ); if ( cove_name_it != mParameters.end() ) { coveName = cove_name_it.value(); } if ( coveName == "" ) { QMap<QString, QString>::const_iterator cove_name_it = mParameters.find( "IDENTIFIER" ); if ( cove_name_it != mParameters.end() ) { coveName = cove_name_it.value(); } } if ( coveName == "" ) { mErrors << QString( "COVERAGE is mandatory" ); } layerList = mConfigParser->mapLayerFromCoverage( coveName ); if ( layerList.size() < 1 ) { mErrors << QString( "The layer for the COVERAGE '%1' is not found" ).arg( coveName ); } bool conversionSuccess; // BBOX bool bboxOk = false; double minx = 0.0, miny = 0.0, maxx = 0.0, maxy = 0.0; // WIDTh and HEIGHT int width = 0, height = 0; // CRS QString crs = ""; // read BBOX QMap<QString, QString>::const_iterator bbIt = mParameters.find( "BBOX" ); if ( bbIt == mParameters.end() ) { minx = 0; miny = 0; maxx = 0; maxy = 0; } else { bboxOk = true; QString bbString = bbIt.value(); minx = bbString.section( ",", 0, 0 ).toDouble( &conversionSuccess ); if ( !conversionSuccess ) {bboxOk = false;} miny = bbString.section( ",", 1, 1 ).toDouble( &conversionSuccess ); if ( !conversionSuccess ) {bboxOk = false;} maxx = bbString.section( ",", 2, 2 ).toDouble( &conversionSuccess ); if ( !conversionSuccess ) {bboxOk = false;} maxy = bbString.section( ",", 3, 3 ).toDouble( &conversionSuccess ); if ( !conversionSuccess ) {bboxOk = false;} } if ( !bboxOk ) { mErrors << QString( "The BBOX is mandatory and has to be xx.xxx,yy.yyy,xx.xxx,yy.yyy" ); } // read WIDTH width = mParameters.value( "WIDTH", "0" ).toInt( &conversionSuccess ); if ( !conversionSuccess ) width = 0; // read HEIGHT height = mParameters.value( "HEIGHT", "0" ).toInt( &conversionSuccess ); if ( !conversionSuccess ) { height = 0; } if ( width < 0 || height < 0 ) { mErrors << QString( "The WIDTH and HEIGHT are mandatory and have to be integer" ); } crs = mParameters.value( "CRS", "" ); if ( crs == "" ) { mErrors << QString( "The CRS is mandatory" ); } if ( mErrors.count() != 0 ) { throw QgsMapServiceException( "RequestNotWellFormed", mErrors.join( ". " ) ); } QgsCoordinateReferenceSystem requestCRS = QgsCRSCache::instance()->crsByAuthId( crs ); if ( !requestCRS.isValid() ) { mErrors << QString( "Could not create request CRS" ); throw QgsMapServiceException( "RequestNotWellFormed", mErrors.join( ". " ) ); } QgsRectangle rect( minx, miny, maxx, maxy ); QgsMapLayer* layer = layerList.at( 0 ); QgsRasterLayer* rLayer = dynamic_cast<QgsRasterLayer*>( layer ); if ( rLayer && wcsLayersId.contains( rLayer->id() ) ) { // RESPONSE_CRS QgsCoordinateReferenceSystem responseCRS = rLayer->crs(); crs = mParameters.value( "RESPONSE_CRS", "" ); if ( crs != "" ) { responseCRS = QgsCRSCache::instance()->crsByAuthId( crs ); if ( !responseCRS.isValid() ) { responseCRS = rLayer->crs(); } } // transform rect if ( requestCRS != rLayer->crs() ) { QgsCoordinateTransform t( requestCRS, rLayer->crs() ); rect = t.transformBoundingBox( rect ); } QTemporaryFile tempFile; tempFile.open(); QgsRasterFileWriter fileWriter( tempFile.fileName() ); // clone pipe/provider QgsRasterPipe* pipe = new QgsRasterPipe(); if ( !pipe->set( rLayer->dataProvider()->clone() ) ) { mErrors << QString( "Cannot set pipe provider" ); throw QgsMapServiceException( "RequestNotWellFormed", mErrors.join( ". " ) ); } // add projector if necessary if ( responseCRS != rLayer->crs() ) { QgsRasterProjector * projector = new QgsRasterProjector; projector->setCRS( rLayer->crs(), responseCRS ); if ( !pipe->insert( 2, projector ) ) { mErrors << QString( "Cannot set pipe projector" ); throw QgsMapServiceException( "RequestNotWellFormed", mErrors.join( ". " ) ); } } QgsRasterFileWriter::WriterError err = fileWriter.writeRaster( pipe, width, height, rect, responseCRS ); if ( err != QgsRasterFileWriter::NoError ) { mErrors << QString( "Cannot write raster error code: %1" ).arg( err ); throw QgsMapServiceException( "RequestNotWellFormed", mErrors.join( ". " ) ); } delete pipe; QByteArray* ba = 0; ba = new QByteArray(); *ba = tempFile.readAll(); return ba; } return 0; }
QgsRasterTerrainAnalysisDialog::QgsRasterTerrainAnalysisDialog( DisplayMode mode, QWidget * parent, Qt::WindowFlags f ): QDialog( parent, f ) { setupUi( this ); QSettings s; restoreGeometry( s.value( "/RasterTerrainAnalysis/geometry" ).toByteArray() ); if ( mode == HillshadeInput ) { mReliefColorsGroupBox->setVisible( false ); mLightAzimuthAngleSpinBox->setValue( 300 ); mLightVerticalAngleSpinBox->setValue( 40 ); } else if ( mode == ReliefInput ) { mIlluminationGroupBox->setVisible( false ); } else //no parameters { mReliefColorsGroupBox->setVisible( false ); mIlluminationGroupBox->setVisible( false ); } adjustSize(); mZFactorLineEdit->setText( s.value( "/RasterTerrainAnalysis/zfactor", "1.0" ).toString() ); mZFactorLineEdit->setValidator( new QDoubleValidator( this ) ); //insert available raster layers //enter available layers into the combo box QMap<QString, QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance()->mapLayers(); QMap<QString, QgsMapLayer*>::iterator layer_it = mapLayers.begin(); //insert available input layers for ( ; layer_it != mapLayers.end(); ++layer_it ) { QgsRasterLayer* rl = qobject_cast<QgsRasterLayer *>( layer_it.value() ); if ( rl ) { mElevationLayerComboBox->addItem( rl->name(), QVariant( rl->id() ) ); } } //insert available drivers that support the create() operation GDALAllRegister(); int nDrivers = GDALGetDriverCount(); for ( int i = 0; i < nDrivers; ++i ) { GDALDriverH driver = GDALGetDriver( i ); if ( driver != NULL ) { char** driverMetadata = GDALGetMetadata( driver, NULL ); if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_CREATE, false ) ) { mOutputFormatComboBox->addItem( GDALGetDriverLongName( driver ), QVariant( GDALGetDriverShortName( driver ) ) ); //store the driver shortnames and the corresponding extensions //(just in case the user does not give an extension for the output file name) QString driverExtension = GDALGetMetadataItem( driver, GDAL_DMD_EXTENSION, NULL ); mDriverExtensionMap.insert( QString( GDALGetDriverShortName( driver ) ), driverExtension ); } } } //and set last used driver in combo box QString lastUsedDriver = s.value( "/RasterTerrainAnalysis/lastOutputFormat", "GeoTIFF" ).toString(); int lastDriverIndex = mOutputFormatComboBox->findText( lastUsedDriver ); if ( lastDriverIndex != -1 ) { mOutputFormatComboBox->setCurrentIndex( lastDriverIndex ); } mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); }