QgsSingleBandPseudoColorRenderer* QgsSingleBandPseudoColorRenderer::clone() const { QgsRasterShader *shader = nullptr; if ( mShader ) { shader = new QgsRasterShader( mShader->minimumValue(), mShader->maximumValue() ); // Shader function const QgsColorRampShader* origColorRampShader = dynamic_cast<const QgsColorRampShader*>( mShader->rasterShaderFunction() ); if ( origColorRampShader ) { QgsColorRampShader * colorRampShader = new QgsColorRampShader( mShader->minimumValue(), mShader->maximumValue() ); if ( origColorRampShader->sourceColorRamp() ) { colorRampShader->setSourceColorRamp( origColorRampShader->sourceColorRamp()->clone() ); } colorRampShader->setColorRampType( origColorRampShader->colorRampType() ); colorRampShader->setClip( origColorRampShader->clip() ); colorRampShader->setColorRampItemList( origColorRampShader->colorRampItemList() ); shader->setRasterShaderFunction( colorRampShader ); } } QgsSingleBandPseudoColorRenderer * renderer = new QgsSingleBandPseudoColorRenderer( nullptr, mBand, shader ); renderer->copyCommonProperties( this ); return renderer; }
void QgsRasterShader::writeXML( QDomDocument& doc, QDomElement& parent ) const { if ( parent.isNull() || !mRasterShaderFunction ) { return; } QDomElement rasterShaderElem = doc.createElement( "rastershader" ); QgsColorRampShader* colorRampShader = dynamic_cast<QgsColorRampShader*>( mRasterShaderFunction ); if ( colorRampShader ) { QDomElement colorRampShaderElem = doc.createElement( "colorrampshader" ); colorRampShaderElem.setAttribute( "colorRampType", colorRampShader->colorRampTypeAsQString() ); colorRampShaderElem.setAttribute( "clip", colorRampShader->clip() ); //items QList<QgsColorRampShader::ColorRampItem> itemList = colorRampShader->colorRampItemList(); QList<QgsColorRampShader::ColorRampItem>::const_iterator itemIt = itemList.constBegin(); for ( ; itemIt != itemList.constEnd(); ++itemIt ) { QDomElement itemElem = doc.createElement( "item" ); itemElem.setAttribute( "label", itemIt->label ); itemElem.setAttribute( "value", QString::number( itemIt->value ) ); itemElem.setAttribute( "color", itemIt->color.name() ); colorRampShaderElem.appendChild( itemElem ); } rasterShaderElem.appendChild( colorRampShaderElem ); } parent.appendChild( rasterShaderElem ); }
void QgsRasterShader::readXML( const QDomElement& elem ) { //only colorrampshader QDomElement colorRampShaderElem = elem.firstChildElement( "colorrampshader" ); if ( !colorRampShaderElem.isNull() ) { QgsColorRampShader* colorRampShader = new QgsColorRampShader(); colorRampShader->setColorRampType( colorRampShaderElem.attribute( "colorRampType", "INTERPOLATED" ) ); colorRampShader->setClip( colorRampShaderElem.attribute( "clip", "0" ) == "1" ); QList<QgsColorRampShader::ColorRampItem> itemList; QDomElement itemElem; QString itemLabel; double itemValue; QColor itemColor; QDomNodeList itemNodeList = colorRampShaderElem.elementsByTagName( "item" ); for ( int i = 0; i < itemNodeList.size(); ++i ) { itemElem = itemNodeList.at( i ).toElement(); itemValue = itemElem.attribute( "value" ).toDouble(); itemLabel = itemElem.attribute( "label" ); itemColor.setNamedColor( itemElem.attribute( "color" ) ); itemList.push_back( QgsColorRampShader::ColorRampItem( itemValue, itemColor, itemLabel ) ); } colorRampShader->setColorRampItemList( itemList ); setRasterShaderFunction( colorRampShader ); } }
QgsRasterInterface * QgsSingleBandPseudoColorRenderer::clone() const { QgsRasterShader *shader = 0; if ( mShader ) { shader = new QgsRasterShader( mShader->minimumValue(), mShader->maximumValue() ); // Shader function const QgsColorRampShader* origColorRampShader = dynamic_cast<const QgsColorRampShader*>( mShader->rasterShaderFunction() ); if ( origColorRampShader ) { QgsColorRampShader * colorRampShader = new QgsColorRampShader( mShader->minimumValue(), mShader->maximumValue() ); colorRampShader->setColorRampType( origColorRampShader->colorRampType() ); colorRampShader->setColorRampItemList( origColorRampShader->colorRampItemList() ); shader->setRasterShaderFunction( colorRampShader ); } } QgsSingleBandPseudoColorRenderer * renderer = new QgsSingleBandPseudoColorRenderer( 0, mBand, shader ); renderer->setOpacity( mOpacity ); renderer->setAlphaBand( mAlphaBand ); renderer->setRasterTransparency( mRasterTransparency ); return renderer; }
void QgsRasterShader::readXml( const QDomElement &elem ) { //only colorrampshader QDomElement colorRampShaderElem = elem.firstChildElement( QStringLiteral( "colorrampshader" ) ); if ( !colorRampShaderElem.isNull() ) { QgsColorRampShader *colorRampShader = new QgsColorRampShader(); colorRampShader->readXml( colorRampShaderElem ); setRasterShaderFunction( colorRampShader ); } }
void QgsRasterShader::writeXml( QDomDocument &doc, QDomElement &parent ) const { if ( parent.isNull() || !mRasterShaderFunction ) { return; } QDomElement rasterShaderElem = doc.createElement( QStringLiteral( "rastershader" ) ); QgsColorRampShader *colorRampShader = dynamic_cast<QgsColorRampShader *>( mRasterShaderFunction.get() ); if ( colorRampShader ) { rasterShaderElem.appendChild( colorRampShader->writeXml( doc ) ); } parent.appendChild( rasterShaderElem ); }
QgsRasterRenderer* QgsSingleBandPseudoColorRendererWidget::renderer() { QgsRasterShader* rasterShader = new QgsRasterShader(); QgsColorRampShader* colorRampShader = new QgsColorRampShader(); //iterate through mColormapTreeWidget and set colormap info of layer QList<QgsColorRampShader::ColorRampItem> colorRampItems; int topLevelItemCount = mColormapTreeWidget->topLevelItemCount(); QTreeWidgetItem* currentItem; for ( int i = 0; i < topLevelItemCount; ++i ) { currentItem = mColormapTreeWidget->topLevelItem( i ); if ( !currentItem ) { continue; } QgsColorRampShader::ColorRampItem newColorRampItem; newColorRampItem.value = currentItem->text( 0 ).toDouble(); newColorRampItem.color = currentItem->background( 1 ).color(); newColorRampItem.label = currentItem->text( 2 ); colorRampItems.append( newColorRampItem ); } // sort the shader items qSort( colorRampItems ); colorRampShader->setColorRampItemList( colorRampItems ); if ( mColorInterpolationComboBox->currentText() == tr( "Linear" ) ) { colorRampShader->setColorRampType( QgsColorRampShader::INTERPOLATED ); } else if ( mColorInterpolationComboBox->currentText() == tr( "Discrete" ) ) { colorRampShader->setColorRampType( QgsColorRampShader::DISCRETE ); } else { colorRampShader->setColorRampType( QgsColorRampShader::EXACT ); } rasterShader->setRasterShaderFunction( colorRampShader ); int bandNumber = mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt(); QgsSingleBandPseudoColorRenderer *renderer = new QgsSingleBandPseudoColorRenderer( mRasterLayer->dataProvider(), bandNumber, rasterShader ); renderer->setClassificationMin( lineEditValue( mMinLineEdit ) ); renderer->setClassificationMax( lineEditValue( mMaxLineEdit ) ); renderer->setClassificationMinMaxOrigin( mMinMaxOrigin ); return renderer; }
QgsRasterRenderer* QgsSingleBandPseudoColorRendererWidget::renderer() { QgsRasterShader* rasterShader = new QgsRasterShader(); QgsColorRampShader* colorRampShader = new QgsColorRampShader(); colorRampShader->setClip( mClipCheckBox->isChecked() ); //iterate through mColormapTreeWidget and set colormap info of layer QList<QgsColorRampShader::ColorRampItem> colorRampItems; int topLevelItemCount = mColormapTreeWidget->topLevelItemCount(); QTreeWidgetItem* currentItem; for ( int i = 0; i < topLevelItemCount; ++i ) { currentItem = mColormapTreeWidget->topLevelItem( i ); if ( !currentItem ) { continue; } QgsColorRampShader::ColorRampItem newColorRampItem; newColorRampItem.value = currentItem->text( ValueColumn ).toDouble(); newColorRampItem.color = currentItem->background( ColorColumn ).color(); newColorRampItem.label = currentItem->text( LabelColumn ); colorRampItems.append( newColorRampItem ); } // sort the shader items qSort( colorRampItems ); colorRampShader->setColorRampItemList( colorRampItems ); QgsColorRampShader::ColorRamp_TYPE interpolation = static_cast< QgsColorRampShader::ColorRamp_TYPE >( mColorInterpolationComboBox->itemData( mColorInterpolationComboBox->currentIndex() ).toInt() ); colorRampShader->setColorRampType( interpolation ); rasterShader->setRasterShaderFunction( colorRampShader ); int bandNumber = mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt(); QgsSingleBandPseudoColorRenderer *renderer = new QgsSingleBandPseudoColorRenderer( mRasterLayer->dataProvider(), bandNumber, rasterShader ); renderer->setClassificationMin( lineEditValue( mMinLineEdit ) ); renderer->setClassificationMax( lineEditValue( mMaxLineEdit ) ); renderer->setClassificationMinMaxOrigin( mMinMaxOrigin ); return renderer; }
void QgsRasterShader::readXml( const QDomElement& elem ) { //only colorrampshader QDomElement colorRampShaderElem = elem.firstChildElement( QStringLiteral( "colorrampshader" ) ); if ( !colorRampShaderElem.isNull() ) { QgsColorRampShader* colorRampShader = new QgsColorRampShader(); // try to load color ramp (optional) QDomElement sourceColorRampElem = colorRampShaderElem.firstChildElement( QStringLiteral( "colorramp" ) ); if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( QStringLiteral( "name" ) ) == QLatin1String( "[source]" ) ) { colorRampShader->setSourceColorRamp( QgsSymbolLayerUtils::loadColorRamp( sourceColorRampElem ) ); } colorRampShader->setColorRampType( colorRampShaderElem.attribute( QStringLiteral( "colorRampType" ), QStringLiteral( "INTERPOLATED" ) ) ); colorRampShader->setClassificationMode( static_cast< QgsColorRampShader::ClassificationMode >( colorRampShaderElem.attribute( QStringLiteral( "classificationMode" ), QStringLiteral( "1" ) ).toInt() ) ); colorRampShader->setClip( colorRampShaderElem.attribute( QStringLiteral( "clip" ), QStringLiteral( "0" ) ) == QLatin1String( "1" ) ); QList<QgsColorRampShader::ColorRampItem> itemList; QDomElement itemElem; QString itemLabel; double itemValue; QColor itemColor; QDomNodeList itemNodeList = colorRampShaderElem.elementsByTagName( QStringLiteral( "item" ) ); itemList.reserve( itemNodeList.size() ); for ( int i = 0; i < itemNodeList.size(); ++i ) { itemElem = itemNodeList.at( i ).toElement(); itemValue = itemElem.attribute( QStringLiteral( "value" ) ).toDouble(); itemLabel = itemElem.attribute( QStringLiteral( "label" ) ); itemColor.setNamedColor( itemElem.attribute( QStringLiteral( "color" ) ) ); itemColor.setAlpha( itemElem.attribute( QStringLiteral( "alpha" ), QStringLiteral( "255" ) ).toInt() ); itemList.push_back( QgsColorRampShader::ColorRampItem( itemValue, itemColor, itemLabel ) ); } colorRampShader->setColorRampItemList( itemList ); setRasterShaderFunction( colorRampShader ); } }
void QgsRasterShader::writeXml( QDomDocument& doc, QDomElement& parent ) const { if ( parent.isNull() || !mRasterShaderFunction ) { return; } QDomElement rasterShaderElem = doc.createElement( QStringLiteral( "rastershader" ) ); QgsColorRampShader* colorRampShader = dynamic_cast<QgsColorRampShader*>( mRasterShaderFunction ); if ( colorRampShader ) { QDomElement colorRampShaderElem = doc.createElement( QStringLiteral( "colorrampshader" ) ); colorRampShaderElem.setAttribute( "colorRampType", colorRampShader->colorRampTypeAsQString() ); colorRampShaderElem.setAttribute( "classificationMode", colorRampShader->classificationMode() ); colorRampShaderElem.setAttribute( QStringLiteral( "clip" ), colorRampShader->clip() ); // save source color ramp if ( colorRampShader->sourceColorRamp() ) { QDomElement colorRampElem = QgsSymbolLayerUtils::saveColorRamp( QStringLiteral( "[source]" ), colorRampShader->sourceColorRamp(), doc ); colorRampShaderElem.appendChild( colorRampElem ); } //items QList<QgsColorRampShader::ColorRampItem> itemList = colorRampShader->colorRampItemList(); QList<QgsColorRampShader::ColorRampItem>::const_iterator itemIt = itemList.constBegin(); for ( ; itemIt != itemList.constEnd(); ++itemIt ) { QDomElement itemElem = doc.createElement( QStringLiteral( "item" ) ); itemElem.setAttribute( QStringLiteral( "label" ), itemIt->label ); itemElem.setAttribute( QStringLiteral( "value" ), QgsRasterBlock::printValue( itemIt->value ) ); itemElem.setAttribute( QStringLiteral( "color" ), itemIt->color.name() ); itemElem.setAttribute( QStringLiteral( "alpha" ), itemIt->color.alpha() ); colorRampShaderElem.appendChild( itemElem ); } rasterShaderElem.appendChild( colorRampShaderElem ); } parent.appendChild( rasterShaderElem ); }
bool QgsSLDConfigParser::rasterSymbologyFromUserStyle( const QDomElement& userStyleElement, QgsRasterLayer* r ) const { return false; #if 0 //needs to be fixed QgsDebugMsg( "Entering" ); if ( !r ) { return false; } //search raster symbolizer QDomNodeList rasterSymbolizerList = userStyleElement.elementsByTagName( "RasterSymbolizer" ); if ( rasterSymbolizerList.size() < 1 ) { return false; } QDomElement rasterSymbolizerElem = rasterSymbolizerList.at( 0 ).toElement(); //search colormap and entries QDomNodeList colorMapList = rasterSymbolizerElem.elementsByTagName( "ColorMap" ); if ( colorMapList.size() < 1 ) { return false; } QDomElement colorMapElem = colorMapList.at( 0 ).toElement(); //search for color map entries r->setColorShadingAlgorithm( QgsRasterLayer::ColorRampShader ); QgsColorRampShader* myRasterShaderFunction = ( QgsColorRampShader* )r->rasterShader()->rasterShaderFunction(); QList<QgsColorRampShader::ColorRampItem> colorRampItems; QDomNodeList colorMapEntryList = colorMapElem.elementsByTagName( "ColorMapEntry" ); QDomElement currentColorMapEntryElem; bool conversion; int red, green, blue; for ( int i = 0; i < colorMapEntryList.size(); ++i ) { currentColorMapEntryElem = colorMapEntryList.at( i ).toElement(); QgsColorRampShader::ColorRampItem myNewColorRampItem; QString color = currentColorMapEntryElem.attribute( "color" ); if ( color.length() != 7 ) //color string must be in the form #ffffff { continue; } red = color.mid( 1, 2 ).toInt( &conversion, 16 ); if ( !conversion ) { red = 0; } green = color.mid( 3, 2 ).toInt( &conversion, 16 ); if ( !conversion ) { green = 0; } blue = color.mid( 5, 2 ).toInt( &conversion, 16 ); if ( !conversion ) { blue = 0; } myNewColorRampItem.color = QColor( red, green, blue ); QString value = currentColorMapEntryElem.attribute( "quantity" ); myNewColorRampItem.value = value.toDouble(); QgsDebugMsg( "Adding colormap entry" ); colorRampItems.push_back( myNewColorRampItem ); } myRasterShaderFunction->setColorRampItemList( colorRampItems ); //linear interpolation or discrete classification QString interpolation = colorMapElem.attribute( "interpolation" ); if ( interpolation == "linear" ) { myRasterShaderFunction->setColorRampType( QgsColorRampShader::INTERPOLATED ); } else if ( interpolation == "discrete" ) { myRasterShaderFunction->setColorRampType( QgsColorRampShader::DISCRETE ); } //QgsDebugMsg("Setting drawing style"); r->setDrawingStyle( QgsRasterLayer::SingleBandPseudoColor ); //set pseudo color mode return true; #else Q_UNUSED( userStyleElement ); Q_UNUSED( r ); #endif //0 }
void QgsMapToolViewshed::drawFinished() { QString layerid = QgsProject::instance()->readEntry( "Heightmap", "layer" ); QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( layerid ); if ( !layer || layer->type() != QgsMapLayer::RasterLayer ) { QgisApp::instance()->messageBar()->pushMessage( tr( "No heightmap is defined in the project." ), tr( "Right-click a raster layer in the layer tree and select it to be used as heightmap." ), QgsMessageBar::INFO, 10 ); reset(); return; } QgsCoordinateReferenceSystem canvasCrs = canvas()->mapSettings().destinationCrs(); double curRadius; QgsPoint center; double trash; getPart( 0, center, curRadius, trash, trash ); QGis::UnitType measureUnit = canvasCrs.mapUnits(); QgsDistanceArea().convertMeasurement( curRadius, measureUnit, QGis::Meters, false ); QgsViewshedDialog viewshedDialog( curRadius ); connect( &viewshedDialog, SIGNAL( radiusChanged( double ) ), this, SLOT( adjustRadius( double ) ) ); if ( viewshedDialog.exec() == QDialog::Rejected ) { reset(); return; } QString outputFileName = QString( "viewshed_%1,%2.tif" ).arg( center.x() ).arg( center.y() ); QString outputFile = QgsTemporaryFile::createNewFile( outputFileName ); QVector<QgsPoint> filterRegion; QgsPolygon poly = QgsGeometry( getRubberBand()->geometry()->clone() ).asPolygon(); if ( !poly.isEmpty() ) { filterRegion = poly.front(); } getPart( 0, center, curRadius, trash, trash ); if ( mCanvas->mapSettings().mapUnits() == QGis::Degrees ) { // Need to compute radius in meters QgsDistanceArea da; da.setSourceCrs( mCanvas->mapSettings().destinationCrs() ); da.setEllipsoid( QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE ) ); da.setEllipsoidalMode( mCanvas->mapSettings().hasCrsTransformEnabled() ); curRadius = da.measureLine( center, QgsPoint( center.x() + curRadius, center.y() ) ); QGis::UnitType measureUnits = mCanvas->mapSettings().mapUnits(); da.convertMeasurement( curRadius, measureUnits, QGis::Meters, false ); } double heightConv = QGis::fromUnitToUnitFactor( QgsCoordinateFormat::instance()->getHeightDisplayUnit(), QGis::Meters ); QProgressDialog p( tr( "Calculating viewshed..." ), tr( "Abort" ), 0, 0 ); p.setWindowTitle( tr( "Viewshed" ) ); p.setWindowModality( Qt::ApplicationModal ); bool displayVisible = viewshedDialog.getDisplayMode() == QgsViewshedDialog::DisplayVisibleArea; int accuracyFactor = viewshedDialog.getAccuracyFactor(); QApplication::setOverrideCursor( Qt::WaitCursor ); bool success = QgsViewshed::computeViewshed( layer->source(), outputFile, "GTiff", center, canvasCrs, viewshedDialog.getObserverHeight() * heightConv, viewshedDialog.getTargetHeight() * heightConv, viewshedDialog.getHeightRelativeToGround(), curRadius, QGis::Meters, filterRegion, displayVisible, accuracyFactor, &p ); QApplication::restoreOverrideCursor(); if ( success ) { QgsRasterLayer* layer = new QgsRasterLayer( outputFile, tr( "Viewshed [%1]" ).arg( center.toString() ) ); QgsColorRampShader* rampShader = new QgsColorRampShader(); if ( displayVisible ) { QList<QgsColorRampShader::ColorRampItem> colorRampItems = QList<QgsColorRampShader::ColorRampItem>() << QgsColorRampShader::ColorRampItem( 0, QColor( 0, 0, 0, 0 ), "" ) << QgsColorRampShader::ColorRampItem( 255, QColor( 0, 255, 0 ), tr( "Visible" ) ); rampShader->setColorRampItemList( colorRampItems ); } else { QList<QgsColorRampShader::ColorRampItem> colorRampItems = QList<QgsColorRampShader::ColorRampItem>() << QgsColorRampShader::ColorRampItem( 0, QColor( 0, 0, 0, 0 ), "" ) << QgsColorRampShader::ColorRampItem( 0, QColor( 255, 0, 0 ), tr( "Invisible" ) ); rampShader->setColorRampItemList( colorRampItems ); } QgsRasterShader* shader = new QgsRasterShader(); shader->setRasterShaderFunction( rampShader ); QgsSingleBandPseudoColorRenderer* renderer = new QgsSingleBandPseudoColorRenderer( 0, 1, shader ); layer->setRenderer( renderer ); QgsMapLayerRegistry::instance()->addMapLayer( layer ); QgsPinAnnotationItem* pin = new QgsPinAnnotationItem( canvas() ); pin->setMapPosition( center, canvasCrs ); pin->setItemFlags( pin->itemFlags() | QgsAnnotationItem::ItemMapPositionLocked ); QgisApp::instance()->itemCouplingManager()->addCoupling( layer, pin ); } else { QMessageBox::critical( 0, tr( "Error" ), tr( "Failed to compute viewshed." ) ); } reset(); }