QDomElement getContentMetadataElement( QDomDocument &doc, QgsServerInterface *serverIface, const QgsProject *project ) { #ifdef HAVE_SERVER_PYTHON_PLUGINS QgsAccessControl *accessControl = serverIface->accessControls(); #endif /* * Adding layer list in ContentMetadata */ QDomElement contentMetadataElement = doc.createElement( QStringLiteral( "ContentMetadata" )/*wcs:ContentMetadata*/ ); QStringList wcsLayersId = QgsServerProjectUtils::wcsLayerIds( *project ); for ( int i = 0; i < wcsLayersId.size(); ++i ) { QgsMapLayer *layer = project->mapLayer( wcsLayersId.at( i ) ); if ( layer->type() != QgsMapLayer::LayerType::RasterLayer ) { continue; } #ifdef HAVE_SERVER_PYTHON_PLUGINS if ( !accessControl->layerReadPermission( layer ) ) { continue; } #endif QgsRasterLayer *rLayer = qobject_cast<QgsRasterLayer *>( layer ); QDomElement layerElem = getCoverageOffering( doc, const_cast<QgsRasterLayer *>( rLayer ), true ); contentMetadataElement.appendChild( layerElem ); } //End return contentMetadataElement; }
void QgsMapToolFeatureAction::canvasReleaseEvent( QMouseEvent *e ) { QgsMapLayer *layer = mCanvas->currentLayer(); if ( !layer || layer->type() != QgsMapLayer::VectorLayer ) { QMessageBox::warning( mCanvas, tr( "No active vector layer" ), tr( "To run an action, you must choose a vector layer by clicking on its name in the legend" ) ); return; } if ( !mCanvas->layers().contains( layer ) ) { // do not run actions on hidden layers return; } QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer ); if ( vlayer->actions()->size() == 0 && QgsMapLayerActionRegistry::instance()->mapLayerActions( vlayer ).size() == 0 ) { QMessageBox::warning( mCanvas, tr( "No actions available" ), tr( "The active vector layer has no defined actions" ) ); return; } if ( !doAction( vlayer, e->x(), e->y() ) ) QgisApp::instance()->statusBar()->showMessage( tr( "No features at this position found." ) ); }
void QgsMapLayerStyleGuiUtils::addStyle() { QAction *a = qobject_cast<QAction *>( sender() ); if ( !a ) return; QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( a->data().value<QObject *>() ); if ( !layer ) return; bool ok; QString text = QInputDialog::getText( nullptr, tr( "New Style" ), tr( "Style name:" ), QLineEdit::Normal, QStringLiteral( "new style" ), &ok ); if ( !ok || text.isEmpty() ) return; bool res = layer->styleManager()->addStyleFromLayer( text ); if ( res ) // make it active! { layer->styleManager()->setCurrentStyle( text ); } else { QgsDebugMsg( "Failed to add style: " + text ); } }
QgsJoinDialog::QgsJoinDialog( QgsVectorLayer* layer, QList<QgsMapLayer*> alreadyJoinedLayers, QWidget * parent, Qt::WindowFlags f ) : QDialog( parent, f ) , mLayer( layer ) { setupUi( this ); if ( !mLayer ) { return; } // adds self layer to the joined layer (cannot join to itself) alreadyJoinedLayers.append( layer ); mTargetFieldComboBox->setLayer( mLayer ); mJoinLayerComboBox->setFilters( QgsMapLayerProxyModel::VectorLayer ); mJoinLayerComboBox->setExceptedLayerList( alreadyJoinedLayers ); connect( mJoinLayerComboBox, SIGNAL( layerChanged( QgsMapLayer* ) ), mJoinFieldComboBox, SLOT( setLayer( QgsMapLayer* ) ) ); connect( mJoinLayerComboBox, SIGNAL( layerChanged( QgsMapLayer* ) ), this, SLOT( joinedLayerChanged( QgsMapLayer* ) ) ); mCacheInMemoryCheckBox->setChecked( true ); QgsMapLayer *joinLayer = mJoinLayerComboBox->currentLayer(); if ( joinLayer && joinLayer->isValid() ) { mJoinFieldComboBox->setLayer( joinLayer ); joinedLayerChanged( joinLayer ); } }
void TestQgsProject::testLayerFlags() { QString dataDir( TEST_DATA_DIR ); //defined in CmakeLists.txt QString layerPath = dataDir + "/points.shp"; QgsVectorLayer *layer1 = new QgsVectorLayer( layerPath, QStringLiteral( "points 1" ), QStringLiteral( "ogr" ) ); QgsVectorLayer *layer2 = new QgsVectorLayer( layerPath, QStringLiteral( "points 2" ), QStringLiteral( "ogr" ) ); QgsProject prj; prj.addMapLayer( layer1 ); prj.addMapLayer( layer2 ); layer2->setFlags( layer2->flags() & ~QgsMapLayer::Removable ); QString layer2id = layer2->id(); QTemporaryFile f; QVERIFY( f.open() ); f.close(); prj.setFileName( f.fileName() ); prj.write(); // test reading required layers back QgsProject prj2; prj2.setFileName( f.fileName() ); QVERIFY( prj2.read() ); QgsMapLayer *layer = prj.mapLayer( layer2id ); QVERIFY( layer ); QVERIFY( !layer->flags().testFlag( QgsMapLayer::Removable ) ); }
void QgsLegendLayerFile::addToPopupMenu( QMenu& theMenu, QAction* toggleEditingAction ) { QgsMapLayer* lyr = layer(); // zoom to layer extent theMenu.addAction( QgisApp::getThemeIcon( "/mActionZoomToLayer.png" ), tr( "&Zoom to layer extent" ), legend(), SLOT( legendLayerZoom() ) ); // show in overview QAction* showInOverviewAction = theMenu.addAction( tr( "&Show in overview" ), this, SLOT( showInOverview() ) ); showInOverviewAction->setCheckable( true ); showInOverviewAction->blockSignals( true ); showInOverviewAction->setChecked( mLyr.isInOverview() ); showInOverviewAction->blockSignals( false ); // remove from canvas theMenu.addAction( QgisApp::getThemeIcon( "/mActionRemove.png" ), tr( "&Remove" ), legend(), SLOT( legendLayerRemove() ) ); theMenu.addSeparator(); if ( lyr->type() == QgsMapLayer::VectorLayer ) { QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>( lyr ); // attribute table theMenu.addAction( tr( "&Open attribute table" ), this, SLOT( table() ) ); // editing int cap = vlayer->dataProvider()->capabilities(); if ( cap & QgsVectorDataProvider::EditingCapabilities ) { if ( toggleEditingAction ) { theMenu.addAction( toggleEditingAction ); } } // save as shapefile theMenu.addAction( tr( "Save as shapefile..." ), this, SLOT( saveAsShapefile() ) ); QAction* saveSelectionAction = theMenu.addAction( tr( "Save selection as shapefile..." ), this, SLOT( saveSelectionAsShapefile() ) ); if ( vlayer->selectedFeatureCount() == 0 ) { saveSelectionAction->setEnabled( false ); } theMenu.addSeparator(); } else if ( lyr->type() == QgsMapLayer::RasterLayer ) { // TODO: what was this for? //QgsRasterLayer* rlayer = dynamic_cast<QgsRasterLayer*>(lyr); //theMenu.addAction(tr("&Convert to..."), rlayer, SLOT(convertTo())); } // properties goes on bottom of menu for consistency with normal ui standards // e.g. kde stuff theMenu.addAction( tr( "&Properties" ), legend(), SLOT( legendLayerShowProperties() ) ); }
void QgsOfflineEditing::committedFeaturesAdded( const QString& qgisLayerId, const QgsFeatureList& addedFeatures ) { sqlite3* db = openLoggingDb(); if ( db == NULL ) { return; } // insert log int layerId = getOrCreateLayerId( db, qgisLayerId ); // get new feature ids from db QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( qgisLayerId ); QgsDataSourceURI uri = QgsDataSourceURI( layer->source() ); // only store feature ids QString sql = QString( "SELECT ROWID FROM '%1' ORDER BY ROWID DESC LIMIT %2" ).arg( uri.table() ).arg( addedFeatures.size() ); QList<int> newFeatureIds = sqlQueryInts( db, sql ); for ( int i = newFeatureIds.size() - 1; i >= 0; i-- ) { QString sql = QString( "INSERT INTO 'log_added_features' VALUES ( %1, %2 )" ) .arg( layerId ) .arg( newFeatureIds.at( i ) ); sqlExec( db, sql ); } sqlite3_close( db ); }
void QgsMapToolFeatureAction::canvasReleaseEvent( QMouseEvent *e ) { QgsMapLayer *layer = mCanvas->currentLayer(); if ( !layer || layer->type() != QgsMapLayer::VectorLayer ) { emit messageEmitted( tr( "To run an action, you must choose an active vector layer." ), QgsMessageBar::INFO ); return; } if ( !mCanvas->layers().contains( layer ) ) { // do not run actions on hidden layers return; } QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer ); if ( vlayer->actions()->size() == 0 && QgsMapLayerActionRegistry::instance()->mapLayerActions( vlayer ).size() == 0 ) { emit messageEmitted( tr( "The active vector layer has no defined actions" ), QgsMessageBar::INFO ); return; } if ( !doAction( vlayer, e->x(), e->y() ) ) QgisApp::instance()->statusBar()->showMessage( tr( "No features at this position found." ) ); }
bool QgsVirtualLayerProvider::loadSourceLayers() { Q_FOREACH ( const QgsVirtualLayerDefinition::SourceLayer &layer, mDefinition.sourceLayers() ) { if ( layer.isReferenced() ) { QgsMapLayer *l = QgsMapLayerRegistry::instance()->mapLayer( layer.reference() ); if ( !l ) { PROVIDER_ERROR( QString( "Cannot find layer %1" ).arg( layer.reference() ) ); return false; } if ( l->type() != QgsMapLayer::VectorLayer ) { PROVIDER_ERROR( QString( "Layer %1 is not a vector layer" ).arg( layer.reference() ) ); return false; } // add the layer to the list QgsVectorLayer* vl = static_cast<QgsVectorLayer*>( l ); mLayers << SourceLayer( vl, layer.name() ); // connect to modification signals to invalidate statistics connect( vl, SIGNAL( featureAdded( QgsFeatureId ) ), this, SLOT( invalidateStatistics() ) ); connect( vl, SIGNAL( featureDeleted( QgsFeatureId ) ), this, SLOT( invalidateStatistics() ) ); connect( vl, SIGNAL( geometryChanged( QgsFeatureId, const QgsGeometry& ) ), this, SLOT( invalidateStatistics() ) ); } else {
QgsMapLayer* QgsMapLayer::fromLayerDefinition( QDomDocument& document ) { QDomNode layernode = document.elementsByTagName( "maplayer" ).at( 0 ); QDomElement layerElem = layernode.toElement(); QString type = layerElem.attribute( "type" ); QgsDebugMsg( type ); QgsMapLayer *layer = NULL; if ( type == "vector" ) { layer = new QgsVectorLayer; } else if ( type == "raster" ) { layer = new QgsRasterLayer; } else if ( type == "plugin" ) { QString typeName = layerElem.attribute( "name" ); layer = QgsPluginLayerRegistry::instance()->createLayer( typeName ); } bool ok = layer->readLayerXML( layerElem ); if ( ok ) return layer; delete layer; return 0; }
//introduced in 1.8 QList<QgsMapLayer *> QgsMapLayerRegistry::addMapLayers( QList<QgsMapLayer *> theMapLayers, bool addToLegend, bool takeOwnership ) { QList<QgsMapLayer *> myResultList; for ( int i = 0; i < theMapLayers.size(); ++i ) { QgsMapLayer * myLayer = theMapLayers.at( i ); if ( !myLayer || !myLayer->isValid() ) { QgsDebugMsg( "cannot add invalid layers" ); continue; } //check the layer is not already registered! if ( !mMapLayers.contains( myLayer->id() ) ) { mMapLayers[myLayer->id()] = myLayer; myResultList << mMapLayers[myLayer->id()]; if ( takeOwnership ) mOwnedLayers << myLayer; emit layerWasAdded( myLayer ); } } if ( myResultList.count() > 0 ) { emit layersAdded( myResultList ); if ( addToLegend ) emit legendLayersAdded( myResultList ); } return myResultList; } // QgsMapLayerRegistry::addMapLayers
QVariant CustomLayerOrderModel::data( const QModelIndex& index, int role ) const { QString id = mOrder.at( index.row() ); if ( role == Qt::DisplayRole ) { QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( id ); if ( layer ) return layer->name(); } if ( role == Qt::UserRole + 1 ) { QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( id ); if ( layer ) return layer->id(); } if ( role == Qt::CheckStateRole ) { QgsLayerTreeLayer* nodeLayer = mBridge->rootGroup()->findLayer( id ); if ( nodeLayer ) return nodeLayer->isVisible(); } return QVariant(); }
void QgsMapToolMoveLabel::canvasPressEvent( QgsMapMouseEvent* e ) { deleteRubberBands(); if ( !labelAtPosition( e, mCurrentLabelPos ) ) { return; } QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( mCurrentLabelPos.layerID ); if ( !layer || !layer->isEditable() ) { return; } int xCol, yCol; if ( labelMoveable( layer, xCol, yCol ) || diagramMoveable( layer, xCol, yCol ) ) { mStartPointMapCoords = toMapCoordinates( e->pos() ); QgsPoint referencePoint; if ( !rotationPoint( referencePoint, !preserveRotation(), false ) ) { referencePoint.setX( mCurrentLabelPos.labelRect.xMinimum() ); referencePoint.setY( mCurrentLabelPos.labelRect.yMinimum() ); } mClickOffsetX = mStartPointMapCoords.x() - referencePoint.x(); mClickOffsetY = mStartPointMapCoords.y() - referencePoint.y(); createRubberBands(); } }
QStringList QgsServerProjectParser::wcsLayerNames() const { QStringList layerNameList; QMap<QString, QgsMapLayer*> layerMap; projectLayerMap( layerMap ); QgsMapLayer* currentLayer = nullptr; QStringList wcsIdList = wcsLayers(); QStringList::const_iterator wcsIdIt = wcsIdList.constBegin(); for ( ; wcsIdIt != wcsIdList.constEnd(); ++wcsIdIt ) { QMap<QString, QgsMapLayer*>::const_iterator layerMapIt = layerMap.find( *wcsIdIt ); if ( layerMapIt != layerMap.constEnd() ) { currentLayer = layerMapIt.value(); if ( currentLayer ) { layerNameList.append( mUseLayerIDs ? currentLayer->id() : currentLayer->name() ); } } } return layerNameList; }
//introduced in 1.8 QList<QgsMapLayer *> QgsMapLayerRegistry::addMapLayers( QList<QgsMapLayer *> theMapLayers, bool addToLegend ) { QList<QgsMapLayer *> myResultList; for ( int i = 0; i < theMapLayers.size(); ++i ) { QgsMapLayer * myLayer = theMapLayers.at( i ); if ( !myLayer || !myLayer->isValid() ) { QgsDebugMsg( "cannot add invalid layers" ); continue; } //check the layer is not already registered! QMap<QString, QgsMapLayer*>::iterator myIterator = mMapLayers.find( myLayer->id() ); //if myIterator returns mMapLayers.end() then it //does not exist in registry and its safe to add it if ( myIterator == mMapLayers.end() ) { mMapLayers[myLayer->id()] = myLayer; myResultList << mMapLayers[myLayer->id()]; emit layerWasAdded( myLayer ); } } if ( myResultList.count() > 0 ) { emit layersAdded( myResultList ); if ( addToLegend ) emit legendLayersAdded( myResultList ); } return myResultList; } // QgsMapLayerRegistry::addMapLayers
void QgsLegendLayer::refreshSymbology( const QString& key ) { QgsMapLayer* theMapLayer = QgsMapLayerRegistry::instance()->mapLayer( key ); if ( !theMapLayer ) { return; } if ( theMapLayer->type() == QgsMapLayer::VectorLayer ) // VECTOR { QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer *>( theMapLayer ); vectorLayerSymbologyV2( vlayer ); } else if ( theMapLayer->type() == QgsMapLayer::RasterLayer ) // RASTER { QgsRasterLayer* rlayer = qobject_cast<QgsRasterLayer *>( theMapLayer ); rasterLayerSymbology( rlayer ); // get and change symbology } else if ( theMapLayer->type() == QgsMapLayer::PluginLayer ) { QgsPluginLayer* player = qobject_cast<QgsPluginLayer *>( theMapLayer ); QSize iconSize( 16, 16 ); SymbologyList itemList = player->legendSymbologyItems( iconSize ); changeSymbologySettings( theMapLayer, itemList ); } updateIcon(); }
bool QgsSpatialQueryDialog::hasPossibleQuery( QString &msg ) { // Count the number of vector layer QMap <QString, QgsMapLayer*> layers = QgsMapLayerRegistry::instance()->mapLayers(); QMapIterator <QString, QgsMapLayer*> item( layers ); QgsMapLayer * mapLayer = NULL; QgsVectorLayer * lyr = NULL; unsigned int totalVector = 0; while ( item.hasNext() ) { item.next(); mapLayer = item.value(); if ( mapLayer->type() != QgsMapLayer::VectorLayer ) { continue; } lyr = qobject_cast<QgsVectorLayer *>( mapLayer ); if ( !lyr ) { continue; } totalVector++; } // check is possible query if ( totalVector < 2 ) { msg = tr( "The spatial query requires at least two vector layers" ); return false; } else { return true; } } // bool QgsSpatialQueryDialog::hasPossibleQuery( QString &msg )
void QgsSpatialQueryDialog::populateCbTargetLayer() { cbTargetLayer->blockSignals( true ); QMap <QString, QgsMapLayer*> layers = QgsMapLayerRegistry::instance()->mapLayers(); QMapIterator <QString, QgsMapLayer*> item( layers ); QgsMapLayer * mapLayer = NULL; QgsVectorLayer * lyr = NULL; QString layerId; while ( item.hasNext() ) { item.next(); mapLayer = item.value(); if ( mapLayer->type() != QgsMapLayer::VectorLayer ) { continue; } lyr = qobject_cast<QgsVectorLayer *>( mapLayer ); if ( !lyr ) { continue; } addCbLayer( true, lyr ); mMapIdVectorLayers.insert( lyr->id(), lyr ); } cbTargetLayer->setCurrentIndex( 0 ); cbTargetLayer->blockSignals( false ); } // void QgsSpatialQueryDialog::populateCbTargetLayer()
void QgsMapCanvas::layerCrsChange() { // called when a layer's CRS has been changed QObject *theSender = sender(); QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( theSender ); QString destAuthId = mSettings.destinationCrs().authid(); getDatumTransformInfo( layer, layer->crs().authid(), destAuthId ); } // layerCrsChange
void QgsProjectParser::layersAndStylesCapabilities( QDomElement& parentElement, QDomDocument& doc ) const { QList<QDomElement> layerElems = projectLayerElements(); QStringList nonIdentifiableLayers = identifyDisabledLayers(); if ( layerElems.size() < 1 ) { return; } QMap<QString, QgsMapLayer *> layerMap; QList<QDomElement>::const_iterator layerIt = layerElems.constBegin(); for ( ; layerIt != layerElems.constEnd(); ++layerIt ) { QgsMapLayer *layer = createLayerFromElement( *layerIt ); if ( layer ) { QgsDebugMsg( QString( "add layer %1 to map" ).arg( layer->id() ) ); layerMap.insert( layer->id(), layer ); } #if QGSMSDEBUG else { QString buf; QTextStream s( &buf ); layerIt->save( s, 0 ); QgsDebugMsg( QString( "layer %1 not found" ).arg( buf ) ); } #endif } //According to the WMS spec, there can be only one toplevel layer. //So we create an artificial one here to be in accordance with the schema QString projTitle = projectTitle(); QDomElement layerParentElem = doc.createElement( "Layer" ); layerParentElem.setAttribute( "queryable", "1" ); QDomElement layerParentNameElem = doc.createElement( "Name" ); QDomText layerParentNameText = doc.createTextNode( projTitle ); layerParentNameElem.appendChild( layerParentNameText ); layerParentElem.appendChild( layerParentNameElem ); QDomElement layerParentTitleElem = doc.createElement( "Title" ); QDomText layerParentTitleText = doc.createTextNode( projTitle ); layerParentTitleElem.appendChild( layerParentTitleText ); layerParentElem.appendChild( layerParentTitleElem ); QDomElement legendElem = mXMLDoc->documentElement().firstChildElement( "legend" ); addLayers( doc, layerParentElem, legendElem, layerMap, nonIdentifiableLayers ); parentElement.appendChild( layerParentElem ); combineExtentAndCrsOfGroupChildren( layerParentElem, doc ); }
void QgsLegendLayer::updateIcon() { QPixmap newIcon( getOriginalPixmap() ); QgsMapLayer* theLayer = layer(); //overview // FIXME: overview icon is missing /* if ( theFile->isInOverview() ) { // Overlay the overview icon on the default icon QPixmap myPixmap = QgsApplication::getThemePixmap( "/mIconOverview.png" ); QPainter p( &newIcon ); p.drawPixmap( 0, 0, myPixmap ); p.end(); }*/ //editable if ( theLayer->isEditable() ) { QPixmap myPixmap; QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer *>( theLayer ); if ( vlayer->isModified() ) { myPixmap = QgsApplication::getThemePixmap( "/mIconEditableEdits.png" ); } else { myPixmap = QgsApplication::getThemePixmap( "/mIconEditable.png" ); } // use editable icon instead of the layer's type icon newIcon = myPixmap; // Overlay the editable icon on the default icon /*QPainter p( &newIcon ); p.drawPixmap( 0, 0, myPixmap ); p.end();*/ } // TODO: projection error icon? QIcon theIcon( newIcon ); QgsLegend* l = legend(); if ( l ) { l->blockSignals( true ); //prevent unnecessary canvas redraw } setIcon( 0, theIcon ); if ( l ) { l->blockSignals( false ); } }
QString QgsRasterTerrainAnalysisDialog::inputFile() const { QgsMapLayer* inputLayer = QgsMapLayerRegistry::instance()->mapLayer( mElevationLayerComboBox->itemData( mElevationLayerComboBox->currentIndex() ).toString() ); if ( !inputLayer ) { return ""; } QString inputFilePath = inputLayer->source(); return inputFilePath; }
bool QgsProject::addLayer( const QDomElement& layerElem, QList<QDomNode>& brokenNodes, QList< QPair< QgsVectorLayer*, QDomElement > >& vectorLayerList ) { QString type = layerElem.attribute( "type" ); QgsDebugMsg( "Layer type is " + type ); QgsMapLayer *mapLayer = NULL; if ( type == "vector" ) { mapLayer = new QgsVectorLayer; } else if ( type == "raster" ) { mapLayer = new QgsRasterLayer; } else if ( type == "plugin" ) { QString typeName = layerElem.attribute( "name" ); mapLayer = QgsPluginLayerRegistry::instance()->createLayer( typeName ); } if ( !mapLayer ) { QgsDebugMsg( "Unable to create layer" ); return false; } Q_CHECK_PTR( mapLayer ); // have the layer restore state that is stored in Dom node if ( mapLayer->readLayerXML( layerElem ) && mapLayer->isValid() ) { emit readMapLayer( mapLayer, layerElem ); QList<QgsMapLayer *> myLayers; myLayers << mapLayer; QgsMapLayerRegistry::instance()->addMapLayers( myLayers ); QgsVectorLayer* vLayer = qobject_cast<QgsVectorLayer*>( mapLayer ); if ( vLayer && vLayer->vectorJoins().size() > 0 ) { vectorLayerList.push_back( qMakePair( vLayer, layerElem ) ); } return true; } else { delete mapLayer; QgsDebugMsg( "Unable to load " + type + " layer" ); brokenNodes.push_back( layerElem ); return false; } }
void QgsMapLayerRegistry::reloadAllLayers() { QMap<QString, QgsMapLayer *>::iterator it; for ( it = mMapLayers.begin(); it != mMapLayers.end() ; ++it ) { QgsMapLayer* layer = it.value(); if ( layer ) { layer->reload(); } } }
bool QgsDecorationGrid::getIntervalFromCurrentLayer( double* values ) { // get current layer and make sure it is a raster layer and CRSs match QgsMapLayer* layer = QgisApp::instance()->mapCanvas()->currentLayer(); if ( ! layer ) { QMessageBox::warning( nullptr, tr( "Error" ), tr( "No active layer" ) ); return false; } if ( layer->type() != QgsMapLayer::RasterLayer ) { QMessageBox::warning( nullptr, tr( "Error" ), tr( "Please select a raster layer" ) ); return false; } QgsRasterLayer* rlayer = dynamic_cast<QgsRasterLayer*>( layer ); if ( !rlayer || rlayer->width() == 0 || rlayer->height() == 0 ) { QMessageBox::warning( nullptr, tr( "Error" ), tr( "Invalid raster layer" ) ); return false; } QgsCoordinateReferenceSystem layerCRS = layer->crs(); const QgsCoordinateReferenceSystem& mapCRS = QgisApp::instance()->mapCanvas()->mapSettings().destinationCrs(); // is this the best way to compare CRS? should we also make sure map has OTF enabled? // TODO calculate transformed values if necessary if ( layerCRS != mapCRS ) { QMessageBox::warning( nullptr, tr( "Error" ), tr( "Layer CRS must be equal to project CRS" ) ); return false; } // calculate interval // TODO add a function in QgsRasterLayer to get x/y resolution from provider, // because this might not be 100% accurate QgsRectangle extent = rlayer->extent(); values[0] = fabs( extent.xMaximum() - extent.xMinimum() ) / rlayer->width(); values[1] = fabs( extent.yMaximum() - extent.yMinimum() ) / rlayer->height(); // calculate offset - when using very high resolution rasters in geographic CRS // there seems to be a small shift, but this may be due to rendering issues and depends on zoom double ratio = extent.xMinimum() / values[0]; values[2] = ( ratio - floor( ratio ) ) * values[0]; ratio = extent.yMinimum() / values[1]; values[3] = ( ratio - floor( ratio ) ) * values[1]; QgsDebugMsg( QString( "xmax: %1 xmin: %2 width: %3 xInterval: %4 xOffset: %5" ).arg( extent.xMaximum() ).arg( extent.xMinimum() ).arg( rlayer->width() ).arg( values[0] ).arg( values[2] ) ); QgsDebugMsg( QString( "ymax: %1 ymin: %2 height: %3 yInterval: %4 yOffset: %5" ).arg( extent.yMaximum() ).arg( extent.yMinimum() ).arg( rlayer->height() ).arg( values[1] ).arg( values[3] ) ); return true; }
void QgsServerProjectParser::projectLayerMap( QMap<QString, QgsMapLayer*>& layerMap ) const { layerMap.clear(); QList<QDomElement>::const_iterator layerElemIt = mProjectLayerElements.constBegin(); for ( ; layerElemIt != mProjectLayerElements.constEnd(); ++layerElemIt ) { QgsMapLayer *layer = createLayerFromElement( *layerElemIt ); if ( layer ) { layerMap.insert( layer->id(), layer ); } } }
void QgsRasterTerrainAnalysisPlugin::run() { QgsRasterTerrainAnalysisDialog d( mIface ); if ( d.exec() == QDialog::Accepted ) { //get input layer from id QString inputLayerId = d.selectedInputLayerId(); QgsMapLayer* inputLayer = QgsMapLayerRegistry::instance()->mapLayer( inputLayerId ); if ( !inputLayer ) { return; } QString inputFilePath = inputLayer->source(); QString analysisMethod = d.selectedAnalysisMethod(); QString selectedFormat = d.selectedDriverKey(); QString outputFile = d.selectedOuputFilePath(); QgsNineCellFilter* filter = 0; if ( d.selectedAnalysisMethod() == tr( "Slope" ) ) { filter = new QgsSlopeFilter( inputFilePath, outputFile, selectedFormat ); } else if ( d.selectedAnalysisMethod() == tr( "Aspect" ) ) { filter = new QgsAspectFilter( inputFilePath, outputFile, selectedFormat ); } else if ( d.selectedAnalysisMethod() == tr( "Ruggedness index" ) ) { filter = new QgsRuggednessFilter( inputFilePath, outputFile, selectedFormat ); } else if ( d.selectedAnalysisMethod() == tr( "Total curvature" ) ) { filter = new QgsTotalCurvatureFilter( inputFilePath, outputFile, selectedFormat ); } if ( filter ) { QProgressDialog p( tr( "Calculating " ) + d.selectedAnalysisMethod() + "...", tr( "Abort..." ), 0, 0 ); p.setWindowModality( Qt::WindowModal ); filter->processRaster( &p ); delete filter; if ( d.addLayerToProject() ) { mIface->addRasterLayer( outputFile, d.selectedAnalysisMethod() ); } } } }
void QgsMapLayerStyleGuiUtils::removeStyle() { QAction *a = qobject_cast<QAction *>( sender() ); if ( !a ) return; QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( a->data().value<QObject *>() ); if ( !layer ) return; bool res = layer->styleManager()->removeStyle( layer->styleManager()->currentStyle() ); if ( !res ) { QgsDebugMsg( QStringLiteral( "Failed to remove current style" ) ); } }
void QgsMapLayerStyleGuiUtils::useStyle() { QAction *a = qobject_cast<QAction *>( sender() ); if ( !a ) return; QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( a->data().value<QObject *>() ); if ( !layer ) return; QString name = a->text(); bool res = layer->styleManager()->setCurrentStyle( name ); if ( !res ) { QgsDebugMsg( "Failed to set current style: " + name ); } }
void QgsMapCanvas::refreshAllLayers() { // reload all layers in canvas for ( int i = 0; i < layerCount(); i++ ) { QgsMapLayer *l = layer( i ); if ( l ) l->reload(); } // clear the cache clearCache(); // and then refresh refresh(); }