Skip to content

Commit 15c32c2

Browse files
authored
Merge pull request #5566 from pblottiere/bugfix-ogc-getcapa-abstract
[server][bugfix] Fix OGC test recommendations
2 parents dfc0305 + 9283b26 commit 15c32c2

File tree

4 files changed

+67
-38
lines changed

4 files changed

+67
-38
lines changed

src/server/services/wms/qgswmsgetcapabilities.cpp

Lines changed: 49 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ namespace QgsWms
8484
const QgsLayerTreeGroup *layerTreeGroup,
8585
bool projectSettings );
8686

87+
void addKeywordListElement( const QgsProject *project, QDomDocument &doc, QDomElement &parent );
8788
}
8889

8990
void writeGetCapabilities( QgsServerInterface *serverIface, const QgsProject *project,
@@ -225,8 +226,6 @@ namespace QgsWms
225226
QDomElement getServiceElement( QDomDocument &doc, const QgsProject *project, const QString &version,
226227
const QgsServerRequest &request )
227228
{
228-
bool sia2045 = QgsServerProjectUtils::wmsInfoFormatSia2045( *project );
229-
230229
//Service element
231230
QDomElement serviceElem = doc.createElement( QStringLiteral( "Service" ) );
232231

@@ -254,34 +253,7 @@ namespace QgsWms
254253
serviceElem.appendChild( abstractElem );
255254
}
256255

257-
QDomElement keywordsElem = doc.createElement( QStringLiteral( "KeywordList" ) );
258-
//add default keyword
259-
QDomElement keywordElem = doc.createElement( QStringLiteral( "Keyword" ) );
260-
keywordElem.setAttribute( QStringLiteral( "vocabulary" ), QStringLiteral( "ISO" ) );
261-
QDomText keywordText = doc.createTextNode( QStringLiteral( "infoMapAccessService" ) );
262-
keywordElem.appendChild( keywordText );
263-
keywordsElem.appendChild( keywordElem );
264-
serviceElem.appendChild( keywordsElem );
265-
QStringList keywords = QgsServerProjectUtils::owsServiceKeywords( *project );
266-
if ( !keywords.isEmpty() )
267-
{
268-
for ( int i = 0; i < keywords.size(); ++i )
269-
{
270-
QString keyword = keywords.at( i );
271-
if ( !keyword.isEmpty() )
272-
{
273-
keywordElem = doc.createElement( QStringLiteral( "Keyword" ) );
274-
keywordText = doc.createTextNode( keyword );
275-
keywordElem.appendChild( keywordText );
276-
if ( sia2045 )
277-
{
278-
keywordElem.setAttribute( QStringLiteral( "vocabulary" ), QStringLiteral( "SIA_Geo405" ) );
279-
}
280-
keywordsElem.appendChild( keywordElem );
281-
}
282-
}
283-
serviceElem.appendChild( keywordsElem );
284-
}
256+
addKeywordListElement( project, doc, serviceElem );
285257

286258
QString onlineResource = QgsServerProjectUtils::owsServiceOnlineResource( *project );
287259
if ( onlineResource.isEmpty() )
@@ -770,6 +742,18 @@ namespace QgsWms
770742

771743
QDomElement layerParentElem = doc.createElement( QStringLiteral( "Layer" ) );
772744

745+
// Root Layer title
746+
QDomElement layerParentTitleElem = doc.createElement( QStringLiteral( "Title" ) );
747+
QDomText layerParentTitleText = doc.createTextNode( project->title() );
748+
layerParentTitleElem.appendChild( layerParentTitleText );
749+
layerParentElem.appendChild( layerParentTitleElem );
750+
751+
// Root Layer abstract
752+
QDomElement layerParentAbstElem = doc.createElement( QStringLiteral( "Abstract" ) );
753+
QDomText layerParentAbstText = doc.createTextNode( project->title() );
754+
layerParentAbstElem.appendChild( layerParentAbstText );
755+
layerParentElem.appendChild( layerParentAbstElem );
756+
773757
// Root Layer name
774758
QDomElement layerParentNameElem = doc.createElement( QStringLiteral( "Name" ) );
775759
QString rootName = QgsServerProjectUtils::wmsRootName( *project );
@@ -785,11 +769,12 @@ namespace QgsWms
785769
}
786770
layerParentElem.appendChild( layerParentNameElem );
787771

788-
// Root Layer title
789-
QDomElement layerParentTitleElem = doc.createElement( QStringLiteral( "Title" ) );
790-
QDomText layerParentTitleText = doc.createTextNode( project->title() );
791-
layerParentTitleElem.appendChild( layerParentTitleText );
792-
layerParentElem.appendChild( layerParentTitleElem );
772+
// Keyword list
773+
addKeywordListElement( project, doc, layerParentElem );
774+
775+
// Metadata (empty but needed for OGC tests RECOMMENDATIONS)
776+
QDomElement metaUrlElem = doc.createElement( QStringLiteral( "MetadataURL" ) );
777+
layerParentElem.appendChild( metaUrlElem );
793778

794779
// Root Layer tree name
795780
if ( projectSettings )
@@ -1734,6 +1719,35 @@ namespace QgsWms
17341719
}
17351720
}
17361721

