| 
    QGIS API Documentation
    3.26.3-Buenos Aires (65e4edfdad)
    
   | 
 
 
 
 
Go to the documentation of this file.
   34 class QgsAnnotationLayerSpatialIndex : 
public RTree<QString, float, 2, float>
 
   38     void insert( 
const QString &uuid, 
const QgsRectangle &bounds )
 
   40       std::array< float, 4 > scaledBounds = scaleBounds( bounds );
 
   43         scaledBounds[0], scaledBounds[ 1]
 
   46         scaledBounds[2], scaledBounds[3]
 
   57     void remove( 
const QString &uuid, 
const QgsRectangle &bounds )
 
   59       std::array< float, 4 > scaledBounds = scaleBounds( bounds );
 
   62         scaledBounds[0], scaledBounds[ 1]
 
   65         scaledBounds[2], scaledBounds[3]
 
   75     bool intersects( 
const QgsRectangle &bounds, 
const std::function< 
bool( 
const QString &uuid )> &callback )
 const 
   77       std::array< float, 4 > scaledBounds = scaleBounds( bounds );
 
   80         scaledBounds[0], scaledBounds[ 1]
 
   83         scaledBounds[2], scaledBounds[3]
 
   90     std::array<float, 4> scaleBounds( 
const QgsRectangle &bounds )
 const 
   94         static_cast< float >( bounds.
xMinimum() ),
 
   95         static_cast< float >( bounds.
yMinimum() ),
 
   96         static_cast< float >( bounds.
xMaximum() ),
 
   97         static_cast< float >( bounds.
yMaximum() )
 
  105   , mTransformContext( options.transformContext )
 
  106   , mSpatialIndex( std::make_unique< QgsAnnotationLayerSpatialIndex >() )
 
  113   mDataProvider = 
new QgsAnnotationLayerDataProvider( providerOptions, QgsDataProvider::ReadFlags() );
 
  116   mPaintEffect->setEnabled( 
false );
 
  122   qDeleteAll( mItems );
 
  123   delete mDataProvider;
 
  136   const QString uuid = QUuid::createUuid().toString();
 
  137   mItems.insert( uuid, 
item );
 
  139     mNonIndexedItems.insert( uuid );
 
  150   std::unique_ptr< QgsAnnotationItem> prevItem( mItems.take( 
id ) );
 
  154     auto it = mNonIndexedItems.find( 
id );
 
  155     if ( it == mNonIndexedItems.end() )
 
  157       mSpatialIndex->remove( 
id, prevItem->boundingBox() );
 
  161       mNonIndexedItems.erase( it );
 
  165   mItems.insert( 
id, 
item );
 
  167     mNonIndexedItems.insert( 
id );
 
  176   if ( !mItems.contains( 
id ) )
 
  179   std::unique_ptr< QgsAnnotationItem> 
