QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgslayermetadata.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgslayermetadata.cpp
3 --------------------
4 begin : April 2017
5 copyright : (C) 2017 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "qgslayermetadata.h"
19
20#include "qgsmaplayer.h"
22
23#include <QRegularExpression>
24
26{
27 return new QgsLayerMetadata( *this );
28}
29
31{
32 return mFees;
33}
34
35void QgsLayerMetadata::setFees( const QString &fees )
36{
37 mFees = fees;
38}
39
41{
42 mConstraints << constraint;
43}
44
45QList<QgsLayerMetadata::Constraint> QgsLayerMetadata::constraints() const
46{
47 return mConstraints;
48}
49
50void QgsLayerMetadata::setConstraints( const QList<Constraint> &constraints )
51{
52 mConstraints = constraints;
53}
54
55QStringList QgsLayerMetadata::rights() const
56{
57 return mRights;
58}
59
60void QgsLayerMetadata::setRights( const QStringList &rights )
61{
62 mRights = rights;
63}
64
65QStringList QgsLayerMetadata::licenses() const
66{
67 return mLicenses;
68}
69
70void QgsLayerMetadata::setLicenses( const QStringList &licenses )
71{
72 mLicenses = licenses;
73}
74
76{
77 return mEncoding;
78}
79
81{
82 mEncoding = encoding;
83}
84
89
94
96{
97 layer->setCustomProperty( QStringLiteral( "metadata/identifier" ), mIdentifier );
98 layer->setCustomProperty( QStringLiteral( "metadata/parentIdentifier" ), mParentIdentifier );
99 layer->setCustomProperty( QStringLiteral( "metadata/language" ), mLanguage );
100 layer->setCustomProperty( QStringLiteral( "metadata/type" ), mType );
101 layer->setCustomProperty( QStringLiteral( "metadata/title" ), mTitle );
102 layer->setCustomProperty( QStringLiteral( "metadata/extent" ), QVariant::fromValue( mExtent ) );
103 layer->setCustomProperty( QStringLiteral( "metadata/abstract" ), mAbstract );
104 layer->setCustomProperty( QStringLiteral( "metadata/fees" ), mFees );
105 layer->setCustomProperty( QStringLiteral( "metadata/rights" ), mRights );
106 layer->setCustomProperty( QStringLiteral( "metadata/licenses" ), mLicenses );
107 layer->setCustomProperty( QStringLiteral( "metadata/history" ), mHistory );
108 layer->setCustomProperty( QStringLiteral( "metadata/encoding" ), mEncoding );
109 layer->setCustomProperty( QStringLiteral( "metadata/crs" ), mCrs.authid() );
110 layer->setCustomProperty( QStringLiteral( "metadata/constraints" ), QVariant::fromValue( mConstraints ) );
111 layer->setCustomProperty( QStringLiteral( "metadata/keywords" ), QVariant::fromValue( mKeywords ) );
112 layer->setCustomProperty( QStringLiteral( "metadata/contacts" ), QVariant::fromValue( mContacts ) );
113 layer->setCustomProperty( QStringLiteral( "metadata/links" ), QVariant::fromValue( mLinks ) );
114}
115
117{
118 mIdentifier = layer->customProperty( QStringLiteral( "metadata/identifier" ) ).toString();
119 mParentIdentifier = layer->customProperty( QStringLiteral( "metadata/parentIdentifier" ) ).toString();
120 mLanguage = layer->customProperty( QStringLiteral( "metadata/language" ) ).toString();
121 mType = layer->customProperty( QStringLiteral( "metadata/type" ) ).toString();
122 mTitle = layer->customProperty( QStringLiteral( "metadata/title" ) ).toString();
123 mAbstract = layer->customProperty( QStringLiteral( "metadata/abstract" ) ).toString();
124 mFees = layer->customProperty( QStringLiteral( "metadata/fees" ) ).toString();
125 mRights = layer->customProperty( QStringLiteral( "metadata/rights" ) ).toStringList();
126 mLicenses = layer->customProperty( QStringLiteral( "metadata/licenses" ) ).toStringList();
127 mHistory = layer->customProperty( QStringLiteral( "metadata/history" ) ).toStringList();
128 mEncoding = layer->customProperty( QStringLiteral( "metadata/encoding" ) ).toString();
129 const QString crsAuthId = layer->customProperty( QStringLiteral( "metadata/crs" ) ).toString();
131 mExtent = layer->customProperty( QStringLiteral( "metadata/extent" ) ).value<Extent>();
132 mConstraints = layer->customProperty( QStringLiteral( "metadata/constraints" ) ).value<ConstraintList>();
133 mKeywords = layer->customProperty( QStringLiteral( "metadata/keywords" ) ).value<QgsAbstractMetadataBase::KeywordMap>();
134 mContacts = layer->customProperty( QStringLiteral( "metadata/contacts" ) ).value<QgsAbstractMetadataBase::ContactList>();
135 mLinks = layer->customProperty( QStringLiteral( "metadata/links" ) ).value<QgsAbstractMetadataBase::LinkList>();
136}
137
138bool QgsLayerMetadata::readMetadataXml( const QDomElement &metadataElement, const QgsReadWriteContext &context )
139{
140 QgsAbstractMetadataBase::readMetadataXml( metadataElement, context );
141
142 QDomNode mnl;
143 QDomElement mne;
144
145 // set fees
146 mnl = metadataElement.namedItem( QStringLiteral( "fees" ) );
147 mFees = mnl.toElement().text();
148
149 // constraints
150 const QDomNodeList constraintsList = metadataElement.elementsByTagName( QStringLiteral( "constraints" ) );
151 mConstraints.clear();
152 for ( int i = 0; i < constraintsList.size(); i++ )
153 {
154 mnl = constraintsList.at( i );
155 mne = mnl.toElement();
156 addConstraint( QgsLayerMetadata::Constraint( mne.text(), mne.attribute( QStringLiteral( "type" ) ) ) );
157 }
158
159 // rights
160 const QDomNodeList rightsNodeList = metadataElement.elementsByTagName( QStringLiteral( "rights" ) );
161 QStringList rightsList;
162 for ( int i = 0; i < rightsNodeList.size(); i++ )
163 {
164 mnl = rightsNodeList.at( i );
165 mne = mnl.toElement();
166 const QString right = context.projectTranslator()->translate( "metadata", mne.text() );
167 rightsList.append( right );
168 }
169 setRights( rightsList );
170
171 // licenses
172 const QDomNodeList licensesNodeList = metadataElement.elementsByTagName( QStringLiteral( "license" ) );
173 QStringList licensesList;
174 for ( int i = 0; i < licensesNodeList.size(); i++ )
175 {
176 mnl = licensesNodeList.at( i );
177 mne = mnl.toElement();
178 licensesList.append( mne.text() );
179 }
180 setLicenses( licensesList );
181
182 // encoding
183 mnl = metadataElement.namedItem( QStringLiteral( "encoding" ) );
184 mEncoding = mnl.toElement().text();
185
186 // crs
187 mnl = metadataElement.namedItem( QStringLiteral( "crs" ) );
188 if ( !mCrs.readXml( mnl ) )
190
191 // extent
192 mnl = metadataElement.namedItem( QStringLiteral( "extent" ) );
193 QgsLayerMetadata::Extent metadataExtent;
194
195 // spatial extent
196 const QDomNodeList spatialList = mnl.toElement().elementsByTagName( QStringLiteral( "spatial" ) );
197 QList< QgsLayerMetadata::SpatialExtent > metadataSpatialExtents;
198 for ( int i = 0; i < spatialList.size(); i++ )
199 {
200 mnl = spatialList.at( i );
201 mne = mnl.toElement();
203 se.extentCrs = QgsCoordinateReferenceSystem( mne.attribute( QStringLiteral( "crs" ) ) );
204 se.bounds = QgsBox3D();
205 se.bounds.setXMinimum( mne.attribute( QStringLiteral( "minx" ) ).toDouble() );
206 se.bounds.setYMinimum( mne.attribute( QStringLiteral( "miny" ) ).toDouble() );
207 se.bounds.setZMinimum( mne.attribute( QStringLiteral( "minz" ) ).toDouble() );
208 se.bounds.setXMaximum( mne.attribute( QStringLiteral( "maxx" ) ).toDouble() );
209 se.bounds.setYMaximum( mne.attribute( QStringLiteral( "maxy" ) ).toDouble() );
210 se.bounds.setZMaximum( mne.attribute( QStringLiteral( "maxz" ) ).toDouble() );
211 metadataSpatialExtents.append( se );
212 }
213 metadataExtent.setSpatialExtents( metadataSpatialExtents );
214
215 // temporal extent
216 mnl = metadataElement.namedItem( QStringLiteral( "extent" ) );
217 const QDomNodeList temporalList = mnl.toElement().elementsByTagName( QStringLiteral( "temporal" ) );
218 QList<QgsDateTimeRange> metadataDates;
219 for ( int j = 0; j < temporalList.size(); j++ )
220 {
221 mnl = temporalList.at( j );
222 const QDomNodeList instantList = mnl.toElement().elementsByTagName( QStringLiteral( "instant" ) );
223 for ( int i = 0; i < instantList.size(); i++ )
224 {
225 mnl = instantList.at( i );
226 const QDateTime d = QDateTime::fromString( mnl.toElement().text(), Qt::ISODate );
227 const QgsDateTimeRange date = QgsDateTimeRange( d, d );
228 metadataDates << date;
229 }
230 const QDomNodeList periodList = mnl.toElement().elementsByTagName( QStringLiteral( "period" ) );
231 for ( int i = 0; i < periodList.size(); i++ )
232 {
233 const QDomNode begin = periodList.at( i ).namedItem( QStringLiteral( "start" ) );
234 const QDomNode end = periodList.at( i ).namedItem( QStringLiteral( "end" ) );
235 const QDateTime beginDate = QDateTime::fromString( begin.toElement().text(), Qt::ISODate );
236 const QDateTime endDate = QDateTime::fromString( end.toElement().text(), Qt::ISODate );
237 const QgsDateTimeRange date = QgsDateTimeRange( beginDate, endDate );
238 metadataDates << date;
239 }
240 }
241 metadataExtent.setTemporalExtents( metadataDates );
242 setExtent( metadataExtent );
243
244 return true;
245}
246
247bool QgsLayerMetadata::writeMetadataXml( QDomElement &metadataElement, QDomDocument &document, const QgsReadWriteContext &context ) const
248{
249 QgsAbstractMetadataBase::writeMetadataXml( metadataElement, document, context );
250
251 // fees
252 QDomElement fees = document.createElement( QStringLiteral( "fees" ) );
253 const QDomText feesText = document.createTextNode( mFees );
254 fees.appendChild( feesText );
255 metadataElement.appendChild( fees );
256
257 // constraints
258 for ( const QgsLayerMetadata::Constraint &constraint : mConstraints )
259 {
260 QDomElement constraintElement = document.createElement( QStringLiteral( "constraints" ) );
261 constraintElement.setAttribute( QStringLiteral( "type" ), constraint.type );
262 const QDomText constraintText = document.createTextNode( constraint.constraint );
263 constraintElement.appendChild( constraintText );
264 metadataElement.appendChild( constraintElement );
265 }
266
267 // rights
268 for ( const QString &right : mRights )
269 {
270 QDomElement rightElement = document.createElement( QStringLiteral( "rights" ) );
271 const QDomText rightText = document.createTextNode( right );
272 rightElement.appendChild( rightText );
273 metadataElement.appendChild( rightElement );
274 }
275
276 // license
277 for ( const QString &license : mLicenses )
278 {
279 QDomElement licenseElement = document.createElement( QStringLiteral( "license" ) );
280 const QDomText licenseText = document.createTextNode( license );
281 licenseElement.appendChild( licenseText );
282 metadataElement.appendChild( licenseElement );
283 }
284
285 // encoding
286 QDomElement encoding = document.createElement( QStringLiteral( "encoding" ) );
287 const QDomText encodingText = document.createTextNode( mEncoding );
288 encoding.appendChild( encodingText );
289 metadataElement.appendChild( encoding );
290
291 // crs
292 QDomElement crsElement = document.createElement( QStringLiteral( "crs" ) );
293 mCrs.writeXml( crsElement, document );
294 metadataElement.appendChild( crsElement );
295
296 // extent
297 QDomElement extentElement = document.createElement( QStringLiteral( "extent" ) );
298
299 // spatial extents
300 const QList< QgsLayerMetadata::SpatialExtent > sExtents = extent().spatialExtents();
301 for ( const QgsLayerMetadata::SpatialExtent &spatialExtent : sExtents )
302 {
303 QDomElement spatialElement = document.createElement( QStringLiteral( "spatial" ) );
304 // Dimensions fixed in the XSD
305 spatialElement.setAttribute( QStringLiteral( "dimensions" ), QStringLiteral( "2" ) );
306 spatialElement.setAttribute( QStringLiteral( "crs" ), spatialExtent.extentCrs.authid() );
307 spatialElement.setAttribute( QStringLiteral( "minx" ), qgsDoubleToString( spatialExtent.bounds.xMinimum() ) );
308 spatialElement.setAttribute( QStringLiteral( "miny" ), qgsDoubleToString( spatialExtent.bounds.yMinimum() ) );
309 spatialElement.setAttribute( QStringLiteral( "minz" ), qgsDoubleToString( spatialExtent.bounds.zMinimum() ) );
310 spatialElement.setAttribute( QStringLiteral( "maxx" ), qgsDoubleToString( spatialExtent.bounds.xMaximum() ) );
311 spatialElement.setAttribute( QStringLiteral( "maxy" ), qgsDoubleToString( spatialExtent.bounds.yMaximum() ) );
312 spatialElement.setAttribute( QStringLiteral( "maxz" ), qgsDoubleToString( spatialExtent.bounds.zMaximum() ) );
313 extentElement.appendChild( spatialElement );
314 }
315
316 // temporal extents
317 const QList< QgsDateTimeRange > tExtents = extent().temporalExtents();
318 for ( const QgsDateTimeRange &temporalExtent : tExtents )
319 {
320 QDomElement temporalElement = document.createElement( QStringLiteral( "temporal" ) );
321 if ( temporalExtent.isInstant() )
322 {
323 QDomElement instantElement = document.createElement( QStringLiteral( "instant" ) );
324 const QDomText instantText = document.createTextNode( temporalExtent.begin().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODate ) );
325 instantElement.appendChild( instantText );
326 temporalElement.appendChild( instantElement );
327 }
328 else
329 {
330 QDomElement periodElement = document.createElement( QStringLiteral( "period" ) );
331 QDomElement startElement = document.createElement( QStringLiteral( "start" ) );
332 QDomElement endElement = document.createElement( QStringLiteral( "end" ) );
333 const QDomText startText = document.createTextNode( temporalExtent.begin().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODate ) );
334 const QDomText endText = document.createTextNode( temporalExtent.end().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODate ) );
335 startElement.appendChild( startText );
336 endElement.appendChild( endText );
337 periodElement.appendChild( startElement );
338 periodElement.appendChild( endElement );
339 temporalElement.appendChild( periodElement );
340 }
341 extentElement.appendChild( temporalElement );
342 }
343
344 metadataElement.appendChild( extentElement );
345
346 return true;
347}
348
350{
352
353 for ( const QString &right : std::as_const( mRights ) )
354 {
355 translationContext->registerTranslation( QStringLiteral( "metadata" ), right );
356 }
357}
358
360{
362
363 if ( const QgsLayerMetadata *otherLayerMetadata = dynamic_cast< const QgsLayerMetadata * >( other ) )
364 {
365 if ( !otherLayerMetadata->fees().isEmpty() )
366 mFees = otherLayerMetadata->fees();
367
368 if ( !otherLayerMetadata->constraints().isEmpty() )
369 mConstraints = otherLayerMetadata->constraints();
370
371 if ( !otherLayerMetadata->rights().isEmpty() )
372 mRights = otherLayerMetadata->rights();
373
374 if ( !otherLayerMetadata->licenses().isEmpty() )
375 mLicenses = otherLayerMetadata->licenses();
376
377 if ( !otherLayerMetadata->encoding().isEmpty() )
378 mEncoding = otherLayerMetadata->encoding();
379
380 if ( otherLayerMetadata->crs().isValid() )
381 mCrs = otherLayerMetadata->crs();
382
383 if ( !otherLayerMetadata->extent().spatialExtents().isEmpty() )
384 mExtent.setSpatialExtents( otherLayerMetadata->extent().spatialExtents() );
385
386 if ( !otherLayerMetadata->extent().temporalExtents().isEmpty() )
387 mExtent.setTemporalExtents( otherLayerMetadata->extent().temporalExtents() );
388 }
389}
390
392{
393 return mExtent;
394}
395
397{
398 return mExtent;
399}
400
402{
403 mExtent = extent;
404}
405
406QList<QgsLayerMetadata::SpatialExtent> QgsLayerMetadata::Extent::spatialExtents() const
407{
408 return mSpatialExtents;
409}
410
411void QgsLayerMetadata::Extent::setSpatialExtents( const QList<QgsLayerMetadata::SpatialExtent> &spatialExtents )
412{
413 mSpatialExtents = spatialExtents;
414}
415
416QList<QgsDateTimeRange> QgsLayerMetadata::Extent::temporalExtents() const
417{
418 return mTemporalExtents;
419}
420
422{
423 mTemporalExtents = temporalExtents;
424}
425
427{
428 return mSpatialExtents == other.mSpatialExtents && mTemporalExtents == other.mTemporalExtents;
429}
430
432{
433 return equals( other ) &&
434 mFees == other.mFees &&
435 mConstraints == other.mConstraints &&
436 mRights == other.mRights &&
437 mLicenses == other.mLicenses &&
438 mEncoding == other.mEncoding &&
439 mCrs == other.mCrs &&
440 mExtent == other.mExtent;
441}
442
443bool QgsLayerMetadata::contains( const QString &searchString ) const
444{
445
446 if ( searchString.trimmed().isEmpty() )
447 {
448 return false;
449 }
450
451 if ( title().contains( searchString, Qt::CaseInsensitive ) ||
452 identifier().contains( searchString, Qt::CaseInsensitive ) ||
453 abstract().contains( searchString, Qt::CaseInsensitive ) )
454 {
455 return true;
456 }
457
458 const QList<QStringList> keyVals { keywords().values() };
459 for ( const QStringList &kws : std::as_const( keyVals ) )
460 {
461 for ( const QString &kw : std::as_const( kws ) )
462 {
463 if ( kw.contains( searchString, Qt::CaseSensitivity::CaseInsensitive ) )
464 {
465 return true;
466 }
467 }
468 }
469
470 const QStringList constCat { categories() };
471 for ( const QString &cat : std::as_const( constCat ) )
472 {
473 if ( cat.contains( searchString, Qt::CaseSensitivity::CaseInsensitive ) )
474 {
475 return true;
476 }
477 }
478
479 return false;
480}
481
482bool QgsLayerMetadata::matches( const QVector<QRegularExpression> &searchReList ) const
483{
484 for ( const QRegularExpression &re : std::as_const( searchReList ) )
485 {
486 if ( re.match( title() ).hasMatch() ||
487 re.match( identifier() ).hasMatch() ||
488 re.match( abstract() ).hasMatch() )
489 {
490 return true;
491 }
492
493 const QList<QStringList> keyVals { keywords().values() };
494 for ( const QStringList &kws : std::as_const( keyVals ) )
495 {
496 for ( const QString &kw : std::as_const( kws ) )
497 {
498 if ( re.match( kw ).hasMatch() )
499 {
500 return true;
501 }
502 }
503 }
504
505 const QStringList constCat { categories() };
506 for ( const QString &cat : std::as_const( constCat ) )
507 {
508 if ( re.match( cat ).hasMatch() )
509 {
510 return true;
511 }
512 }
513
514 }
515
516 return false;
517}
518
520{
521 return extentCrs == other.extentCrs &&
522 bounds == other.bounds;
523}
524
526{
527 return type == other.type && constraint == other.constraint;
528}
QgsAbstractMetadataBase::ContactList mContacts
QMap< QString, QStringList > KeywordMap
Map of vocabulary string to keyword list.
virtual void combine(const QgsAbstractMetadataBase *other)
Combines the metadata from this object with the metadata from an other object.
QStringList categories() const
Returns categories of the resource.
QString abstract() const
Returns a free-form description of the resource.
QString title() const
Returns the human readable name of the resource, typically displayed in search results.
virtual bool writeMetadataXml(QDomElement &metadataElement, QDomDocument &document, const QgsReadWriteContext &context=QgsReadWriteContext()) const
Stores state in a DOM node.
QgsAbstractMetadataBase::KeywordMap mKeywords
Keywords map.
QgsAbstractMetadataBase::KeywordMap keywords() const
Returns the keywords map, which is a set of descriptive keywords associated with the resource.
bool equals(const QgsAbstractMetadataBase &other) const
Tests whether the common metadata fields in this object are equal to other.
virtual void registerTranslations(QgsTranslationContext *translationContext) const
Registers metadata translation strings.
QgsAbstractMetadataBase::LinkList mLinks
QString identifier() const
A reference, URI, URL or some other mechanism to identify the resource.
QgsAbstractMetadataBase()=default
Constructor for QgsAbstractMetadataBase.
virtual bool readMetadataXml(const QDomElement &metadataElement, const QgsReadWriteContext &context=QgsReadWriteContext())
Sets state from DOM document.
A 3-dimensional box composed of x, y, z coordinates.
Definition qgsbox3d.h:42
void setZMinimum(double z)
Sets the minimum z value.
Definition qgsbox3d.cpp:90
void setYMaximum(double y)
Sets the maximum y value.
Definition qgsbox3d.cpp:85
void setZMaximum(double z)
Sets the maximum z value.
Definition qgsbox3d.cpp:95
void setXMaximum(double x)
Sets the maximum x value.
Definition qgsbox3d.cpp:75
void setYMinimum(double y)
Sets the minimum y value.
Definition qgsbox3d.cpp:80
void setXMinimum(double x)
Sets the minimum x value.
Definition qgsbox3d.cpp:70
Represents a coordinate reference system (CRS).
static QgsCoordinateReferenceSystem fromOgcWmsCrs(const QString &ogcCrs)
Creates a CRS from a given OGC WMS-format Coordinate Reference System string.
void addConstraint(const QgsLayerMetadata::Constraint &constraint)
Adds an individual constraint to the existing constraints.
const QgsLayerMetadata::Extent & extent() const
Returns the spatial and temporal extents associated with the resource.
void setConstraints(const QgsLayerMetadata::ConstraintList &constraints)
Sets the list of constraints associated with using the resource.
QgsLayerMetadata()=default
void setFees(const QString &fees)
Sets the fees associated with using the resource.
void setLicenses(const QStringList &licenses)
Sets a list of licenses associated with the resource.
bool operator==(const QgsLayerMetadata &metadataOther) const
QgsLayerMetadata::ConstraintList constraints() const
Returns a list of constraints associated with using the resource.
bool writeMetadataXml(QDomElement &metadataElement, QDomDocument &document, const QgsReadWriteContext &context=QgsReadWriteContext()) const override
Stores state in a DOM node.
void setRights(const QStringList &rights)
Sets a list of rights (attribution or copyright strings) associated with the resource.
QgsCoordinateReferenceSystem crs() const
Returns the coordinate reference system described by the layer's metadata.
void setEncoding(const QString &encoding)
Sets the character encoding of the data in the resource.
QString encoding() const
Returns the character encoding of the data in the resource.
void combine(const QgsAbstractMetadataBase *other) override
Combines the metadata from this object with the metadata from an other object.
QStringList licenses() const
Returns a list of licenses associated with the resource (examples: http://opendefinition....
void registerTranslations(QgsTranslationContext *translationContext) const override
Registers metadata translation strings.
void readFromLayer(const QgsMapLayer *layer)
Reads the metadata state from a layer's custom properties (see QgsMapLayer::customProperty() ).
void saveToLayer(QgsMapLayer *layer) const
Saves the metadata to a layer's custom properties (see QgsMapLayer::setCustomProperty() ).
QStringList rights() const
Returns a list of attribution or copyright strings associated with the resource.
QgsLayerMetadata * clone() const override
Clones the metadata object.
void setExtent(const QgsLayerMetadata::Extent &extent)
Sets the spatial and temporal extents associated with the resource.
bool readMetadataXml(const QDomElement &metadataElement, const QgsReadWriteContext &context=QgsReadWriteContext()) override
Sets state from DOM document.
bool matches(const QVector< QRegularExpression > &searchReList) const
Returns true if the metadata identifier, title, abstract, keywords or categories matches any regular ...
bool contains(const QString &searchString) const
Returns true if the metadata identifier, title, abstract, keywords or categories contain searchString...
QList< QgsLayerMetadata::Constraint > ConstraintList
A list of constraints.
QString fees() const
Returns any fees associated with using the resource.
void setCrs(const QgsCoordinateReferenceSystem &crs)
Sets the coordinate reference system for the layer's metadata.
Base class for all map layer types.
Definition qgsmaplayer.h:80
Q_INVOKABLE QVariant customProperty(const QString &value, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.
Q_INVOKABLE void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for layer.
virtual QString translate(const QString &context, const QString &sourceText, const char *disambiguation=nullptr, int n=-1) const =0
Translates a string using the Qt QTranslator mechanism.
A container for the context for various read/write operations on objects.
const QgsProjectTranslator * projectTranslator() const
Returns the project translator.
Used for the collecting of strings from projects for translation and creation of ts files.
void registerTranslation(const QString &context, const QString &source)
Registers the source to be translated.
QList< QgsAbstractMetadataBase::Link > LinkList
A list of links.
QList< QgsAbstractMetadataBase::Contact > ContactList
A list of contacts.
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
Definition qgis.h:6524
QgsTemporalRange< QDateTime > QgsDateTimeRange
QgsRange which stores a range of date times.
Definition qgsrange.h:761
Metadata constraint structure.
bool operator==(const QgsLayerMetadata::Constraint &other) const
QString constraint
Free-form constraint string.
QString type
Constraint type.
Metadata extent structure.
QList< QgsLayerMetadata::SpatialExtent > spatialExtents() const
Spatial extents of the resource.
void setSpatialExtents(const QList< QgsLayerMetadata::SpatialExtent > &extents)
Sets the spatial extents of the resource.
bool operator==(const QgsLayerMetadata::Extent &other) const
void setTemporalExtents(const QList< QgsDateTimeRange > &extents)
Sets the temporal extents of the resource.
QList< QgsDateTimeRange > temporalExtents() const
Temporal extents of the resource.
Metadata spatial extent structure.
QgsCoordinateReferenceSystem extentCrs
Coordinate reference system for spatial extent.
QgsBox3D bounds
Geospatial extent of the resource.
bool operator==(const QgsLayerMetadata::SpatialExtent &other) const