diff --git a/python/core/auto_generated/mesh/qgsmeshlayer.sip.in b/python/core/auto_generated/mesh/qgsmeshlayer.sip.in
index a5061d9fe542..e78fea6251c4 100644
--- a/python/core/auto_generated/mesh/qgsmeshlayer.sip.in
+++ b/python/core/auto_generated/mesh/qgsmeshlayer.sip.in
@@ -146,6 +146,8 @@ QgsMeshLayer cannot be copied.
virtual QStringList subLayers() const;
+ virtual QString htmlMetadata() const;
+
QString providerType() const;
%Docstring
diff --git a/src/core/mesh/qgsmeshlayer.cpp b/src/core/mesh/qgsmeshlayer.cpp
index 962b3a79bdad..71dc016d0ba9 100644
--- a/src/core/mesh/qgsmeshlayer.cpp
+++ b/src/core/mesh/qgsmeshlayer.cpp
@@ -36,6 +36,7 @@
#include "qgsstyle.h"
#include "qgstriangularmesh.h"
#include "qgsmesh3daveraging.h"
+#include "qgslayermetadataformatter.h"
QgsMeshLayer::QgsMeshLayer( const QString &meshLayerPath,
const QString &baseName,
@@ -1251,6 +1252,115 @@ QStringList QgsMeshLayer::subLayers() const
return QStringList();
}
+QString QgsMeshLayer::htmlMetadata() const
+{
+ QgsLayerMetadataFormatter htmlFormatter( metadata() );
+ QString myMetadata = QStringLiteral( "\n
\n" );
+
+ // Begin Provider section
+ myMetadata += QStringLiteral( "\n" );
+
+ // name
+ myMetadata += QStringLiteral( "" ) + tr( "Name" ) + QStringLiteral( " | " ) + name() + QStringLiteral( " |
\n" );
+
+ // local path
+ QVariantMap uriComponents = QgsProviderRegistry::instance()->decodeUri( mProviderKey, publicSource() );
+ QString path;
+ if ( uriComponents.contains( QStringLiteral( "path" ) ) )
+ {
+ path = uriComponents[QStringLiteral( "path" )].toString();
+ if ( QFile::exists( path ) )
+ myMetadata += QStringLiteral( "" ) + tr( "Path" ) + QStringLiteral( " | %1" ).arg( QStringLiteral( "%2" ).arg( QUrl::fromLocalFile( path ).toString(), QDir::toNativeSeparators( path ) ) ) + QStringLiteral( " |
\n" );
+ }
+ if ( uriComponents.contains( QStringLiteral( "url" ) ) )
+ {
+ const QString url = uriComponents[QStringLiteral( "url" )].toString();
+ myMetadata += QStringLiteral( "" ) + tr( "URL" ) + QStringLiteral( " | %1" ).arg( QStringLiteral( "%2" ).arg( QUrl( url ).toString(), url ) ) + QStringLiteral( " |
\n" );
+ }
+
+ // data source
+ if ( publicSource() != path )
+ myMetadata += QStringLiteral( "" ) + tr( "Source" ) + QStringLiteral( " | %1" ).arg( publicSource() ) + QStringLiteral( " |
\n" );
+
+ // EPSG
+ myMetadata += QStringLiteral( "" ) + tr( "CRS" ) + QStringLiteral( " | " );
+ if ( crs().isValid() )
+ {
+ myMetadata += crs().userFriendlyIdentifier( QgsCoordinateReferenceSystem::FullString ) + QStringLiteral( " - " );
+ if ( crs().isGeographic() )
+ myMetadata += tr( "Geographic" );
+ else
+ myMetadata += tr( "Projected" );
+ }
+ myMetadata += QLatin1String( " |
\n" );
+
+ // Extent
+ myMetadata += QStringLiteral( "" ) + tr( "Extent" ) + QStringLiteral( " | " ) + extent().toString() + QStringLiteral( " |
\n" );
+
+ // unit
+ myMetadata += QStringLiteral( "" ) + tr( "Unit" ) + QStringLiteral( " | " ) + QgsUnitTypes::toString( crs().mapUnits() ) + QStringLiteral( " |
\n" );
+
+ // feature count
+ QLocale locale = QLocale();
+ locale.setNumberOptions( locale.numberOptions() &= ~QLocale::NumberOption::OmitGroupSeparator );
+
+ if ( dataProvider() )
+ {
+ myMetadata += QStringLiteral( "" )
+ + tr( "Vertex count" ) + QStringLiteral( " | " )
+ + ( locale.toString( static_cast( dataProvider()->vertexCount() ) ) )
+ + QStringLiteral( " |
\n" );
+ myMetadata += QStringLiteral( "" )
+ + tr( "Face count" ) + QStringLiteral( " | " )
+ + ( locale.toString( static_cast( dataProvider()->faceCount() ) ) )
+ + QStringLiteral( " |
\n" );
+ myMetadata += QStringLiteral( "" )
+ + tr( "Edge count" ) + QStringLiteral( " | " )
+ + ( locale.toString( static_cast( dataProvider()->edgeCount() ) ) )
+ + QStringLiteral( " |
\n" );
+ myMetadata += QStringLiteral( "" )
+ + tr( "Dataset groups count" ) + QStringLiteral( " | " )
+ + ( locale.toString( static_cast( dataProvider()->datasetGroupCount() ) ) )
+ + QStringLiteral( " |
\n" );
+ }
+
+ // End Provider section
+ myMetadata += QLatin1String( "
\n