32 return QStringLiteral(
"1.0.0" );
37 QDomElement layerElem;
39 layerElem = doc.createElement( QStringLiteral(
"CoverageOfferingBrief" ) );
41 layerElem = doc.createElement( QStringLiteral(
"CoverageOffering" ) );
44 QDomElement nameElem = doc.createElement( QStringLiteral(
"name" ) );
45 QString name = layer->
name();
48 name = name.replace(
' ',
'_' );
49 const QDomText nameText = doc.createTextNode( name );
50 nameElem.appendChild( nameText );
51 layerElem.appendChild( nameElem );
54 QDomElement labelElem = doc.createElement( QStringLiteral(
"label" ) );
55 QString title = layer->
title();
56 if ( title.isEmpty() )
58 title = layer->
name();
60 const QDomText labelText = doc.createTextNode( title );
61 labelElem.appendChild( labelText );
62 layerElem.appendChild( labelElem );
65 const QString
abstract = layer->
abstract();
66 if ( !
abstract.isEmpty() )
68 QDomElement descriptionElem = doc.createElement( QStringLiteral(
"description" ) );
69 const QDomText descriptionText = doc.createTextNode(
abstract );
70 descriptionElem.appendChild( descriptionText );
71 layerElem.appendChild( descriptionElem );
77 const int wgs84precision = 6;
83 BBox = t.transformBoundingBox( layer->
extent() );
87 QgsDebugMsg( QStringLiteral(
"Transform error caught: %1. Using original layer extent." ).arg( e.
what() ) );
90 QDomElement lonLatElem = doc.createElement( QStringLiteral(
"lonLatEnvelope" ) );
91 lonLatElem.setAttribute( QStringLiteral(
"srsName" ), QStringLiteral(
"urn:ogc:def:crs:OGC:1.3:CRS84" ) );
92 QDomElement lowerPosElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
94 lowerPosElem.appendChild( lowerPosText );
95 lonLatElem.appendChild( lowerPosElem );
96 QDomElement upperPosElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
98 upperPosElem.appendChild( upperPosText );
99 lonLatElem.appendChild( upperPosElem );
100 layerElem.appendChild( lonLatElem );
108 QDomElement domainSetElem = doc.createElement( QStringLiteral(
"domainSet" ) );
109 layerElem.appendChild( domainSetElem );
111 QDomElement spatialDomainElem = doc.createElement( QStringLiteral(
"spatialDomain" ) );
112 domainSetElem.appendChild( spatialDomainElem );
122 QDomElement envelopeElem = doc.createElement( QStringLiteral(
"gml:Envelope" ) );
123 envelopeElem.setAttribute( QStringLiteral(
"srsName" ), layerCrs.
authid() );
124 QDomElement lowerCornerElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
126 lowerCornerElem.appendChild( lowerCornerText );
127 envelopeElem.appendChild( lowerCornerElem );
128 QDomElement upperCornerElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
130 upperCornerElem.appendChild( upperCornerText );
131 envelopeElem.appendChild( upperCornerElem );
132 spatialDomainElem.appendChild( envelopeElem );
134 QDomElement rectGridElem = doc.createElement( QStringLiteral(
"gml:RectifiedGrid" ) );
135 rectGridElem.setAttribute( QStringLiteral(
"dimension" ), 2 );
136 QDomElement limitsElem = doc.createElement( QStringLiteral(
"gml:limits" ) );
137 rectGridElem.appendChild( limitsElem );
138 QDomElement gridEnvElem = doc.createElement( QStringLiteral(
"gml:GridEnvelope" ) );
139 limitsElem.appendChild( gridEnvElem );
140 QDomElement lowElem = doc.createElement( QStringLiteral(
"gml:low" ) );
141 const QDomText lowText = doc.createTextNode( QStringLiteral(
"0 0" ) );
142 lowElem.appendChild( lowText );
143 gridEnvElem.appendChild( lowElem );
144 QDomElement highElem = doc.createElement( QStringLiteral(
"gml:high" ) );
145 const QDomText highText = doc.createTextNode( QString::number( layer->
width() ) +
" " + QString::number( layer->
height() ) );
146 highElem.appendChild( highText );
147 gridEnvElem.appendChild( highElem );
148 spatialDomainElem.appendChild( rectGridElem );
150 QDomElement xAxisElem = doc.createElement( QStringLiteral(
"gml:axisName" ) );
151 const QDomText xAxisText = doc.createTextNode( QStringLiteral(
"x" ) );
152 xAxisElem.appendChild( xAxisText );
153 rectGridElem.appendChild( xAxisElem );
155 QDomElement yAxisElem = doc.createElement( QStringLiteral(
"gml:axisName" ) );
156 const QDomText yAxisText = doc.createTextNode( QStringLiteral(
"y" ) );
157 yAxisElem.appendChild( yAxisText );
158 rectGridElem.appendChild( yAxisElem );
160 QDomElement originElem = doc.createElement( QStringLiteral(
"gml:origin" ) );
161 QDomElement originPosElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
162 originElem.appendChild( originPosElem );
164 originPosElem.appendChild( originPosText );
165 rectGridElem.appendChild( originElem );
167 QDomElement xOffsetElem = doc.createElement( QStringLiteral(
"gml:offsetVector" ) );
168 const QDomText xOffsetText = doc.createTextNode( QString::number( layer->
rasterUnitsPerPixelX() ) +
" 0" );
169 xOffsetElem.appendChild( xOffsetText );
170 rectGridElem.appendChild( xOffsetElem );
172 QDomElement yOffsetElem = doc.createElement( QStringLiteral(
"gml:offsetVector" ) );
173 const QDomText yOffsetText = doc.createTextNode(
"0 " + QString::number( layer->
rasterUnitsPerPixelY() ) );
174 yOffsetElem.appendChild( yOffsetText );
175 rectGridElem.appendChild( yOffsetElem );
178 QDomElement rangeSetElem = doc.createElement( QStringLiteral(
"rangeSet" ) );
179 layerElem.appendChild( rangeSetElem );
188 QDomElement RangeSetElem = doc.createElement( QStringLiteral(
"RangeSet" ) );
189 rangeSetElem.appendChild( RangeSetElem );
191 QDomElement rsNameElem = doc.createElement( QStringLiteral(
"name" ) );
192 const QDomText rsNameText = doc.createTextNode( QStringLiteral(
"Bands" ) );
193 rsNameElem.appendChild( rsNameText );
194 RangeSetElem.appendChild( rsNameElem );
196 QDomElement rsLabelElem = doc.createElement( QStringLiteral(
"label" ) );
197 const QDomText rsLabelText = doc.createTextNode( QStringLiteral(
"Bands" ) );
198 rsLabelElem.appendChild( rsLabelText );
199 RangeSetElem.appendChild( rsLabelElem );
201 QDomElement axisDescElem = doc.createElement( QStringLiteral(
"axisDescription" ) );
202 RangeSetElem.appendChild( axisDescElem );
204 QDomElement AxisDescElem = doc.createElement( QStringLiteral(
"AxisDescription" ) );
205 axisDescElem.appendChild( AxisDescElem );
207 QDomElement adNameElem = doc.createElement( QStringLiteral(
"name" ) );
208 const QDomText adNameText = doc.createTextNode( QStringLiteral(
"bands" ) );
209 adNameElem.appendChild( adNameText );
210 AxisDescElem.appendChild( adNameElem );
212 QDomElement adLabelElem = doc.createElement( QStringLiteral(
"label" ) );
213 const QDomText adLablelText = doc.createTextNode( QStringLiteral(
"bands" ) );
214 adLabelElem.appendChild( adLablelText );
215 AxisDescElem.appendChild( adLabelElem );
217 QDomElement adValuesElem = doc.createElement( QStringLiteral(
"values" ) );
218 for (
int idx = 0; idx < layer->
bandCount(); ++idx )
220 QDomElement adValueElem = doc.createElement( QStringLiteral(
"singleValue" ) );
221 const QDomText adValueText = doc.createTextNode( QString::number( idx + 1 ) );
222 adValueElem.appendChild( adValueText );
223 adValuesElem.appendChild( adValueElem );
225 AxisDescElem.appendChild( adValuesElem );
229 QDomElement sCRSElem = doc.createElement( QStringLiteral(
"supportedCRSs" ) );
230 QDomElement rCRSElem = doc.createElement( QStringLiteral(
"requestResponseCRSs" ) );
231 const QDomText rCRSText = doc.createTextNode( layerCrs.
authid() );
232 rCRSElem.appendChild( rCRSText );
233 sCRSElem.appendChild( rCRSElem );
234 QDomElement nCRSElem = doc.createElement( QStringLiteral(
"nativeCRSs" ) );
235 const QDomText nCRSText = doc.createTextNode( layerCrs.
authid() );
236 nCRSElem.appendChild( nCRSText );
237 sCRSElem.appendChild( nCRSElem );
238 layerElem.appendChild( sCRSElem );
242 QDomElement sFormatsElem = doc.createElement( QStringLiteral(
"supportedFormats" ) );
243 sFormatsElem.setAttribute( QStringLiteral(
"nativeFormat" ), QStringLiteral(
"raw binary" ) );
244 QDomElement formatsElem = doc.createElement( QStringLiteral(
"formats" ) );
245 const QDomText formatsText = doc.createTextNode( QStringLiteral(
"GeoTIFF" ) );
246 formatsElem.appendChild( formatsText );
247 sFormatsElem.appendChild( formatsElem );
248 layerElem.appendChild( sFormatsElem );
256 static const QSet< QString > sFilter
258 QStringLiteral(
"REQUEST" ),
259 QStringLiteral(
"VERSION" ),
260 QStringLiteral(
"SERVICE" ),
261 QStringLiteral(
"_DC" )
267 if ( href.isEmpty() )
272 const QList<QPair<QString, QString> > queryItems = q.queryItems();
273 for (
const QPair<QString, QString> ¶m : queryItems )
275 if ( sFilter.contains( param.first.toUpper() ) )
276 q.removeAllQueryItems( param.first );
280 href = url.toString();
289 QStringList lst = bboxStr.split(
',' );
290 if ( lst.count() != 4 )
295 for (
int i = 0; i < 4; i++ )
297 lst[i].replace(
' ',
'+' );
298 d[i] = lst[i].toDouble( &ok );