item( mItems.take( 
id ) );
 
  181   auto it = mNonIndexedItems.find( 
id );
 
  182   if ( it == mNonIndexedItems.end() )
 
  188     mNonIndexedItems.erase( it );
 
  200   qDeleteAll( mItems );
 
  202   mSpatialIndex = std::make_unique< QgsAnnotationLayerSpatialIndex >();
 
  203   mNonIndexedItems.clear();
 
  210   return mItems.empty();
 
  215   return mItems.value( 
id );
 
  223   mSpatialIndex->intersects( bounds, [&res, feedback]( 
const QString & uuid )->
bool 
  233   QStringList res = queryIndex( bounds, feedback );
 
  235   for ( 
const QString &uuid : mNonIndexedItems )
 
  237     if ( mItems.value( uuid )->boundingBox( context ).intersects( bounds ) )
 
  250     auto it = mNonIndexedItems.find( operation->
itemId() );
 
  251     if ( it == mNonIndexedItems.end() )
 
  253       mSpatialIndex->remove( operation->
itemId(), targetItem->boundingBox() );
 
  255     res = targetItem->applyEdit( operation );
 
  263           mSpatialIndex->insert( operation->
itemId(), targetItem->boundingBox() );
 
  268         delete mItems.take( operation->
itemId() );
 
  269         mNonIndexedItems.remove( operation->
itemId() );
 
  289   std::unique_ptr< QgsAnnotationLayer > layer = std::make_unique< QgsAnnotationLayer >( 
name(), options );
 
  292   for ( 
auto it = mItems.constBegin(); it != mItems.constEnd(); ++it )
 
  294     layer->mItems.insert( it.key(), ( *it )->clone() );
 
  296       layer->mNonIndexedItems.insert( it.key() );
 
  298       layer->mSpatialIndex->insert( it.key(), ( *it )->boundingBox() );
 
  302     layer->setPaintEffect( mPaintEffect->clone() );
 
  304   return layer.release();
 
  315   for ( 
auto it = mItems.constBegin(); it != mItems.constEnd(); ++it )
 
  319       rect = it.value()->boundingBox();
 
  334   mTransformContext = context;
 
  345   qDeleteAll( mItems );
 
  347   mSpatialIndex = std::make_unique< QgsAnnotationLayerSpatialIndex >();
 
  348   mNonIndexedItems.clear();
 
  350   const QDomNodeList itemsElements = layerNode.toElement().elementsByTagName( QStringLiteral( 
"items" ) );
 
  351   if ( itemsElements.size() == 0 )
 
  354   const QDomNodeList 
items = itemsElements.at( 0 ).childNodes();
 
  355   for ( 
int i = 0; i < 
items.size(); ++i )
 
  357     const QDomElement itemElement = 
items.at( i ).toElement();
 
  358     const QString 
id = itemElement.attribute( QStringLiteral( 
"id" ) );
 
  359     const QString 
type = itemElement.attribute( QStringLiteral( 
"type" ) );
 
  365         mNonIndexedItems.insert( 
id );
 
  368       mItems.insert( 
id, 
item.release() );
 
  383   QDomElement mapLayerNode = layer_node.toElement();
 
  385   if ( mapLayerNode.isNull() )
 
  393   QDomElement itemsElement = doc.createElement( QStringLiteral( 
"items" ) );
 
  394   for ( 
auto it = mItems.constBegin(); it != mItems.constEnd(); ++it )
 
  396     QDomElement itemElement = doc.createElement( QStringLiteral( 
"item" ) );
 
  397     itemElement.setAttribute( QStringLiteral( 
"type" ), ( *it )->type() );
 
  398     itemElement.setAttribute( QStringLiteral( 
"id" ), it.key() );
 
  399     ( *it )->writeXml( itemElement, doc, context );
 
  400     itemsElement.appendChild( itemElement );
 
  402   mapLayerNode.appendChild( itemsElement );
 
  414     QDomElement layerOpacityElem  = doc.createElement( QStringLiteral( 
"layerOpacity" ) );
 
  415     const QDomText layerOpacityText = doc.createTextNode( QString::number( 
opacity() ) );
 
  416     layerOpacityElem.appendChild( layerOpacityText );
 
  417     node.appendChild( layerOpacityElem );
 
  423     QDomElement blendModeElem  = doc.createElement( QStringLiteral( 
"blendMode" ) );
 
  425     blendModeElem.appendChild( blendModeText );
 
  426     node.appendChild( blendModeElem );
 
  428     QDomElement paintEffectElem  = doc.createElement( QStringLiteral( 
"paintEffect" ) );
 
  430       mPaintEffect->saveProperties( doc, paintEffectElem );
 
  431     node.appendChild( paintEffectElem );
 
  441     const QDomNode layerOpacityNode = node.namedItem( QStringLiteral( 
"layerOpacity" ) );
 
  442     if ( !layerOpacityNode.isNull() )
 
  444       const QDomElement e = layerOpacityNode.toElement();
 
  452     const QDomNode blendModeNode = node.namedItem( QStringLiteral( 
"blendMode" ) );
 
  453     if ( !blendModeNode.isNull() )
 
  455       const QDomElement e = blendModeNode.toElement();
 
  460     const QDomNode paintEffectNode = node.namedItem( QStringLiteral( 
"paintEffect" ) );
 
  461     if ( !paintEffectNode.isNull() )
 
  463       const QDomElement effectElem = paintEffectNode.firstChildElement( QStringLiteral( 
"effect" ) );
 
  464       if ( !effectElem.isNull() )
 
  487   return mDataProvider;
 
  492   return mDataProvider;
 
  497   QString 
metadata = QStringLiteral( 
"<html>\n<body>\n<h1>" ) + tr( 
"General" ) + QStringLiteral( 
"</h1>\n<hr>\n" ) + QStringLiteral( 
"<table class=\"list-view\">\n" );
 
  499   metadata += QStringLiteral( 
"<tr><td class=\"highlight\">" ) + tr( 
"Name" ) + QStringLiteral( 
"</td><td>" ) + 
name() + QStringLiteral( 
"</td></tr>\n" );
 
  502   metadata += QStringLiteral( 
"<tr><td class=\"highlight\">" ) + tr( 
"Extent" ) + QStringLiteral( 
"</td><td>" ) + 
extent().
toString() + QStringLiteral( 
"</td></tr>\n" );
 
  505   QLocale locale = QLocale();
 
  506   locale.setNumberOptions( locale.numberOptions() &= ~QLocale::NumberOption::OmitGroupSeparator );
 
  507   const int itemCount = mItems.size();
 
  508   metadata += QStringLiteral( 
"<tr><td class=\"highlight\">" )
 
  509               + tr( 
"Item count" ) + QStringLiteral( 
"</td><td>" )
 
  510               + locale.toString( 
static_cast<qlonglong
>( itemCount ) )
 
  511               + QStringLiteral( 
"</td></tr>\n" );
 
  512   metadata += QLatin1String( 
"</table>\n<br><br>" );
 
  518   metadata += QStringLiteral( 
"<h1>" ) + tr( 
"Items" ) + QStringLiteral( 
"</h1>\n<hr>\n" );
 
  520   metadata += QLatin1String( 
"<table width=\"100%\" class=\"tabular-view\">\n" );
 
  521   metadata += QLatin1String( 
"<tr><th>" ) + tr( 
"Type" ) + QLatin1String( 
"</th><th>" ) + tr( 
"Count" ) + QLatin1String( 
"</th></tr>\n" );
 
  523   QMap< QString, int > itemCounts;
 
  524   for ( 
auto it = mItems.constBegin(); it != mItems.constEnd(); ++it )
 
  526     itemCounts[ it.value()->type() ]++;
 
  531   for ( 
auto it = itemTypes.begin(); it != itemTypes.end(); ++it )
 
  535       rowClass = QStringLiteral( 
"class=\"odd-row\"" );
 
  536     metadata += QLatin1String( 
"<tr " ) + rowClass + QLatin1String( 
"><td>" ) + it.value() + QLatin1String( 
"</td><td>" ) + locale.toString( 
static_cast<qlonglong
>( itemCounts.value( it.key() ) ) ) + QLatin1String( 
"</td></tr>\n" );
 
  540   metadata += QLatin1String( 
"</table>\n<br><br>" );
 
  542   metadata += QLatin1String( 
"\n</body>\n</html>\n" );
 
  548   return mPaintEffect.get();
 
  553   mPaintEffect.reset( effect );
 
  561 QgsAnnotationLayerDataProvider::QgsAnnotationLayerDataProvider(
 
  562   const ProviderOptions &options,
 
  563   QgsDataProvider::ReadFlags flags )
 
  572 QString QgsAnnotationLayerDataProvider::name()
 const 
  574   return QStringLiteral( 
"annotation" );
 
  577 QString QgsAnnotationLayerDataProvider::description()
 const 
  582 QgsRectangle QgsAnnotationLayerDataProvider::extent()
 const 
  587 bool QgsAnnotationLayerDataProvider::isValid()
 const 
  
void willBeDeleted()
Emitted in the destructor when the layer is about to be deleted, but it is still in a perfectly valid...
 
QString crsHtmlMetadata() const
Returns a HTML fragment containing the layer's CRS metadata, for use in the htmlMetadata() method.
 
QgsAnnotationLayer * clone() const override
Returns a new instance equivalent to this one except for the id which is still unique.
 
Contains information about the context in which a coordinate transform is executed.
 
QString htmlMetadata() const override
Obtain a formatted HTML string containing assorted metadata for this layer.
 
Setting options for creating vector data providers.
 
void combineExtentWith(const QgsRectangle &rect)
Expands the rectangle so that it covers both the original rectangle and the given rectangle.
 
BlendMode
Blending modes enum defining the available composition modes that can be used when rendering a layer.
 
The class is used as a container of context for various read/write operations on other objects.
 
Abstract base class for spatial data provider implementations.
 
bool writeXml(QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context) const override
Called by writeLayerXML(), used by children to write state specific to them to project files.
 
#define QgsDebugMsgLevel(str, level)
 
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
 
QPainter::CompositionMode blendMode() const
Returns the current blending mode for a layer.
 
QgsMapLayer::ReadFlags mReadFlags
Read flags. It's up to the subclass to respect these when restoring state from XML.
 
const QgsCoordinateReferenceSystem & crs
 
@ AnnotationLayer
Contains freeform, georeferenced annotations. Added in QGIS 3.16.
 
QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext) override
Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context.
 
