Skip to content

Commit

Permalink
WMS provider: catch potential QgsCsException
Browse files Browse the repository at this point in the history
  • Loading branch information
rouault committed Feb 7, 2024
1 parent 5c2ab83 commit a3599fe
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 7 deletions.
25 changes: 19 additions & 6 deletions src/providers/wms/qgswmsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,10 @@ QgsWmsProvider::QgsWmsProvider( QString const &uri, const ProviderOptions &optio
// we are working with XYZ tiles
// no need to get capabilities, the whole definition is in URI
// so we just generate a dummy WMTS definition
setupXyzCapabilities( uri );
if ( !setupXyzCapabilities( uri ) )
{
return;
}
}
else
{
Expand Down Expand Up @@ -1760,7 +1763,7 @@ bool QgsWmsProvider::retrieveServerCapabilities( bool forceRefresh )
}


void QgsWmsProvider::setupXyzCapabilities( const QString &uri, const QgsRectangle &sourceExtent, int sourceMinZoom, int sourceMaxZoom, double sourceTilePixelRatio )
bool QgsWmsProvider::setupXyzCapabilities( const QString &uri, const QgsRectangle &sourceExtent, int sourceMinZoom, int sourceMaxZoom, double sourceTilePixelRatio )
{
QgsDataSourceUri parsedUri;
parsedUri.setEncodedUri( uri );
Expand All @@ -1773,8 +1776,18 @@ void QgsWmsProvider::setupXyzCapabilities( const QString &uri, const QgsRectangl
// Y going from ~85 N to ~85 S (=atan(sinh(pi)) ... to get a square)
QgsPointXY topLeftLonLat( -180, 180.0 / M_PI * std::atan( std::sinh( M_PI ) ) );
QgsPointXY bottomRightLonLat( 180, 180.0 / M_PI * std::atan( std::sinh( -M_PI ) ) );
QgsPointXY topLeft = ct.transform( topLeftLonLat );
QgsPointXY bottomRight = ct.transform( bottomRightLonLat );
QgsPointXY topLeft;
QgsPointXY bottomRight;
try
{
topLeft = ct.transform( topLeftLonLat );
bottomRight = ct.transform( bottomRightLonLat );
}
catch ( const QgsCsException & )
{
QgsDebugError( QStringLiteral( "setupXyzCapabilities: failed to reproject corner coordinates" ) );
return false;
}
double xspan = ( bottomRight.x() - topLeft.x() );

QgsWmsBoundingBoxProperty bbox;
Expand Down Expand Up @@ -1877,6 +1890,7 @@ void QgsWmsProvider::setupXyzCapabilities( const QString &uri, const QgsRectangl
tmsLinkRef.limits[tm.identifier] = limits;
}
}
return true;
}

bool QgsWmsProvider::setupMBTilesCapabilities( const QString &uri )
Expand Down Expand Up @@ -1925,8 +1939,7 @@ bool QgsWmsProvider::setupMBTilesCapabilities( const QString &uri )
// MBTiles spec does not say anything about resolutions...
double sourceTilePixelRatio = 1;

setupXyzCapabilities( uri, sourceExtent, sourceMinZoom, sourceMaxZoom, sourceTilePixelRatio );
return true;
return setupXyzCapabilities( uri, sourceExtent, sourceMinZoom, sourceMaxZoom, sourceTilePixelRatio );
}


Expand Down
2 changes: 1 addition & 1 deletion src/providers/wms/qgswmsprovider.h
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@ class QgsWmsProvider final: public QgsRasterDataProvider
private:

//! In case of XYZ tile layer, setup capabilities from its URI
void setupXyzCapabilities( const QString &uri, const QgsRectangle &sourceExtent = QgsRectangle(), int sourceMinZoom = -1, int sourceMaxZoom = -1, double sourceTilePixelRatio = 0. );
bool setupXyzCapabilities( const QString &uri, const QgsRectangle &sourceExtent = QgsRectangle(), int sourceMinZoom = -1, int sourceMaxZoom = -1, double sourceTilePixelRatio = 0. );
//! In case of MBTiles layer, setup capabilities from its metadata
bool setupMBTilesCapabilities( const QString &uri );

Expand Down

0 comments on commit a3599fe

Please sign in to comment.