Skip to content

Commit a5039d6

Browse files
committed
Order tile requests according to their distance from view center
... so we first receive tiles in the middle rather those at the border
1 parent b919198 commit a5039d6

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

src/providers/wms/qgswmsprovider.cpp

+17
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,18 @@ static QString DEFAULT_LATLON_CRS = "CRS:84";
7979

8080
QMap<QString, QgsWmsStatistics::Stat> QgsWmsStatistics::sData;
8181

82+
//! a helper class for ordering tile requests according to the distance from view center
83+
struct LessThanTileRequest
84+
{
85+
QgsPoint center;
86+
bool operator()( const QgsWmsTiledImageDownloadHandler::TileRequest &req1, const QgsWmsTiledImageDownloadHandler::TileRequest &req2 )
87+
{
88+
QPointF p1 = req1.rect.center();
89+
QPointF p2 = req2.rect.center();
90+
return center.distance( p1.x(), p1.y() ) < center.distance( p2.x(), p2.y() );
91+
}
92+
};
93+
8294

8395
QgsWmsProvider::QgsWmsProvider( QString const& uri, const QgsWmsCapabilities* capabilities )
8496
: QgsRasterDataProvider( uri )
@@ -887,6 +899,11 @@ QImage *QgsWmsProvider::draw( QgsRectangle const & viewExtent, int pixelWidth, i
887899
if ( feedback && memCached + diskCached > 0 )
888900
feedback->onNewData();
889901

902+
// order tile requests according to the distance from view center
903+
LessThanTileRequest cmp;
904+
cmp.center = viewExtent.center();
905+
qSort( requestsFinal.begin(), requestsFinal.end(), cmp );
906+
890907
QgsWmsTiledImageDownloadHandler handler( dataSourceUri(), mSettings.authorization(), mTileReqNo, requestsFinal, image, viewExtent, mSettings.mSmoothPixmapTransform, feedback );
891908
handler.downloadBlocking();
892909
}

0 commit comments

Comments
 (0)