QgsMapLayerType
Types of layers that can be added to a map.
 
double yMinimum() const SIP_HOLDGIL
Returns the y minimum value (bottom side of rectangle).
 
void clear()
Removes all items from the layer.
 
virtual bool readXml(const QDomElement &element, const QgsReadWriteContext &context)=0
Reads the item's state from the given DOM element.
 
bool isCanceled() const SIP_HOLDGIL
Tells whether the operation has been canceled already.
 
Contains information about the context of a rendering operation.
 
void setBlendMode(QPainter::CompositionMode blendMode)
Set the blending mode used for rendering a layer.
 
static QgsPaintEffect * defaultStack()
Returns a new effect stack consisting of a sensible selection of default effects.
 
QgsAnnotationItem * item(const QString &id)
Returns the item with the specified id, or nullptr if no matching item was found.
 
Setting options for loading annotation layers.
 
void setCrs(const QgsCoordinateReferenceSystem &srs, bool emitSignal=true)
Sets layer's spatial reference system.
 
A rectangle specified with double values.
 
bool mShouldValidateCrs
true if the layer's CRS should be validated and invalid CRSes are not permitted.
 
bool readSymbology(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories) override
Read the symbology for the current layer from the DOM node supplied.
 
bool supportsEditing() const override
Returns whether the layer supports editing or not.
 
