From d1e7242255a22eb1cc7d74d85e98b1e50c4f25b7 Mon Sep 17 00:00:00 2001 From: Radim Blazek Date: Wed, 18 Jul 2012 19:29:11 +0200 Subject: [PATCH] wcs test unit data --- src/core/qgsrasterdataprovider.cpp | 18 +- src/providers/wcs/qgswcscapabilities.cpp | 24 +- tests/src/providers/CMakeLists.txt | 4 + tests/src/providers/testqgswcsprovider.cpp | 55 +++-- .../raster/band1_byte_ct_epsg4326.tif | Bin 0 -> 4539 bytes .../raster/band1_byte_ct_epsg4326.tif.aux.xml | 13 ++ .../raster/band1_byte_noct_epsg4326.tif | Bin 0 -> 1443 bytes .../band1_byte_noct_epsg4326.tif.aux.xml | 13 ++ .../raster/band1_float32_noct_epsg4326.tif | Bin 0 -> 1547 bytes .../band1_float32_noct_epsg4326.tif.aux.xml | 12 + .../raster/band1_int16_noct_epsg4326.tif | Bin 0 -> 1551 bytes .../band1_int16_noct_epsg4326.tif.aux.xml | 13 ++ .../raster/band3_byte_noct_epsg4326.tif | Bin 0 -> 2185 bytes .../band3_byte_noct_epsg4326.tif.aux.xml | 35 +++ .../raster/band3_float32_noct_epsg4326.tif | Bin 0 -> 2717 bytes .../band3_float32_noct_epsg4326.tif.aux.xml | 32 +++ .../raster/band3_int16_noct_epsg4326.tif | Bin 0 -> 2519 bytes .../band3_int16_noct_epsg4326.tif.aux.xml | 35 +++ tests/testdata/raster/wcs.map | 207 ++++++++++++++++++ 19 files changed, 433 insertions(+), 28 deletions(-) create mode 100644 tests/testdata/raster/band1_byte_ct_epsg4326.tif create mode 100644 tests/testdata/raster/band1_byte_ct_epsg4326.tif.aux.xml create mode 100644 tests/testdata/raster/band1_byte_noct_epsg4326.tif create mode 100644 tests/testdata/raster/band1_byte_noct_epsg4326.tif.aux.xml create mode 100644 tests/testdata/raster/band1_float32_noct_epsg4326.tif create mode 100644 tests/testdata/raster/band1_float32_noct_epsg4326.tif.aux.xml create mode 100644 tests/testdata/raster/band1_int16_noct_epsg4326.tif create mode 100644 tests/testdata/raster/band1_int16_noct_epsg4326.tif.aux.xml create mode 100644 tests/testdata/raster/band3_byte_noct_epsg4326.tif create mode 100644 tests/testdata/raster/band3_byte_noct_epsg4326.tif.aux.xml create mode 100644 tests/testdata/raster/band3_float32_noct_epsg4326.tif create mode 100644 tests/testdata/raster/band3_float32_noct_epsg4326.tif.aux.xml create mode 100644 tests/testdata/raster/band3_int16_noct_epsg4326.tif create mode 100644 tests/testdata/raster/band3_int16_noct_epsg4326.tif.aux.xml create mode 100644 tests/testdata/raster/wcs.map diff --git a/src/core/qgsrasterdataprovider.cpp b/src/core/qgsrasterdataprovider.cpp index f0ec88880f5..ca0e14ad1a5 100644 --- a/src/core/qgsrasterdataprovider.cpp +++ b/src/core/qgsrasterdataprovider.cpp @@ -279,6 +279,7 @@ QgsRasterBandStats QgsRasterDataProvider::bandStatistics( int theBandNo ) int myBandXSize = xSize(); int myBandYSize = ySize(); + int maxCount = xSize() * ySize(); for ( int iYBlock = 0; iYBlock < myNYBlocks; iYBlock++ ) { for ( int iXBlock = 0; iXBlock < myNXBlocks; iXBlock++ ) @@ -306,12 +307,15 @@ QgsRasterBandStats QgsRasterDataProvider::bandStatistics( int theBandNo ) double myValue = readValue( myData, myDataType, iX + ( iY * myXBlockSize ) ); QgsDebugMsgLevel( QString( "%1 %2 value %3" ).arg( iX ).arg( iY ).arg( myValue ), 10 ); - if ( mValidNoDataValue && ( qAbs( myValue - myNoDataValue ) <= TINY_VALUE ) ) + if ( mValidNoDataValue && + ( ( std::isnan( myNoDataValue ) && std::isnan( myValue ) ) || qAbs( myValue - myNoDataValue ) <= TINY_VALUE ) ) { continue; // NULL } myRasterBandStats.sum += myValue; + // sum can easily run out of limits + myRasterBandStats.mean += myValue / maxCount; ++myRasterBandStats.elementCount; //only use this element if we have a non null element if ( myFirstIterationFlag ) @@ -342,7 +346,8 @@ QgsRasterBandStats QgsRasterDataProvider::bandStatistics( int theBandNo ) //end of first pass through data now calculate the range myRasterBandStats.range = myRasterBandStats.maximumValue - myRasterBandStats.minimumValue; //calculate the mean - myRasterBandStats.mean = myRasterBandStats.sum / myRasterBandStats.elementCount; + //myRasterBandStats.mean = myRasterBandStats.sum / myRasterBandStats.elementCount; + myRasterBandStats.mean = maxCount * ( myRasterBandStats.mean / myRasterBandStats.elementCount ); //for the second pass we will get the sum of the squares / mean for ( int iYBlock = 0; iYBlock < myNYBlocks; iYBlock++ ) @@ -373,21 +378,20 @@ QgsRasterBandStats QgsRasterDataProvider::bandStatistics( int theBandNo ) double myValue = readValue( myData, myDataType, iX + ( iY * myXBlockSize ) ); //QgsDebugMsg ( "myValue = " + QString::number(myValue) ); - if ( mValidNoDataValue && ( qAbs( myValue - myNoDataValue ) <= TINY_VALUE ) ) + if ( mValidNoDataValue && + ( ( std::isnan( myNoDataValue ) && std::isnan( myValue ) ) || qAbs( myValue - myNoDataValue ) <= TINY_VALUE ) ) { continue; // NULL } - myRasterBandStats.sumOfSquares += static_cast < double > - ( pow( myValue - myRasterBandStats.mean, 2 ) ); + myRasterBandStats.sumOfSquares += static_cast < double >( pow( myValue - myRasterBandStats.mean, 2 ) ); } } } //end of column wise loop } //end of row wise loop //divide result by sample size - 1 and get square root to get stdev - myRasterBandStats.stdDev = static_cast < double >( sqrt( myRasterBandStats.sumOfSquares / - ( myRasterBandStats.elementCount - 1 ) ) ); + myRasterBandStats.stdDev = static_cast < double >( sqrt( myRasterBandStats.sumOfSquares / ( myRasterBandStats.elementCount - 1 ) ) ); #ifdef QGISDEBUG QgsDebugMsg( "************ STATS **************" ); diff --git a/src/providers/wcs/qgswcscapabilities.cpp b/src/providers/wcs/qgswcscapabilities.cpp index 533cde790de..04250db004e 100644 --- a/src/providers/wcs/qgswcscapabilities.cpp +++ b/src/providers/wcs/qgswcscapabilities.cpp @@ -192,9 +192,27 @@ bool QgsWcsCapabilities::retrieveServerCapabilities( ) clear(); QStringList versions; - // 1.0.0 - VERSION - // 1.1.0 - AcceptedVersions (not supported by UMN Mapserver 6.0.3 - defaults to 1.1.1 - versions << "AcceptVersions=1.1.0,1.0.0" << "VERSION=1.0.0"; + QString preferredVersion = mUri.param( "version" ); + + if ( !preferredVersion.isEmpty() ) + { + // This is not + if ( preferredVersion.startsWith ( "1.0" ) ) + { + versions << "VERSION=" + preferredVersion; + } + else if ( preferredVersion.startsWith ( "1.1" ) ) + { + // Ignored by UMN Mapserver 6.0.3, see below + versions << "AcceptVersions=" + preferredVersion; + } + } + else + { + // 1.0.0 - VERSION + // 1.1.0 - AcceptVersions (not supported by UMN Mapserver 6.0.3 - defaults to latest 1.1 + versions << "AcceptVersions=1.1,1.0" << "VERSION=1.0"; + } foreach( QString v, versions ) { diff --git a/tests/src/providers/CMakeLists.txt b/tests/src/providers/CMakeLists.txt index 69b8a6faa24..4bc16db4c2e 100644 --- a/tests/src/providers/CMakeLists.txt +++ b/tests/src/providers/CMakeLists.txt @@ -22,6 +22,10 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ADD_DEFINITIONS(-DTEST_DATA_DIR="\\"${TEST_DATA_DIR}\\"") ADD_DEFINITIONS(-DINSTALL_PREFIX="\\"${CMAKE_INSTALL_PREFIX}\\"") + +SET(TEST_SERVER_URL "http://127.0.0.1/test/${COMPLETE_VERSION}") +ADD_DEFINITIONS(-DTEST_SERVER_URL="\\"${TEST_SERVER_URL}\\"") + ############################################################# # libraries diff --git a/tests/src/providers/testqgswcsprovider.cpp b/tests/src/providers/testqgswcsprovider.cpp index 8bafe41063c..93179003ec2 100644 --- a/tests/src/providers/testqgswcsprovider.cpp +++ b/tests/src/providers/testqgswcsprovider.cpp @@ -43,11 +43,12 @@ class TestQgsWcsProvider: public QObject void read(); private: - bool read( QString identifier, QString theFilePath, QString & theReport ); + bool read( QString theIdentifier, QString theWcsUri, QString theFilePath, QString & theReport ); // Log error in html void error( QString theMessage, QString &theReport ); // compare values and add table row in html report, set ok to false if not equal QString compareHead(); + bool compare ( double wcsVal, double gdalVal, double theTolerance ); void compare( QString theParamName, int wcsVal, int gdalVal, QString &theReport, bool &theOk ); void compare( QString theParamName, double wcsVal, double gdalVal, QString &theReport, bool &theOk, double theTolerance = 0 ); void compareRow( QString theParamName, QString wcsVal, QString gdalVal, QString &theReport, bool theOk, QString theDifference = "", QString theTolerance = "" ); @@ -82,7 +83,7 @@ void TestQgsWcsProvider::initTestCase() mTestDataDir = QString( TEST_DATA_DIR ) + QDir::separator() + "raster"; qDebug() << "mTestDataDir = " << mTestDataDir; - mUrl = "http://127.0.0.1//cgi-bin/wcstest"; + mUrl = QString( TEST_SERVER_URL ) + QDir::separator() + "wcs"; } //runs after all tests @@ -102,39 +103,52 @@ void TestQgsWcsProvider::cleanupTestCase() void TestQgsWcsProvider::read( ) { bool ok = true; + QStringList versions; + + versions << "1.0" << "1.1"; + QStringList identifiers; // identifiers in mapfile have the same name as files without .tif extension identifiers << "band1_byte_noct_epsg4326"; identifiers << "band1_int16_noct_epsg4326"; identifiers << "band1_float32_noct_epsg4326"; + identifiers << "band3_byte_noct_epsg4326"; + identifiers << "band3_int16_noct_epsg4326"; + identifiers << "band3_float32_noct_epsg4326"; // How to reasonably log multiple fails within this loop? - foreach( QString identifier, identifiers ) + foreach( QString version, versions ) { - QString filePath = mTestDataDir + QDir::separator() + identifier + ".tif"; - if ( !read( identifier, filePath, mReport ) ) + foreach( QString identifier, identifiers ) { - ok = false; + QString filePath = mTestDataDir + QDir::separator() + identifier + ".tif"; + + QgsDataSourceURI uri; + uri.setParam( "url", mUrl ); + uri.setParam( "identifier", identifier ); + uri.setParam( "crs", "epsg:4326" ); + uri.setParam( "version", version ); + + if ( !read( identifier, uri.encodedUri(), filePath, mReport ) ) + { + ok = false; + } } } QVERIFY2( ok, "Reading data failed. See report for details." ); } -bool TestQgsWcsProvider::read( QString theIdentifier, QString theFilePath, QString & theReport ) +bool TestQgsWcsProvider::read( QString theIdentifier, QString theWcsUri, QString theFilePath, QString & theReport ) { bool ok = true; - QgsDataSourceURI uri; - uri.setParam( "url", mUrl ); - uri.setParam( "identifier", theIdentifier ); - uri.setParam( "crs", "epsg:4326" ); theReport += QString( "

Identifier (coverage): %1

" ).arg( theIdentifier ); - QgsRasterDataProvider* wcsProvider = QgsRasterLayer::loadProvider( "wcs", uri.encodedUri() ); + QgsRasterDataProvider* wcsProvider = QgsRasterLayer::loadProvider( "wcs", theWcsUri ); if ( !wcsProvider || !wcsProvider->isValid() ) { - error( QString( "Cannot load WCS provider with URI: %1" ).arg( QString( uri.encodedUri() ) ), theReport ); + error( QString( "Cannot load WCS provider with URI: %1" ).arg( QString( theWcsUri ) ), theReport ); ok = false; } @@ -147,7 +161,7 @@ bool TestQgsWcsProvider::read( QString theIdentifier, QString theFilePath, QStri if ( !ok ) return false; - theReport += QString( "WCS URI: %1
" ).arg( QString( uri.encodedUri() ).replace( "&", "&" ) ); + theReport += QString( "WCS URI: %1
" ).arg( theWcsUri.replace( "&", "&" ) ); theReport += QString( "GDAL URI: %1
" ).arg( theFilePath ); theReport += "
"; @@ -212,7 +226,7 @@ bool TestQgsWcsProvider::read( QString theIdentifier, QString theFilePath, QStri continue; } - if ( !statsOk || typesOk ) + if ( !statsOk || !typesOk ) { allOk = false; // create values table anyway so that values are available @@ -247,7 +261,7 @@ bool TestQgsWcsProvider::read( QString theIdentifier, QString theFilePath, QStri double gdalVal = gdalProvider->readValue( gdalData, gdalProvider->dataType( band ), row * width + col ); QString valStr; - if ( wcsVal == gdalVal ) + if ( compare ( wcsVal, gdalVal, 0 ) ) { valStr = QString( "%1" ).arg( wcsVal ); } @@ -299,10 +313,15 @@ void TestQgsWcsProvider::compare( QString theParamName, int wcsVal, int gdalVal, if ( !ok ) theOk = false; } +bool TestQgsWcsProvider::compare ( double wcsVal, double gdalVal, double theTolerance ) +{ + // values may be nan + return ( std::isnan( wcsVal ) && std::isnan( gdalVal ) ) || ( qAbs( wcsVal - gdalVal ) <= theTolerance ); +} + void TestQgsWcsProvider::compare( QString theParamName, double wcsVal, double gdalVal, QString &theReport, bool &theOk, double theTolerance ) { - bool ok = ( qAbs( wcsVal - gdalVal ) <= theTolerance ); - + bool ok = compare ( wcsVal, gdalVal, theTolerance ); compareRow( theParamName, QString::number( wcsVal ), QString::number( gdalVal ), theReport, ok, QString::number( wcsVal - gdalVal ), QString::number( theTolerance ) ); if ( !ok ) theOk = false; } diff --git a/tests/testdata/raster/band1_byte_ct_epsg4326.tif b/tests/testdata/raster/band1_byte_ct_epsg4326.tif new file mode 100644 index 0000000000000000000000000000000000000000..0eeec5a6049c4e7768034b3eaa1876b299070f49 GIT binary patch literal 4539 zcmebD)MDV{WMB|tU|?isU}Rum-~wVsBsLS2%>fi=hO$BG*r04?AX|`;1*{jyWDrGC zBL-!I%oImbBZH*I0mxn*O)WeOY(TaWkiEX0nLz=_4g#__ zwDT}90ojv)?2YYA4D3MmA|ShA2@``d(2>tTn&5zmiG_uYje~=Wi-(7gPe4FONJKwJ~1&lIW;vsJu@>qJ2y8!zp${lxU{sqyt1;oy0*5y zzOk{nxwW;uy|c5sySKN$f8xZ+lc!FdK7HoQ*|X=)oj-r!!o`c1E?vHS)v7gX)~(yH zVbi89TefZ6v18Y+J$v@;J8_s^f- zzkmJu`SZt*@87?D`}+0Em(QO+efs$E!-x0p-@SYL_RX8uuV1}-`SQh!=g*%#d;0Xr zlgE!AJ$m@?!Grtv@7=q5_s*T$w{P9LdGp4N>({ScyK2>n70Z?_S+Z!+f(7&D&6zW6 z){Gg`rcIeLY0`uVeSJMWU0od=ZEYqw zX=y1bNl6I_ad9y*QBe^Qp`pRSfr0-1zP{exo}TXRuCC6`j*j;Bwzk&RmX_w`rl!Wm zhKBn3y1LrhnwskBs;bJ$ii+~`va-_Bl9J-$qN2jWf`a_~yu94poSf|JtgOtSB4iYd z@DQ+ZcX9ObO)W`GNi0dU<5Ezt@hnNrRme-sO|?~W_V@7*iVtyg@^Ot13I!4FPVojx z3dM=J1vx-@10_2nU~K>bsoDkx3Wj<{7Eq3nf`NjOsVS5MvuyN1MiXU+A&MO+#v19F zn!xPTu4H8%a`Ct!W!DyH`E}G*2L`K2^rh*aN z5&+i3EWmaIuyzJk`#>6483XHOMuuksj2s)=LDe!FnBS+&$+4jwB+m_|85lZpOQy*# zDFT`2uq-6Pu{^!l!lZ_QiS<7h55J&@n54Aae`PfdZCwK+M3L?n_&+QnIyNCWH6!bP zeo;wzWleo!%m2>qz6q13&X_g#|DvVKSFKsUam%*Q!Q1^wVhw1NZ#5Un5wARE>S zY5=lft)K}&Hmnsi1ITU!wupcc!2nE0KoSN + + + 2.000000e+00 1.280000e+02 0 255 0 255 255 0 + 1.280000e+02 2.540000e+02 255 255 0 255 0 0 + 2 + 254 + 135.53086419753 + 2 + 73.957459647589 + + + diff --git a/tests/testdata/raster/band1_byte_noct_epsg4326.tif b/tests/testdata/raster/band1_byte_noct_epsg4326.tif new file mode 100644 index 0000000000000000000000000000000000000000..4a6d8bd4b83e5e3b8f65dbca81dd90b743341337 GIT binary patch literal 1443 zcmebD)M8*_W?&FxU|?isU}Rum-~wVsBsLS2%>fi=hO$BG*pS$Qj4WWiKw$<^Bylk) z8)T+9k{TH#HNi-1zGfZzzag7fO1rhE}@dio?#fiBEIY4;>B|9TM129O{HZV{y)HAXG@qip71p@^m zQ&T7jX4&Y2j3&wsLliquj5X3THG$g!G8bWsfr0^Xb_B;e`-l34pjcuA(`uuS8YGZ# zVqo}S4`IP*m^dz);{ZfP!U3j&5ghx#m|y{>9boJLqZ&v9BLkRd7#W@kFmh~c2gM~D znBS+&$+4jwB+m_|85lZpOQy*#DFT`2uq-6Pu{^!l!lZ_QiS<7h55J&@n54Aae`Pfd zZCwMS|8U?J_&+QnIyNCWH6!bPeo;wzWleo!%m2>qz6q13&X_g#|DvVKSFKsUam%*< zyZ0SDeC)*Ovlsqfy?*P?{YOupzx@C1fMls^}k0tu!36rlGArThoL z + + + 2.000000e+00 1.280000e+02 0 255 0 255 255 0 + 1.280000e+02 2.540000e+02 255 255 0 255 0 0 + 2 + 254 + 135.53086419753 + 2 + 73.957459647589 + + + diff --git a/tests/testdata/raster/band1_float32_noct_epsg4326.tif b/tests/testdata/raster/band1_float32_noct_epsg4326.tif new file mode 100644 index 0000000000000000000000000000000000000000..d740eeca26dbb943289bb9d9a3cf9d9d47857b68 GIT binary patch literal 1547 zcmdT^Ur19?9R6)nTekk#KMN`@TMw})@0OC#ow-@8x z*OO3$AW9ELq@Z9gVd9J6O9VZH1VQu`M$m)d?&&+%-P#^x4?)m@bAR7G=eytUcfWIg zHxzQyl8vZ}$YLW45mjPZ3a~YgC9K=>Snw(eaFwOZcoxgFr(k_=9t+Lt0?vT~P9%>} z1Z^91kcdx_;NE=)RRB)|zs%T30{#p3T2BNZ4>QNJ2H?c1}8|34% zF=9t$St`2m*40TK?@39Pej}wuh?mL|i8i&gUu-K%<1rsqYKjY9e+!~-r`M4g&Gn6< zeQtecU!%#e7-s{Y%5bvq4hMkP zojA_F@8MJErBXfo2p> + + + 0.000000e+00 0.000000e+00 255 127 0 255 127 0 + 1 + 3.3999999521444e+38 + 2.4177777984595e+37 + -3.3319999287626e+38 + 1.9800745699579e+38 + + + diff --git a/tests/testdata/raster/band1_int16_noct_epsg4326.tif b/tests/testdata/raster/band1_int16_noct_epsg4326.tif new file mode 100644 index 0000000000000000000000000000000000000000..9d6e5985e2131ebf8ab86e23674cdf57d07fcfaf GIT binary patch literal 1551 zcmebD)M7|uW?&FxU|?isU}Rum-~wVsBsLS2EdUf}hO$BG*pS$Qj4WWiKw$<^Bylk) z8)T+9k{TH#HNj9e6HpCbGYx$EBcP<5`lLtB{wNn`*1% z?C;|r6d&T~<^e z3eWV}GqvXIn#a&^V{yi^?+I_!DKT-115|;|K=h?1NZe=H?{8Uyyx-o#^dy7 z-(Ix62Bwn_CZ7*~4f^ruSK(g + + + -3.211166e+04 3.276700e+02 0 255 0 255 255 0 + 3.276700e+02 3.276700e+04 255 255 0 255 0 0 + 2 + 32767 + 2330.024691358 + -32111 + 19082.231766347 + + + diff --git a/tests/testdata/raster/band3_byte_noct_epsg4326.tif b/tests/testdata/raster/band3_byte_noct_epsg4326.tif new file mode 100644 index 0000000000000000000000000000000000000000..65918e2c33d362cdae119184e98fa18b32639147 GIT binary patch literal 2185 zcmebD)MB{C%)lVXz`)4Nz{tSBzy-vNNNgq`8>oQc77#N-#X;)Wpll`}Tab|jtQW{+ z5QU0^^oT*(AT!00)W{&26AWa7)II=WzGfaUn+s@YQwt9R8&FIM$X?&h%%A{d2Lag| z+Ibj2c1{8k8{3%}*n#XtKz73tCI)4o!=3^8Aix2Jj6ioWGT6AgIQsaemL#SmmL%G7 zDJa-@mZat?6s79H6{`lAV#B0T`re z8yF}U>KR#pctDPkf`NjOsVS5MvuyN1MiXU+A&MO+#v19Fn!xPTu4H8J0F))0vhp=EYOdJ=@aR4GC;Q&(s3U3Bbtgryn5iq8J(GHFS zU~~ZKX9A2I8{0wg$_D25DRXjcXb0)x2Ga}-9l0gbWS10y%yU>465&{$UTk4f!@$JE z#LCM0|Nnn3E-oG(9)5m)K|w(g5fL#lF-b{DX=!OWIXR%Lva+(8nwo}&hPJl0uC6XH z42_J8fZ}+7pPye~U?5OISXfv@L_~CSbZl&FLPA1va&l^FYDPvzR#p~JHa|bVsHmu< zq@=vOyt1;grlzL8zP_=sv8AO2DBIcD+1=gU*Vi{;!i33_Cr_O^b;gVtvu4ejJ9jQn zcG03mOP4NPzI^$rRjbylS+joq`i&bmZrQSB+qP{$+1KYslF{rlg)e+)vvpvIq@w*X^>P;Ooc%vFSPvkow_vE}AnK=Wa_`2dg& z%gr}{Y*=pQU`6C+4Z>k+FdEiAT otmGlB@HM1E;S02b_JuFVBjg2v5gmd6Xb0_s0OS!^5Mb0l0G{p{2mk;8 literal 0 HcmV?d00001 diff --git a/tests/testdata/raster/band3_byte_noct_epsg4326.tif.aux.xml b/tests/testdata/raster/band3_byte_noct_epsg4326.tif.aux.xml new file mode 100644 index 00000000000..b273919e9d6 --- /dev/null +++ b/tests/testdata/raster/band3_byte_noct_epsg4326.tif.aux.xml @@ -0,0 +1,35 @@ + + + + 2.000000e+00 1.280000e+02 0 255 0 255 255 0 + 1.280000e+02 2.540000e+02 255 255 0 255 0 0 + 2 + 254 + 135.53086419753 + 2 + 73.957459647589 + + + + + 2.000000e+00 1.280000e+02 0 255 0 255 255 0 + 1.280000e+02 2.540000e+02 255 255 0 255 0 0 + 2 + 254 + 135.53086419753 + 2 + 73.957459647589 + + + + + 2.000000e+00 1.280000e+02 0 255 0 255 255 0 + 1.280000e+02 2.540000e+02 255 255 0 255 0 0 + 2 + 254 + 135.53086419753 + 2 + 73.957459647589 + + + diff --git a/tests/testdata/raster/band3_float32_noct_epsg4326.tif b/tests/testdata/raster/band3_float32_noct_epsg4326.tif new file mode 100644 index 0000000000000000000000000000000000000000..a13b3d4612150b03ccd5dedf1f40f1d1732e937d GIT binary patch literal 2717 zcmdUxO-NKx6vyw(m`!G1T1`R4W88#Mj+W$N#{4KuoRa*g(1i@-v?#?=NkZQ>EvA)1 z3n3SRC@qReL7_Hb;YM&1LMsW{xT=h(g`)5Fzwi0CCsE=?>dDXhpZo4T=e%>@z2}vd zW{RY(LZk`d@d=L*A_aI{+6(PN-yHC*^y_iSF1^Q-WY0yn*tgQJ=j>n6+GfBt=8$V{ z1+-UB#8nBc=Y0Y@yHjmF24`LOQ$;fRrlDUXe8PZUf*whv+H=D&Fq-fRJcx)wcMf~S z8|ZI9UxxjsZTm#HY!GPe0g68ipjyA|SLLrdS`;oI6?!IP@1g?Fwu=bdU7OV92qQq$9_h!7Ks1S)SR z(wZArWF`<(Bzv(|k>1(MihO>3Ns+R_s3K3hOBC_PixiY!T!Tz8sJn*mrRIt?Bu(Ov(nQmkDB7Ch&tX4zPiKGPHy-Hhfiei@x?>WOQJ> zjoUBoqt5|8I|yRwAmfo;CV>r;;F(NW0N2j*mvlhe{K@2 z6?{2h4NZc0;n$&e_Pt4F0v{2BgWE5j3Gp}#OevGx@@|nN-AIuH&n?N7+P#wCU6usz zxFpDpByPXhE0SOjNrL=I5`_UOV@a^5CBa^o#O)XBAPLS4NpO}(@~Wvx z60DUZIFlq9n39r+bR2houYF%|NUm4=Dp7aVt9>IlVb`mD-{Fh3ZxNccFAb+KYhMvG zYhM>MYu_ViUHg29r62kpG+c_tSfjm@3|AerJO14&^550zjeSUDZ_bAV+^l{`Y%IW> O%?S{0Rs;O)OXnx{6I}WL literal 0 HcmV?d00001 diff --git a/tests/testdata/raster/band3_float32_noct_epsg4326.tif.aux.xml b/tests/testdata/raster/band3_float32_noct_epsg4326.tif.aux.xml new file mode 100644 index 00000000000..1510a2a22dc --- /dev/null +++ b/tests/testdata/raster/band3_float32_noct_epsg4326.tif.aux.xml @@ -0,0 +1,32 @@ + + + + 0.000000e+00 0.000000e+00 255 127 0 255 127 0 + 1 + 3.3999999521444e+38 + 2.4177777984595e+37 + -3.3319999287626e+38 + 1.9800745699579e+38 + + + + + 0.000000e+00 0.000000e+00 255 127 0 255 127 0 + 1 + 3.3999999521444e+38 + 2.4177777984595e+37 + -3.3319999287626e+38 + 1.9800745699579e+38 + + + + + 0.000000e+00 0.000000e+00 255 127 0 255 127 0 + 1 + 3.3999999521444e+38 + 2.4177777984595e+37 + -3.3319999287626e+38 + 1.9800745699579e+38 + + + diff --git a/tests/testdata/raster/band3_int16_noct_epsg4326.tif b/tests/testdata/raster/band3_int16_noct_epsg4326.tif new file mode 100644 index 0000000000000000000000000000000000000000..6d71b75ac4c63045d7b3e60a90839991af43198b GIT binary patch literal 2519 zcmeI!TSyd97zgmPyK3vYn3idQ$zTzpsk7sHd06k68C#pHl99PAwJOw>RRMA?HM3>jcH~5QW85>!r%$v` zu9adn66se$G4jS}3q7uv<4C&L)U0Pg)Rsi?HMfQd6jxH*@7Bw?-4qYF)oc;9_fg#F zQM1+bM}DAl{K8~v>Z@j^!gaakO%9iRm)&L0(g}j8$mMVfd+km~W^BI2Y_Zx(bMwpv zHftGng?TnHR;aT(YxmG~F*YkPB}pfOtcDH->k z(;x=FLHus(b7GW7_&JIwh;tjG#FlR<+g$25h@_;NlKtm|PZ}G~=7DnbHqUs_-sP8; z=O|rN@>@YqC4k;3ntOT$=tvJni{nU`N;}}ja}AQu+g1f@``x%6A|Dw$>2#f0={bP= z<@A=8=N_uA%P=;ujwTRJ0BeNoQ}D1AD%;_G2Q-`p{aLus3GrQUryF?ga1Ye=D`CAI zhIWFZ3O?09^KRg|7i&SPgL?;I%VBs~5BrY5)KOqd>9zcQ6`Z76Ia?LHK^17WDp*c^ zW~+kVX)L7*2GD1sRKaM9l`3eaSgC@o6f0G*i(*v4wNy?$6d$7))$wsKe=U3~B5zT? za^=WdXWlQ^*Z#j^Pp>`G75mRtEyF^rS~Q5yLM8dGjDK&{qCw_42hu{!0S)r+=YR&8 Qo`YXj?!*-Oe + + + -3.211166e+04 3.276700e+02 0 255 0 255 255 0 + 3.276700e+02 3.276700e+04 255 255 0 255 0 0 + 2 + 32767 + 2330.024691358 + -32111 + 19082.231766347 + + + + + -3.211166e+04 3.276700e+02 0 255 0 255 255 0 + 3.276700e+02 3.276700e+04 255 255 0 255 0 0 + 2 + 32767 + 2330.024691358 + -32111 + 19082.231766347 + + + + + -3.211166e+04 3.276700e+02 0 255 0 255 255 0 + 3.276700e+02 3.276700e+04 255 255 0 255 0 0 + 2 + 32767 + 2330.024691358 + -32111 + 19082.231766347 + + + diff --git a/tests/testdata/raster/wcs.map b/tests/testdata/raster/wcs.map new file mode 100644 index 00000000000..0e91a7e30d9 --- /dev/null +++ b/tests/testdata/raster/wcs.map @@ -0,0 +1,207 @@ +MAP + NAME WCS + STATUS ON + SHAPEPATH "/path/to/qgis/tests/testdata/raster" + + OUTPUTFORMAT + # NAME is used in 1.0.0 as format in capabilities and describe coverage + # in 1.1 the MIMETYPE is used instead + NAME "GEOTIFFBYTE" + DRIVER "GDAL/GTiff" + MIMETYPE "image/tiff" + # IMAGEMODE: standard modes: PC256, RGB, RGBA + # WCS (GDAL) modes: BYTE, INT16, FLOAT32 + IMAGEMODE "BYTE" + EXTENSION "tif" + END + + OUTPUTFORMAT + NAME "GEOTIFFINT16" + DRIVER "GDAL/GTiff" + MIMETYPE "image/tiff16" + IMAGEMODE "INT16" + EXTENSION "tif" + END + + OUTPUTFORMAT + NAME "GEOTIFFFLOAT32" + DRIVER "GDAL/GTiff" + MIMETYPE "image/tiff32" + IMAGEMODE "FLOAT32" + EXTENSION "tif" + END + + # Color table is not currently supported by UMN Mapserver + #OUTPUTFORMAT + #NAME "GEOTIFFINT8_COLORTABLE" + #DRIVER "GDAL/GTiff" + #MIMETYPE "image/tiff" + #IMAGEMODE "PC256" + #EXTENSION "tif" + #END + + WEB + METADATA + "wcs_label" "Quantum GIS WCS Test" + "wcs_description" "Test server to be used by Quantum GIS test suite" + #"wcs_onlineresource" "http://127.0.0.1/cgi-bin/mapserv?" ### recommended + "wcs_crs" "EPSG:4326" + "wcs_fees" "none" + "wcs_accessconstraints" "none" + "wcs_keywordlist" "qgis,wcs,test" + "wcs_metadatalink_type" "TC211" + "wcs_metadatalink_format" "text/plain" + "wcs_metadatalink_href" "http://someurl.com" + "wcs_address" "none" + "wcs_city" "none" + "wcs_stateorprovince" "none" + "wcs_postcode" "none" + "wcs_country" "none" + "wcs_contactelectronicmailaddress" "blah@blah" + "wcs_contactperson" "none" + "wcs_contactorganization" "none" + "wcs_contactposition" "none" + "wcs_contactvoicetelephone" "none" + "wcs_contactfacimiletelephone" "613-555-1235" + "wcs_enable_request" "*" + END + END + + PROJECTION + "init=epsg:4326" + END + + LAYER + NAME band3_int16_noct_epsg4326 + METADATA + "wcs_label" "band3_int16_noct_epsg4326" ### required + "wcs_rangeset_name" "Range1" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My Label" ### required to support DescribeCoverage request + "wcs_rangeset_nullvalue" "-32768" + "wcs_srs" "EPSG:4326 EPSG:900913" # native must be first! + "wcs_formats" "GEOTIFFINT16" + #"wcs_nativeformat" "geotiff" + END + TYPE RASTER ### required + STATUS ON + DATA band3_int16_noct_epsg4326.tif + PROJECTION + "init=epsg:4326" + END + END + + LAYER + NAME band1_int16_noct_epsg4326 + METADATA + "wcs_label" "band1_int16_noct_epsg4326" ### required + "wcs_rangeset_name" "Range1" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My Label" ### required to support DescribeCoverage request + "wcs_rangeset_nullvalue" "-32768" + "wcs_srs" "EPSG:4326 EPSG:900913" # native must be first! + "wcs_formats" "GEOTIFFINT16" + #"wcs_nativeformat" "geotiff" + END + TYPE RASTER ### required + STATUS ON + DATA band1_int16_noct_epsg4326.tif + PROJECTION + "init=epsg:4326" + END + END + + LAYER + NAME band1_float32_noct_epsg4326 + METADATA + "wcs_label" "band1_float32_noct_epsg4326" ### required + "wcs_rangeset_name" "Range1" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My Label" ### required to support DescribeCoverage request + "wcs_rangeset_nullvalue" "nan" + "wcs_srs" "EPSG:4326 EPSG:900913" # native must be first! + "wcs_formats" "GEOTIFFFLOAT32" + #"wcs_nativeformat" "geotiff" + END + TYPE RASTER ### required + STATUS ON + DATA band1_float32_noct_epsg4326.tif + PROJECTION + "init=epsg:4326" + END + END + + LAYER + NAME band3_byte_noct_epsg4326 + METADATA + "wcs_label" "band3_byte_noct_epsg4326" ### required + "wcs_rangeset_name" "Range1" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My Label" ### required to support DescribeCoverage request + "wcs_rangeset_nullvalue" "255" + "wcs_srs" "EPSG:4326 EPSG:900913" # native must be first! + "wcs_formats" "GEOTIFFBYTE" + #"wcs_nativeformat" "geotiff" + END + TYPE RASTER ### required + STATUS ON + DATA band3_byte_noct_epsg4326.tif + PROJECTION + "init=epsg:4326" + END + END + + LAYER + NAME band1_byte_ct_epsg4326 + METADATA + "wcs_label" "band1_byte_ct_epsg4326" ### required + "wcs_rangeset_name" "Range1" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My Label" ### required to support DescribeCoverage request + "wcs_rangeset_nullvalue" "255" + "wcs_srs" "EPSG:4326 EPSG:900913" # native must be first! + "wcs_formats" "GEOTIFFBYTE" + #"wcs_nativeformat" "geotiff" + END + TYPE RASTER ### required + STATUS ON + DATA band1_byte_ct_epsg4326.tif + PROJECTION + "init=epsg:4326" + END + END + + LAYER + NAME band3_float32_noct_epsg4326 + METADATA + "wcs_label" "band3_float32_noct_epsg4326" ### required + "wcs_rangeset_name" "Range1" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My Label" ### required to support DescribeCoverage request + "wcs_rangeset_nullvalue" "nan" + "wcs_srs" "EPSG:4326 EPSG:900913" # native must be first! + "wcs_formats" "GEOTIFFFLOAT32" + #"wcs_nativeformat" "geotiff" + END + TYPE RASTER ### required + STATUS ON + DATA band3_float32_noct_epsg4326.tif + PROJECTION + "init=epsg:4326" + END + END + + LAYER + NAME band1_byte_noct_epsg4326 + METADATA + "wcs_label" "band1_byte_noct_epsg4326" ### required + "wcs_rangeset_name" "Range1" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My Label" ### required to support DescribeCoverage request + "wcs_rangeset_nullvalue" "255" + "wcs_srs" "EPSG:4326 EPSG:900913" # native must be first! + "wcs_formats" "GEOTIFFBYTE" + #"wcs_nativeformat" "geotiff" + END + TYPE RASTER ### required + STATUS ON + DATA band1_byte_noct_epsg4326.tif + PROJECTION + "init=epsg:4326" + END + END +END +