@@ -73,25 +73,43 @@ QgsAfsProvider::QgsAfsProvider( const QString &uri )
73
73
if ( !xminOk || !yminOk || !xmaxOk || !ymaxOk )
74
74
mSharedData ->mExtent = QgsRectangle ();
75
75
}
76
+
77
+ QVariantMap layerExtentMap = layerData[QStringLiteral ( " extent" )].toMap ();
78
+ bool xminOk = false , yminOk = false , xmaxOk = false , ymaxOk = false ;
79
+ QgsRectangle originalExtent;
80
+ originalExtent.setXMinimum ( layerExtentMap[QStringLiteral ( " xmin" )].toDouble ( &xminOk ) );
81
+ originalExtent.setYMinimum ( layerExtentMap[QStringLiteral ( " ymin" )].toDouble ( &yminOk ) );
82
+ originalExtent.setXMaximum ( layerExtentMap[QStringLiteral ( " xmax" )].toDouble ( &xmaxOk ) );
83
+ originalExtent.setYMaximum ( layerExtentMap[QStringLiteral ( " ymax" )].toDouble ( &ymaxOk ) );
84
+ if ( mSharedData ->mExtent .isEmpty () && ( !xminOk || !yminOk || !xmaxOk || !ymaxOk ) )
85
+ {
86
+ appendError ( QgsErrorMessage ( tr ( " Could not retrieve layer extent" ), QStringLiteral ( " AFSProvider" ) ) );
87
+ return ;
88
+ }
89
+ QgsCoordinateReferenceSystem extentCrs = QgsArcGisRestUtils::parseSpatialReference ( layerExtentMap[QStringLiteral ( " spatialReference" )].toMap () );
90
+ if ( mSharedData ->mExtent .isEmpty () && !extentCrs.isValid () )
91
+ {
92
+ appendError ( QgsErrorMessage ( tr ( " Could not parse spatial reference" ), QStringLiteral ( " AFSProvider" ) ) );
93
+ return ;
94
+ }
95
+
96
+ if ( xminOk && yminOk && xmaxOk && ymaxOk )
97
+ {
98
+ QgsLayerMetadata::SpatialExtent spatialExtent;
99
+ spatialExtent.bounds = QgsBox3d ( originalExtent );
100
+ spatialExtent.extentCrs = extentCrs;
101
+ QgsLayerMetadata::Extent metadataExtent;
102
+ metadataExtent.setSpatialExtents ( QList< QgsLayerMetadata::SpatialExtent >() << spatialExtent );
103
+ mLayerMetadata .setExtent ( metadataExtent );
104
+ }
105
+ if ( extentCrs.isValid () )
106
+ {
107
+ mLayerMetadata .setCrs ( extentCrs );
108
+ }
109
+
76
110
if ( mSharedData ->mExtent .isEmpty () )
77
111
{
78
- QVariantMap layerExtentMap = layerData[QStringLiteral ( " extent" )].toMap ();
79
- bool xminOk = false , yminOk = false , xmaxOk = false , ymaxOk = false ;
80
- mSharedData ->mExtent .setXMinimum ( layerExtentMap[QStringLiteral ( " xmin" )].toDouble ( &xminOk ) );
81
- mSharedData ->mExtent .setYMinimum ( layerExtentMap[QStringLiteral ( " ymin" )].toDouble ( &yminOk ) );
82
- mSharedData ->mExtent .setXMaximum ( layerExtentMap[QStringLiteral ( " xmax" )].toDouble ( &xmaxOk ) );
83
- mSharedData ->mExtent .setYMaximum ( layerExtentMap[QStringLiteral ( " ymax" )].toDouble ( &ymaxOk ) );
84
- if ( !xminOk || !yminOk || !xmaxOk || !ymaxOk )
85
- {
86
- appendError ( QgsErrorMessage ( tr ( " Could not retrieve layer extent" ), QStringLiteral ( " AFSProvider" ) ) );
87
- return ;
88
- }
89
- QgsCoordinateReferenceSystem extentCrs = QgsArcGisRestUtils::parseSpatialReference ( layerExtentMap[QStringLiteral ( " spatialReference" )].toMap () );
90
- if ( !extentCrs.isValid () )
91
- {
92
- appendError ( QgsErrorMessage ( tr ( " Could not parse spatial reference" ), QStringLiteral ( " AFSProvider" ) ) );
93
- return ;
94
- }
112
+ mSharedData ->mExtent = originalExtent;
95
113
Q_NOWARN_DEPRECATED_PUSH
96
114
mSharedData ->mExtent = QgsCoordinateTransform ( extentCrs, mSharedData ->mSourceCRS ).transformBoundingBox ( mSharedData ->mExtent );
97
115
Q_NOWARN_DEPRECATED_POP
@@ -172,6 +190,17 @@ QgsAfsProvider::QgsAfsProvider( const QString &uri )
172
190
mSharedData ->mObjectIds .append ( objectId.toInt () );
173
191
}
174
192
193
+ // layer metadata
194
+
195
+ mLayerMetadata .setIdentifier ( mSharedData ->mDataSource .param ( QStringLiteral ( " url" ) ) );
196
+ mLayerMetadata .setType ( QStringLiteral ( " dataset" ) );
197
+ mLayerMetadata .setAbstract ( mLayerDescription );
198
+ mLayerMetadata .setTitle ( mLayerName );
199
+ QString copyright = layerData[QStringLiteral ( " copyrightText" )].toString ();
200
+ if ( !copyright.isEmpty () )
201
+ mLayerMetadata .setRights ( QStringList () << copyright );
202
+ mLayerMetadata .addLink ( QgsLayerMetadata::Link ( tr ( " Source" ), QStringLiteral ( " WWW:LINK" ), mSharedData ->mDataSource .param ( QStringLiteral ( " url" ) ) ) );
203
+
175
204
mValid = true ;
176
205
}
177
206
@@ -200,9 +229,14 @@ QgsFields QgsAfsProvider::fields() const
200
229
return mSharedData ->mFields ;
201
230
}
202
231
232
+ QgsLayerMetadata QgsAfsProvider::layerMetadata () const
233
+ {
234
+ return mLayerMetadata ;
235
+ }
236
+
203
237
QgsVectorDataProvider::Capabilities QgsAfsProvider::capabilities () const
204
238
{
205
- return QgsVectorDataProvider::SelectAtId;
239
+ return QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::ReadLayerMetadata ;
206
240
}
207
241
208
242
void QgsAfsProvider::setDataSourceUri ( const QString &uri )
0 commit comments