8
8
9
9
wms-c/wmts support : Jürgen E. Fischer < jef at norbit dot de >, norBIT GmbH
10
10
11
+ tile retry support : Luigi Pirelli < luipir at gmail dot com >
12
+ (funded by Regione Toscana-SITA)
13
+
11
14
***************************************************************************/
12
15
13
16
/* **************************************************************************
@@ -159,6 +162,8 @@ bool QgsWmsProvider::parseUri( QString uriString )
159
162
mInvertAxisOrientation = uri.hasParam ( " InvertAxisOrientation" ); // must be before parsing!
160
163
mSmoothPixmapTransform = uri.hasParam ( " SmoothPixmapTransform" );
161
164
165
+ mDpiMode = uri.hasParam ( " dpiMode" ) ? ( QgsWmsDpiMode ) uri.param ( " dpiMode" ).toInt () : dpiAll;
166
+
162
167
mUserName = uri.param ( " username" );
163
168
QgsDebugMsg ( " set username to " + mUserName );
164
169
@@ -645,15 +650,14 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, i
645
650
setQueryItem ( url, " STYLES" , styles );
646
651
setQueryItem ( url, " FORMAT" , mImageMimeType );
647
652
648
- // DPI parameter is accepted by QGIS mapserver (and ignored by the other WMS servers)
649
- // map_resolution parameter works for UMN mapserver
650
-
651
- // Different WMS servers have DPI parameters:
652
653
if ( mDpi != -1 )
653
654
{
654
- setQueryItem ( url, " DPI" , QString::number ( mDpi ) ); // QGIS server
655
- setQueryItem ( url, " MAP_RESOLUTION" , QString::number ( mDpi ) ); // UMN mapserver
656
- setQueryItem ( url, " FORMAT_OPTIONS" , QString ( " dpi:%1" ).arg ( mDpi ) ); // geoserver
655
+ if ( mDpiMode & dpiQGIS )
656
+ setQueryItem ( url, " DPI" , QString::number ( mDpi ) );
657
+ if ( mDpiMode & dpiUMN )
658
+ setQueryItem ( url, " MAP_RESOLUTION" , QString::number ( mDpi ) );
659
+ if ( mDpiMode & dpiGeoServer )
660
+ setQueryItem ( url, " FORMAT_OPTIONS" , QString ( " dpi:%1" ).arg ( mDpi ) );
657
661
}
658
662
659
663
// MH: jpeg does not support transparency and some servers complain if jpg and transparent=true
@@ -830,9 +834,12 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, i
830
834
831
835
if ( mDpi != -1 )
832
836
{
833
- setQueryItem ( url, " DPI" , QString::number ( mDpi ) ); // QGIS server
834
- setQueryItem ( url, " MAP_RESOLUTION" , QString::number ( mDpi ) ); // UMN mapserver
835
- setQueryItem ( url, " FORMAT_OPTIONS" , QString ( " dpi:%1" ).arg ( mDpi ) ); // geoserver
837
+ if ( mDpiMode & dpiQGIS )
838
+ setQueryItem ( url, " DPI" , QString::number ( mDpi ) );
839
+ if ( mDpiMode & dpiUMN )
840
+ setQueryItem ( url, " MAP_RESOLUTION" , QString::number ( mDpi ) );
841
+ if ( mDpiMode & dpiGeoServer )
842
+ setQueryItem ( url, " FORMAT_OPTIONS" , QString ( " dpi:%1" ).arg ( mDpi ) );
836
843
}
837
844
838
845
if ( mImageMimeType == " image/x-jpegorpng" ||
@@ -860,12 +867,11 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, i
860
867
QgsDebugMsg ( QString ( " tileRequest %1 %2/%3 (%4,%5): %6" ).arg ( mTileReqNo ).arg ( i++ ).arg ( n ).arg ( row ).arg ( col ).arg ( turl ) );
861
868
request.setAttribute ( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
862
869
request.setAttribute ( QNetworkRequest::CacheSaveControlAttribute, true );
863
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 0 ), mTileReqNo );
864
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 1 ), i );
865
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 2 ),
870
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileReqNo ), mTileReqNo );
871
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileIndex ), i );
872
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileRect ),
866
873
QRectF ( tm->topLeft .x () + col * twMap, tm->topLeft .y () - ( row + 1 ) * thMap, twMap, thMap ) );
867
- int retry = 0 ; // just for readability
868
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 3 ), retry );
874
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileRetry ), 0 );
869
875
870
876
QgsDebugMsg ( QString ( " gettile: %1" ).arg ( turl ) );
871
877
QNetworkReply *reply = QgsNetworkAccessManager::instance ()->get ( request );
@@ -915,12 +921,11 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, i
915
921
QgsDebugMsg ( QString ( " tileRequest %1 %2/%3 (%4,%5): %6" ).arg ( mTileReqNo ).arg ( i++ ).arg ( n ).arg ( row ).arg ( col ).arg ( turl ) );
916
922
request.setAttribute ( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
917
923
request.setAttribute ( QNetworkRequest::CacheSaveControlAttribute, true );
918
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 0 ), mTileReqNo );
919
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 1 ), i );
920
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 2 ),
924
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileReqNo ), mTileReqNo );
925
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileIndex ), i );
926
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileRect ),
921
927
QRectF ( tm->topLeft .x () + col * twMap, tm->topLeft .y () - ( row + 1 ) * thMap, twMap, thMap ) );
922
- int retry = 0 ; // just for readability
923
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 3 ), retry );
928
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileRetry ), 0 );
924
929
925
930
QgsDebugMsg ( QString ( " gettile: %1" ).arg ( turl ) );
926
931
QNetworkReply *reply = QgsNetworkAccessManager::instance ()->get ( request );
@@ -957,12 +962,11 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, i
957
962
QgsDebugMsg ( QString ( " tileRequest %1 %2/%3 (%4,%5): %6" ).arg ( mTileReqNo ).arg ( i++ ).arg ( n ).arg ( row ).arg ( col ).arg ( turl ) );
958
963
request.setAttribute ( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
959
964
request.setAttribute ( QNetworkRequest::CacheSaveControlAttribute, true );
960
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 0 ), mTileReqNo );
961
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 1 ), i );
962
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 2 ),
965
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileReqNo ), mTileReqNo );
966
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileIndex ), i );
967
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileRect ),
963
968
QRectF ( tm->topLeft .x () + col * twMap, tm->topLeft .y () - ( row + 1 ) * thMap, twMap, thMap ) );
964
- int retry = 0 ; // just for readability
965
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 3 ), retry );
969
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileRetry ), 0 );
966
970
967
971
QgsDebugMsg ( QString ( " gettile: %1" ).arg ( turl ) );
968
972
QNetworkReply *reply = QgsNetworkAccessManager::instance ()->get ( request );
@@ -1039,7 +1043,6 @@ void QgsWmsProvider::readBlock( int bandNo, QgsRectangle const & viewExtent, in
1039
1043
// delete image;
1040
1044
}
1041
1045
1042
- // tile retry management developed with funding from Regione Toscana-SITA
1043
1046
void QgsWmsProvider::repeatTileRequest ( QNetworkRequest const &oldRequest )
1044
1047
{
1045
1048
if ( mErrors == 100 )
@@ -1050,9 +1053,9 @@ void QgsWmsProvider::repeatTileRequest( QNetworkRequest const &oldRequest )
1050
1053
QNetworkRequest request ( oldRequest );
1051
1054
1052
1055
QString url = request.url ().toString ();
1053
- int tileReqNo = request.attribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 0 ) ).toInt ();
1054
- int tileNo = request.attribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 1 ) ).toInt ();
1055
- int retry = request.attribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 3 ) ).toInt ();
1056
+ int tileReqNo = request.attribute ( static_cast <QNetworkRequest::Attribute>( TileReqNo ) ).toInt ();
1057
+ int tileNo = request.attribute ( static_cast <QNetworkRequest::Attribute>( TileIndex ) ).toInt ();
1058
+ int retry = request.attribute ( static_cast <QNetworkRequest::Attribute>( TileRetry ) ).toInt ();
1056
1059
retry++;
1057
1060
1058
1061
QSettings s;
@@ -1074,7 +1077,7 @@ void QgsWmsProvider::repeatTileRequest( QNetworkRequest const &oldRequest )
1074
1077
.arg ( tileReqNo ).arg ( tileNo ).arg ( retry ), tr ( " WMS" ), QgsMessageLog::INFO );
1075
1078
}
1076
1079
QgsDebugMsg ( QString ( " repeat tileRequest %1 %2(retry %3) for url: %4" ).arg ( tileReqNo ).arg ( tileNo ).arg ( retry ).arg ( url ) );
1077
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 3 ), retry );
1080
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileRetry ), retry );
1078
1081
1079
1082
QNetworkReply *reply = QgsNetworkAccessManager::instance ()->get ( request );
1080
1083
mTileReplies << reply;
@@ -1124,10 +1127,10 @@ void QgsWmsProvider::tileReplyFinished()
1124
1127
QgsNetworkAccessManager::instance ()->cache ()->updateMetaData ( cmd );
1125
1128
}
1126
1129
1127
- int tileReqNo = reply->request ().attribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 0 ) ).toInt ();
1128
- int tileNo = reply->request ().attribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 1 ) ).toInt ();
1129
- QRectF r = reply->request ().attribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 2 ) ).toRectF ();
1130
- int retry = reply->request ().attribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 3 ) ).toInt ();
1130
+ int tileReqNo = reply->request ().attribute ( static_cast <QNetworkRequest::Attribute>( TileReqNo ) ).toInt ();
1131
+ int tileNo = reply->request ().attribute ( static_cast <QNetworkRequest::Attribute>( TileIndex ) ).toInt ();
1132
+ QRectF r = reply->request ().attribute ( static_cast <QNetworkRequest::Attribute>( TileRect ) ).toRectF ();
1133
+ int retry = reply->request ().attribute ( static_cast <QNetworkRequest::Attribute>( TileRetry ) ).toInt ();
1131
1134
1132
1135
#if QT_VERSION >= 0x40500
1133
1136
QgsDebugMsg ( QString ( " tile reply %1 (%2) tile:%3(retry %4) rect:%5,%6 %7,%8) fromcache:%9 error:%10 url:%11" )
@@ -1155,10 +1158,10 @@ void QgsWmsProvider::tileReplyFinished()
1155
1158
setAuthorization ( request );
1156
1159
request.setAttribute ( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
1157
1160
request.setAttribute ( QNetworkRequest::CacheSaveControlAttribute, true );
1158
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 0 ), tileReqNo );
1159
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 1 ), tileNo );
1160
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 2 ), r );
1161
- request.setAttribute ( static_cast <QNetworkRequest::Attribute>( QNetworkRequest::User + 3 ), retry );
1161
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileReqNo ), tileReqNo );
1162
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileIndex ), tileNo );
1163
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileRect ), r );
1164
+ request.setAttribute ( static_cast <QNetworkRequest::Attribute>( TileRetry ), 0 );
1162
1165
1163
1166
mTileReplies .removeOne ( reply );
1164
1167
reply->deleteLater ();
@@ -1496,7 +1499,7 @@ bool QgsWmsProvider::retrieveServerCapabilities( bool forceRefresh )
1496
1499
1497
1500
QgsDebugMsg ( " exiting." );
1498
1501
1499
- return true ;
1502
+ return mError . isEmpty () ;
1500
1503
}
1501
1504
1502
1505
void QgsWmsProvider::capabilitiesReplyFinished ()
0 commit comments