1722+
void addKeywordListElement( const QgsProject *project, QDomDocument &doc, QDomElement &parent )
1723+
{
1724+
bool sia2045 = QgsServerProjectUtils::wmsInfoFormatSia2045( *project );
1725+
1726+
QDomElement keywordsElem = doc.createElement( QStringLiteral( "KeywordList" ) );
1727+
//add default keyword
1728+
QDomElement keywordElem = doc.createElement( QStringLiteral( "Keyword" ) );
1729+
keywordElem.setAttribute( QStringLiteral( "vocabulary" ), QStringLiteral( "ISO" ) );
1730+
QDomText keywordText = doc.createTextNode( QStringLiteral( "infoMapAccessService" ) );
1731+
keywordElem.appendChild( keywordText );
1732+
keywordsElem.appendChild( keywordElem );
1733+
parent.appendChild( keywordsElem );
1734+
QStringList keywords = QgsServerProjectUtils::owsServiceKeywords( *project );
1735+
for ( const QString &keyword : qgis::as_const( keywords ) )
1736+
{
1737+
if ( !keyword.isEmpty() )
1738+
{
1739+
keywordElem = doc.createElement( QStringLiteral( "Keyword" ) );
1740+
keywordText = doc.createTextNode( keyword );
1741+
keywordElem.appendChild( keywordText );
1742+
if ( sia2045 )
1743+
{
1744+
keywordElem.setAttribute( QStringLiteral( "vocabulary" ), QStringLiteral( "SIA_Geo405" ) );
1745+
}
1746+
keywordsElem.appendChild( keywordElem );
1747+
}
1748+
}
1749+
parent.appendChild( keywordsElem );
1750+
}
17371751
}
17381752

17391753

tests/testdata/qgis_server/getcapabilities.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ Content-Type: text/xml; charset=utf-8
9898
<Format>XML</Format>
9999
</Exception>
100100
<Layer>
101-
<Name>QGIS Test Project</Name>
102101
<Title>QGIS Test Project</Title>
102+
<Abstract>QGIS Test Project</Abstract>
103103
<CRS>CRS:84</CRS>
104104
<CRS>EPSG:4326</CRS>
105105
<CRS>EPSG:3857</CRS>
@@ -111,6 +111,11 @@ Content-Type: text/xml; charset=utf-8
111111
</EX_GeographicBoundingBox>
112112
<BoundingBox maxy="5.60604e+06" maxx="913283" miny="5.60599e+06" CRS="EPSG:3857" minx="913171"/>
113113
<BoundingBox maxy="8.20416" maxx="44.9016" miny="8.20315" CRS="EPSG:4326" minx="44.9012"/>
114+
<Name>QGIS Test Project</Name>
115+
<KeywordList>
116+
<Keyword vocabulary="ISO">infoMapAccessService</Keyword>
117+
</KeywordList>
118+
<MetadataURL/>
114119
<Layer queryable="1">
115120
<Name>testlayer èé</Name>
116121
<Title>A test vector layer</Title>

tests/testdata/qgis_server/getcapabilities_inspire.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ Content-Type: text/xml; charset=utf-8
120120
</inspire_common:ResponseLanguage>
121121
</inspire_vs:ExtendedCapabilities>
122122
<Layer>
123-
<Name>QGIS Test Project</Name>
124123
<Title>QGIS Test Project</Title>
124+
<Abstract>QGIS Test Project</Abstract>
125125
<CRS>CRS:84</CRS>
126126
<CRS>EPSG:4326</CRS>
127127
<CRS>EPSG:3857</CRS>
@@ -133,6 +133,11 @@ Content-Type: text/xml; charset=utf-8
133133
</EX_GeographicBoundingBox>
134134
<BoundingBox maxy="5.60604e+06" maxx="913283" miny="5.60599e+06" CRS="EPSG:3857" minx="913171"/>
135135
<BoundingBox maxy="8.20416" maxx="44.9016" miny="8.20315" CRS="EPSG:4326" minx="44.9012"/>
136+
<Name>QGIS Test Project</Name>
137+
<KeywordList>
138+
<Keyword vocabulary="ISO">infoMapAccessService</Keyword>
139+
</KeywordList>
140+
<MetadataURL/>
136141
<Layer queryable="1">
137142
<Name>testlayer èé</Name>
138143
<Title>A test vector layer</Title>

tests/testdata/qgis_server/getprojectsettings.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ Content-Type: text/xml; charset=utf-8
114114
<WFSLayer name="testlayer èé"/>
115115
</WFSLayers>
116116
<Layer>
117-
<Name>QGIS Test Project</Name>
118117
<Title>QGIS Test Project</Title>
118+
<Abstract>QGIS Test Project</Abstract>
119119
<CRS>CRS:84</CRS>
120120
<CRS>EPSG:4326</CRS>
121121
<CRS>EPSG:3857</CRS>
@@ -127,6 +127,11 @@ Content-Type: text/xml; charset=utf-8
127127
</EX_GeographicBoundingBox>
128128
<BoundingBox maxy="5.60604e+06" maxx="913283" miny="5.60599e+06" CRS="EPSG:3857" minx="913171"/>
129129
<BoundingBox maxy="8.20416" maxx="44.9016" miny="8.20315" CRS="EPSG:4326" minx="44.9012"/>
130+
<Name>QGIS Test Project</Name>
131+
<KeywordList>
132+
<Keyword vocabulary="ISO">infoMapAccessService</Keyword>
133+
</KeywordList>
134+
<MetadataURL/>
130135
<TreeName>QGIS Test Project</TreeName>
131136
<Layer geometryType="Point" queryable="1" displayField="name" visible="1">
132137
<Name>testlayer èé</Name>

0 commit comments

Comments
 (0)