Skip to content

Commit

Permalink
[Server] Speed up WMS GetCapabilities by removing featureCount
Browse files Browse the repository at this point in the history
To provide a none empty bounding box in the WMS Capabilities, it is not necessary to use vector layer feature count.
Checking that extent is not empty is sufficient.
  • Loading branch information
rldhont committed Mar 23, 2021
1 parent e45b819 commit f03b1ad
Showing 1 changed file with 23 additions and 23 deletions.
46 changes: 23 additions & 23 deletions src/server/services/wms/qgswmsgetcapabilities.cpp
Expand Up @@ -1065,37 +1065,37 @@ namespace QgsWms


//Ex_GeographicBoundingBox //Ex_GeographicBoundingBox
QgsRectangle extent = l->extent(); // layer extent by default QgsRectangle extent = l->extent(); // layer extent by default
QgsRectangle wgs84Extent = l->wgs84Extent(); QgsRectangle wgs84Extent;
if ( l->type() == QgsMapLayerType::VectorLayer ) if ( extent.isEmpty() )
{ {
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( l ); // if the extent is empty (not only Null), use the wms extent
if ( vl && vl->featureCount() == 0 ) // defined in the project...
extent = QgsServerProjectUtils::wmsExtent( *project );
if ( extent.isNull() )
{ {
// if there's no feature, use the wms extent defined in the // or the CRS extent otherwise
// project... extent = l->crs().bounds();
wgs84Extent = QgsRectangle(); }
extent = QgsServerProjectUtils::wmsExtent( *project ); else if ( l->crs() != project->crs() )
if ( extent.isNull() ) {
// If CRS is different transform it to layer's CRS
try
{ {
// or the CRS extent otherwise QgsCoordinateTransform ct( project->crs(), l->crs(), project->transformContext() );
extent = vl->crs().bounds(); extent = ct.transform( extent );
} }
// If CRS is different transform it to layer's CRS catch ( QgsCsException &cse )
else if ( vl->crs() != project->crs() )
{ {
try QgsMessageLog::logMessage( QStringLiteral( "Error transforming extent for layer %1: %2" ).arg( l->name() ).arg( cse.what() ), QStringLiteral( "Server" ), Qgis::MessageLevel::Warning );
{ continue;
QgsCoordinateTransform ct( project->crs(), vl->crs(), project->transformContext() );
extent = ct.transform( extent );
}
catch ( QgsCsException &cse )
{
QgsMessageLog::logMessage( QStringLiteral( "Error transforming extent for layer %1: %2" ).arg( vl->name() ).arg( cse.what() ), QStringLiteral( "Server" ), Qgis::MessageLevel::Warning );
continue;
}
} }
} }
} }
else
{
// Get the wgs84 extent from layer
wgs84Extent = l->wgs84Extent();
}


appendLayerBoundingBoxes( doc, layerElem, extent, l->crs(), crsList, outputCrsList, project, wgs84Extent ); appendLayerBoundingBoxes( doc, layerElem, extent, l->crs(), crsList, outputCrsList, project, wgs84Extent );
} }
Expand Down

0 comments on commit f03b1ad

Please sign in to comment.