@ Rendering
Rendering: scale visibility, simplify method, opacity.
 
QString itemId() const
Returns the associated item ID.
 
void replaceItem(const QString &id, QgsAnnotationItem *item)
Replaces the existing item with matching id with a new item.
 
Base class for utility classes that encapsulate information necessary for rendering of map layers.
 
static QgsPainting::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a BlendMode corresponding to a QPainter::CompositionMode.
 
AnnotationItemEditOperationResult
Results from an edit operation on an annotation item.
 
@ ItemCleared
The operation results in the item being cleared, and the item should be removed from the layer as a r...
 
friend class QgsAnnotationLayerRenderer
 
QMap< QString, QString > itemTypes() const
Returns a map of available item types to translated name.
 
void triggerRepaint(bool deferredUpdate=false)
Will advise the map canvas (and any other interested party) that this layer requires to be repainted.
 
double xMaximum() const SIP_HOLDGIL
Returns the x maximum value (right side of rectangle).
 
@ FlagDontResolveLayers
Don't resolve layer paths or create data providers for layers.
 
static QString typeToString(QgsMapLayerType type)
Converts a map layer type to a string value.
 
QgsLayerMetadata metadata
 
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
 
bool mValid
Indicates if the layer is valid and can be drawn.
 
Qgis::AnnotationItemEditOperationResult applyEdit(QgsAbstractAnnotationItemEditOperation *operation)
Applies an edit operation to the layer.
 
