38 QDomElement layerElem;
40 layerElem = doc.createElement( QStringLiteral(
"CoverageOfferingBrief" ) );
42 layerElem = doc.createElement( QStringLiteral(
"CoverageOffering" ) );
45 QDomElement nameElem = doc.createElement( QStringLiteral(
"name" ) );
46 QString name = layer->
name();
49 name = name.replace(
' ',
'_' );
50 const QDomText nameText = doc.createTextNode( name );
51 nameElem.appendChild( nameText );
52 layerElem.appendChild( nameElem );
55 QDomElement labelElem = doc.createElement( QStringLiteral(
"label" ) );
57 if ( title.isEmpty() )
59 title = layer->
name();
61 const QDomText labelText = doc.createTextNode( title );
62 labelElem.appendChild( labelText );
63 layerElem.appendChild( labelElem );
67 if ( !abstract.isEmpty() )
69 QDomElement descriptionElem = doc.createElement( QStringLiteral(
"description" ) );
70 const QDomText descriptionText = doc.createTextNode( abstract );
71 descriptionElem.appendChild( descriptionText );
72 layerElem.appendChild( descriptionElem );
78 const int wgs84precision = 6;
88 QgsDebugError( QStringLiteral(
"Transform error caught: %1. Using original layer extent." ).arg( e.
what() ) );
91 QDomElement lonLatElem = doc.createElement( QStringLiteral(
"lonLatEnvelope" ) );
92 lonLatElem.setAttribute( QStringLiteral(
"srsName" ), QStringLiteral(
"urn:ogc:def:crs:OGC:1.3:CRS84" ) );
93 QDomElement lowerPosElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
95 lowerPosElem.appendChild( lowerPosText );
96 lonLatElem.appendChild( lowerPosElem );
97 QDomElement upperPosElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
99 upperPosElem.appendChild( upperPosText );
100 lonLatElem.appendChild( upperPosElem );
101 layerElem.appendChild( lonLatElem );
109 QDomElement domainSetElem = doc.createElement( QStringLiteral(
"domainSet" ) );
110 layerElem.appendChild( domainSetElem );
112 QDomElement spatialDomainElem = doc.createElement( QStringLiteral(
"spatialDomain" ) );
113 domainSetElem.appendChild( spatialDomainElem );
123 QDomElement envelopeElem = doc.createElement( QStringLiteral(
"gml:Envelope" ) );
124 envelopeElem.setAttribute( QStringLiteral(
"srsName" ), layerCrs.
authid() );
125 QDomElement lowerCornerElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
127 lowerCornerElem.appendChild( lowerCornerText );
128 envelopeElem.appendChild( lowerCornerElem );
129 QDomElement upperCornerElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
131 upperCornerElem.appendChild( upperCornerText );
132 envelopeElem.appendChild( upperCornerElem );
133 spatialDomainElem.appendChild( envelopeElem );
135 QDomElement rectGridElem = doc.createElement( QStringLiteral(
"gml:RectifiedGrid" ) );
136 rectGridElem.setAttribute( QStringLiteral(
"dimension" ), 2 );
137 QDomElement limitsElem = doc.createElement( QStringLiteral(
"gml:limits" ) );
138 rectGridElem.appendChild( limitsElem );
139 QDomElement gridEnvElem = doc.createElement( QStringLiteral(
"gml:GridEnvelope" ) );
140 limitsElem.appendChild( gridEnvElem );
141 QDomElement lowElem = doc.createElement( QStringLiteral(
"gml:low" ) );
142 const QDomText lowText = doc.createTextNode( QStringLiteral(
"0 0" ) );
143 lowElem.appendChild( lowText );
144 gridEnvElem.appendChild( lowElem );
145 QDomElement highElem = doc.createElement( QStringLiteral(
"gml:high" ) );
146 const QDomText highText = doc.createTextNode( QString::number( layer->
width() ) +
" " + QString::number( layer->
height() ) );
147 highElem.appendChild( highText );
148 gridEnvElem.appendChild( highElem );
149 spatialDomainElem.appendChild( rectGridElem );
151 QDomElement xAxisElem = doc.createElement( QStringLiteral(
"gml:axisName" ) );
152 const QDomText xAxisText = doc.createTextNode( QStringLiteral(
"x" ) );
153 xAxisElem.appendChild( xAxisText );
154 rectGridElem.appendChild( xAxisElem );
156 QDomElement yAxisElem = doc.createElement( QStringLiteral(
"gml:axisName" ) );
157 const QDomText yAxisText = doc.createTextNode( QStringLiteral(
"y" ) );
158 yAxisElem.appendChild( yAxisText );
159 rectGridElem.appendChild( yAxisElem );
161 QDomElement originElem = doc.createElement( QStringLiteral(
"gml:origin" ) );
162 QDomElement originPosElem = doc.createElement( QStringLiteral(
"gml:pos" ) );
163 originElem.appendChild( originPosElem );
165 originPosElem.appendChild( originPosText );
166 rectGridElem.appendChild( originElem );
168 QDomElement xOffsetElem = doc.createElement( QStringLiteral(
"gml:offsetVector" ) );
169 const QDomText xOffsetText = doc.createTextNode( QString::number( layer->
rasterUnitsPerPixelX() ) +
" 0" );
170 xOffsetElem.appendChild( xOffsetText );
171 rectGridElem.appendChild( xOffsetElem );
173 QDomElement yOffsetElem = doc.createElement( QStringLiteral(
"gml:offsetVector" ) );
174 const QDomText yOffsetText = doc.createTextNode(
"0 " + QString::number( layer->
rasterUnitsPerPixelY() ) );
175 yOffsetElem.appendChild( yOffsetText );
176 rectGridElem.appendChild( yOffsetElem );
179 QDomElement rangeSetElem = doc.createElement( QStringLiteral(
"rangeSet" ) );
180 layerElem.appendChild( rangeSetElem );
189 QDomElement RangeSetElem = doc.createElement( QStringLiteral(
"RangeSet" ) );
190 rangeSetElem.appendChild( RangeSetElem );
192 QDomElement rsNameElem = doc.createElement( QStringLiteral(
"name" ) );
193 const QDomText rsNameText = doc.createTextNode( QStringLiteral(
"Bands" ) );
194 rsNameElem.appendChild( rsNameText );
195 RangeSetElem.appendChild( rsNameElem );
197 QDomElement rsLabelElem = doc.createElement( QStringLiteral(
"label" ) );
198 const QDomText rsLabelText = doc.createTextNode( QStringLiteral(
"Bands" ) );
199 rsLabelElem.appendChild( rsLabelText );
200 RangeSetElem.appendChild( rsLabelElem );
202 QDomElement axisDescElem = doc.createElement( QStringLiteral(
"axisDescription" ) );
203 RangeSetElem.appendChild( axisDescElem );
205 QDomElement AxisDescElem = doc.createElement( QStringLiteral(
"AxisDescription" ) );
206 axisDescElem.appendChild( AxisDescElem );
208 QDomElement adNameElem = doc.createElement( QStringLiteral(
"name" ) );
209 const QDomText adNameText = doc.createTextNode( QStringLiteral(
"bands" ) );
210 adNameElem.appendChild( adNameText );
211 AxisDescElem.appendChild( adNameElem );
213 QDomElement adLabelElem = doc.createElement( QStringLiteral(
"label" ) );
214 const QDomText adLablelText = doc.createTextNode( QStringLiteral(
"bands" ) );
215 adLabelElem.appendChild( adLablelText );
216 AxisDescElem.appendChild( adLabelElem );
218 QDomElement adValuesElem = doc.createElement( QStringLiteral(
"values" ) );
219 for (
int idx = 0; idx < layer->
bandCount(); ++idx )
221 QDomElement adValueElem = doc.createElement( QStringLiteral(
"singleValue" ) );
222 const QDomText adValueText = doc.createTextNode( QString::number( idx + 1 ) );
223 adValueElem.appendChild( adValueText );
224 adValuesElem.appendChild( adValueElem );
226 AxisDescElem.appendChild( adValuesElem );
230 QDomElement sCRSElem = doc.createElement( QStringLiteral(
"supportedCRSs" ) );
231 QDomElement rCRSElem = doc.createElement( QStringLiteral(
"requestResponseCRSs" ) );
232 const QDomText rCRSText = doc.createTextNode( layerCrs.
authid() );
233 rCRSElem.appendChild( rCRSText );
234 sCRSElem.appendChild( rCRSElem );
235 QDomElement nCRSElem = doc.createElement( QStringLiteral(
"nativeCRSs" ) );
236 const QDomText nCRSText = doc.createTextNode( layerCrs.
authid() );
237 nCRSElem.appendChild( nCRSText );
238 sCRSElem.appendChild( nCRSElem );
239 layerElem.appendChild( sCRSElem );
243 QDomElement sFormatsElem = doc.createElement( QStringLiteral(
"supportedFormats" ) );
244 sFormatsElem.setAttribute( QStringLiteral(
"nativeFormat" ), QStringLiteral(
"raw binary" ) );
245 QDomElement formatsElem = doc.createElement( QStringLiteral(
"formats" ) );
246 const QDomText formatsText = doc.createTextNode( QStringLiteral(
"GeoTIFF" ) );
247 formatsElem.appendChild( formatsText );
248 sFormatsElem.appendChild( formatsElem );
249 layerElem.appendChild( sFormatsElem );