bool isEditable() const override
Returns true if the layer can be edited.
 
bool isEmpty() const
Returns true if the annotation layer is empty and contains no annotations.
 
QString addItem(QgsAnnotationItem *item)
Adds an item to the layer.
 
Base class for feedback objects to be used for cancellation of something running in a worker thread.
 
static QPainter::CompositionMode getCompositionMode(QgsPainting::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a BlendMode.
 
QgsDataProvider * dataProvider() override
Returns the layer's data provider, it may be nullptr.
 
virtual void setOpacity(double opacity)
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
 
bool removeItem(const QString &id)
Removes (and deletes) the item with matching id.
 
bool writeSymbology(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &, StyleCategories categories=AllStyleCategories) const override
Write the style for the layer into the document provided.
 
double xMinimum() const SIP_HOLDGIL
Returns the x minimum value (left side of rectangle).
 
QgsCoordinateTransformContext transformContext
Coordinate transform context.
 
This class represents a coordinate reference system (CRS).
 
Abstract base class for annotation item edit operations.
 
bool readXml(const QDomNode &layerNode, QgsReadWriteContext &context) override
Called by readLayerXML(), used by children to read state specific to them from project files.
 
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the layer.
 
QString toString(int precision=16) const
Returns a string representation of form xmin,ymin : xmax,ymax Coordinates will be truncated to the sp...
 
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext)
Sets data coordinate transform context to transformContext.
 
~QgsAnnotationLayer() override
 
virtual QgsRectangle boundingBox() const =0
Returns the bounding box of the item's geographic location, in the parent layer's coordinate referenc...
 
@ Success
Item was modified successfully.
 
QMap< QString, QgsAnnotationItem * > items() const
Returns a map of items contained in the layer, by unique item ID.
 
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the layer.
 
QStringList itemsInBounds(const QgsRectangle &bounds, QgsRenderContext &context, QgsFeedback *feedback=nullptr) const
Returns a list of the IDs of all annotation items within the specified bounds (in layer CRS),...
 
double yMaximum() const SIP_HOLDGIL
Returns the y maximum value (top side of rectangle).
 
Qgis::MapLayerProperties properties() const override
Returns the map layer properties of this layer.
 
static QgsPaintEffectRegistry * paintEffectRegistry()
Returns the application's paint effect registry, used for managing paint effects.
 
Base class for all map layer types. This is the base class for all map layer types (vector,...
 
Represents a map layer containing a set of georeferenced annotations, e.g. markers,...
 
void invalidateWgs84Extent()
Invalidates the WGS84 extent.
 
void reset()
Resets the annotation layer to a default state, and clears all items from it.
 
Base class for visual effects which can be applied to QPicture drawings.
 
virtual Qgis::AnnotationItemFlags flags() const
Returns item flags.
 
QgsCoordinateTransformContext transformContext
Coordinate transform context.
 
QgsRectangle extent() const override
Returns the extent of the layer.
 
@ UsersCannotToggleEditing
Indicates that users are not allowed to toggle editing for this layer. Note that this does not imply ...
 
@ ScaleDependentBoundingBox
Item's bounding box will vary depending on map scale.
 
void setTransformContext(const QgsCoordinateTransformContext &context) override
Sets the coordinate transform context to transformContext.
 
QgsAnnotationLayer(const QString &name, const QgsAnnotationLayer::LayerOptions &options)
Constructor for a new QgsAnnotationLayer with the specified layer name.
 
bool isNull() const
Test if the rectangle is null (all coordinates zero or after call to setMinimal()).
 
Abstract base class for annotation items which are drawn with QgsAnnotationLayers.
 
static QgsAnnotationItemRegistry * annotationItemRegistry()
Returns the application's annotation item registry, used for annotation item types.
 
@ Invalid
Operation has invalid parameters for the item, no change occurred.