| 50 | |
| 51 | == How to check if a GeoTIFF has a cloud optimization internal organization ? == |
| 52 | |
| 53 | The [https://svn.osgeo.org/gdal/trunk/gdal/swig/python/samples/validate_cloud_optimized_geotiff.py validate_cloud_optimized_geotiff.py] script can be used to check that a (GeoTIFF) file follows the above described file structure |
| 54 | |
| 55 | {{{ |
| 56 | $ python validate_cloud_optimized_geotiff.py test.tif |
| 57 | }}} |
| 58 | |
| 59 | or |
| 60 | |
| 61 | {{{ |
| 62 | $ python |
| 63 | import validate_cloud_optimized_geotiff.py |
| 64 | validate_cloud_optimized_geotiff.validate('test.tif') |
| 65 | }}} |
| 66 | |
| 67 | |
| 68 | == Performance testing == |
| 69 | |
| 70 | Done with GDAL trunk r37259 with internal libtiff. |
| 71 | |
| 72 | === Preparation === |
| 73 | |
| 74 | The source image is the True Color Image of a Sentinel 2A L1C product (10980x10980 pixels, RGB bands of type Byte) |
| 75 | |
| 76 | Creation of a "regular" GeoTIFF with overviews: |
| 77 | |
| 78 | {{{ |
| 79 | gdal_translate SENTINEL2_L1C:S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441.SAFE/MTD_MSIL1C.xml:TCI:EPSG_32630 S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR |
| 80 | gdaladdo -r average S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif 2 4 8 16 32 |
| 81 | }}} |
| 82 | |
| 83 | Creation of a cloud optimized GeoTIFF: |
| 84 | |
| 85 | {{{ |
| 86 | gdal_translate SENTINEL2_L1C:S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441.SAFE/MTD_MSIL1C.xml:TCI:EPSG_32630 S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI.tif -co TILED=YES -co COMPRESS=DEFLATE |
| 87 | gdaladdo -r average S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI.tif 2 4 8 16 32 |
| 88 | gdal_translate S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI.tif S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR -co COPY_SRC_OVERVIEWS=YES |
| 89 | }}} |
| 90 | |
| 91 | === Reading a single pixel === |
| 92 | |
| 93 | * Regular GeoTIFF: |
| 94 | |
| 95 | {{{ |
| 96 | $ time GDAL_DISABLE_READDIR_ON_OPEN=YES CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif gdallocationinfo --debug on \ |
| 97 | /vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif 5000 5000 |
| 98 | VSICURL: GetFileSize(http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)=3363607 response_code=200 |
| 99 | VSICURL: Downloading 0-16383 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 100 | VSICURL: Got response_code=206 |
| 101 | VSICURL: Downloading 16384-49151 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 102 | VSICURL: Got response_code=206 |
| 103 | GDAL: GDALOpen(/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif, this=0x7a84c0) succeeds as GTiff. |
| 104 | Report: |
| 105 | Location: (5000P,5000L) |
| 106 | Band 1: |
| 107 | GDAL: GDAL_CACHEMAX = 791 MB |
| 108 | VSICURL: Downloading 1556480-1572863 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 109 | VSICURL: Got response_code=206 |
| 110 | Value: 255 |
| 111 | Band 2: |
| 112 | Value: 255 |
| 113 | Band 3: |
| 114 | Value: 255 |
| 115 | GDAL: GDALClose(/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif, this=0x7a84c0) |
| 116 | |
| 117 | real 0m0.520s |
| 118 | user 0m0.080s |
| 119 | sys 0m0.012s |
| 120 | }}} |
| 121 | |
| 122 | * Cloud optimized GeoTIFF: |
| 123 | |
| 124 | {{{ |
| 125 | $ time GDAL_DISABLE_READDIR_ON_OPEN=YES CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif gdallocationinfo--debug on \ |
| 126 | /vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif 5000 5000 |
| 127 | VSICURL: GetFileSize(http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)=3355470 response_code=200 |
| 128 | VSICURL: Downloading 0-16383 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)... |
| 129 | VSICURL: Got response_code=206 |
| 130 | VSICURL: Downloading 16384-49151 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)... |
| 131 | VSICURL: Got response_code=206 |
| 132 | GDAL: GDALOpen(/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif, this=0x1c544c0) succeeds as GTiff. |
| 133 | Report: |
| 134 | Location: (5000P,5000L) |
| 135 | Band 1: |
| 136 | GDAL: GDAL_CACHEMAX = 791 MB |
| 137 | VSICURL: Downloading 2785280-2801663 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)... |
| 138 | VSICURL: Got response_code=206 |
| 139 | Value: 255 |
| 140 | Band 2: |
| 141 | Value: 255 |
| 142 | Band 3: |
| 143 | Value: 255 |
| 144 | GDAL: GDALClose(/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif, this=0x1c544c0) |
| 145 | |
| 146 | real 0m0.527s |
| 147 | user 0m0.088s |
| 148 | sys 0m0.024s |
| 149 | }}} |
| 150 | |
| 151 | No significant time difference (individual runs may differ by a few tens of milliseconds). Same amount of I/O (64 KB read). Note the use of CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif to avoid reading any side car files (.aux.xml, etc...) and GDAL_DISABLE_READDIR_ON_OPEN=YES to avoid any attempt of listing the files in the same directory. |
| 152 | |
| 153 | Same conclusions if using a AWS S3 hosting, with both GDAL_DISABLE_READDIR_ON_OPEN=YES and CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif defined as well. |
| 154 | |
| 155 | |
| 156 | === Reading a block of pixels at full resolution === |
| 157 | |
| 158 | * Regular GeoTIFF: |
| 159 | |
| 160 | {{{ |
| 161 | $ time GDAL_DISABLE_READDIR_ON_OPEN=YES CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif gdal_translate --debug on \ |
| 162 | /vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif \ |
| 163 | -srcwin 1024 1024 256 256 out.tif |
| 164 | VSICURL: GetFileSize(http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)=3363607 response_code=200 |
| 165 | VSICURL: Downloading 0-16383 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 166 | VSICURL: Got response_code=206 |
| 167 | VSICURL: Downloading 16384-49151 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 168 | VSICURL: Got response_code=206 |
| 169 | GDAL: GDALOpen(/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif, this=0xc6d620) succeeds as GTiff. |
| 170 | Input file size is 10980, 10980 |
| 171 | GTiff: ScanDirectories() |
| 172 | VSICURL: Downloading 2113536-2129919 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 173 | VSICURL: Got response_code=206 |
| 174 | VSICURL: Downloading 2129920-2162687 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 175 | VSICURL: Got response_code=206 |
| 176 | GTiff: Opened 5490x5490 overview. |
| 177 | GTiff: Opened 2745x2745 overview. |
| 178 | GTiff: Opened 1373x1373 overview. |
| 179 | GTiff: Opened 687x687 overview. |
| 180 | GTiff: Opened 344x344 overview. |
| 181 | GDAL: GDALDefaultOverviews::OverviewScan() |
| 182 | VSICURL: Downloading 196608-212991 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 183 | VSICURL: Got response_code=206 |
| 184 | ...10...20...30...40...50...60...70...80...90...100 - done. |
| 185 | |
| 186 | real 0m0.757s |
| 187 | user 0m0.100s |
| 188 | sys 0m0.032s |
| 189 | }}} |
| 190 | |
| 191 | One can see that a directory scan is done (GTiff: ScanDirectories() trace), despite a few optimizations done in r37258 and r37259. This is due to gdal_translate trying to copy mask bands, which requires scaning directories to find a potential internal mask band. This scan can be avoided by adding the -mask none switch. |
| 192 | |
| 193 | {{{ |
| 194 | $ time GDAL_DISABLE_READDIR_ON_OPEN=YES CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif gdal_translate --debug on \ |
| 195 | /vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif |
| 196 | -srcwin 1024 1024 256 256 -mask none out.tif |
| 197 | VSICURL: GetFileSize(http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)=3363607 response_code=200 |
| 198 | VSICURL: Downloading 0-16383 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 199 | VSICURL: Got response_code=206 |
| 200 | VSICURL: Downloading 16384-49151 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 201 | VSICURL: Got response_code=206 |
| 202 | GDAL: GDALOpen(/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif, this=0x1078620) succeeds as GTiff. |
| 203 | Input file size is 10980, 10980 |
| 204 | GDAL: GDALDefaultOverviews::OverviewScan() |
| 205 | GDAL: GDALDatasetCopyWholeRaster(): 256*256 swaths, bInterleave=1 |
| 206 | VSICURL: Downloading 196608-212991 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 207 | VSICURL: Got response_code=206 |
| 208 | ...10...20...30...40...50...60...70...80...90...100 - done. |
| 209 | |
| 210 | real 0m0.518s |
| 211 | user 0m0.092s |
| 212 | sys 0m0.012s |
| 213 | }}} |
| 214 | |
| 215 | Best timing on a AWS S3 bucket (us-east-1 region, accessed from France): ~ 1.9s |
| 216 | |
| 217 | This is also the performance one gets with : |
| 218 | |
| 219 | {{{ |
| 220 | $ time GDAL_DISABLE_READDIR_ON_OPEN=YES CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif \ |
| 221 | python -c 'from osgeo import gdal; ds = gdal.Open("/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif"); ds.ReadAsArray(1024,1024,256,256)' |
| 222 | }}} |
| 223 | |
| 224 | * Cloud optimized GeoTIFF: |
| 225 | |
| 226 | {{{ |
| 227 | $ time GDAL_DISABLE_READDIR_ON_OPEN=YES CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif gdal_translate --debug on \ |
| 228 | /vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif \ |
| 229 | -srcwin 1024 1024 256 256 out.tif |
| 230 | VSICURL: GetFileSize(http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)=3355470 response_code=200 |
| 231 | VSICURL: Downloading 0-16383 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)... |
| 232 | VSICURL: Got response_code=206 |
| 233 | VSICURL: Downloading 16384-49151 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)... |
| 234 | VSICURL: Got response_code=206 |
| 235 | GDAL: GDALOpen(/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif, this=0xdeb620) succeeds as GTiff. |
| 236 | Input file size is 10980, 10980 |
| 237 | GTiff: ScanDirectories() |
| 238 | GTiff: Opened 5490x5490 overview. |
| 239 | GTiff: Opened 2745x2745 overview. |
| 240 | GTiff: Opened 1373x1373 overview. |
| 241 | GTiff: Opened 687x687 overview. |
| 242 | GTiff: Opened 344x344 overview. |
| 243 | VSICURL: Downloading 1425408-1441791 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)... |
| 244 | VSICURL: Got response_code=206 |
| 245 | ...10...20...30...40...50...60...70...80...90...100 - done. |
| 246 | |
| 247 | real 0m0.519s |
| 248 | user 0m0.096s |
| 249 | sys 0m0.008s |
| 250 | }}} |
| 251 | |
| 252 | Best timing on a AWS S3 bucket: ~ 1.9s |
| 253 | |
| 254 | No need to specify -mask none to get the maximum performance: as the IFD are at the beginning of the files, they have been fetched with the 2 first HTTP GET requests. |
| 255 | |
| 256 | === Getting a subsampled version of the image === |
| 257 | |
| 258 | * Regular GeoTIFF: |
| 259 | |
| 260 | {{{ |
| 261 | $ time GDAL_DISABLE_READDIR_ON_OPEN=YES CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif gdal_translate --debug on \ |
| 262 | /vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif \ |
| 263 | out.tif -outsize 1% 1% |
| 264 | |
| 265 | VSICURL: GetFileSize(http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)=3363607 response_code=200 |
| 266 | VSICURL: Downloading 0-16383 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 267 | VSICURL: Got response_code=206 |
| 268 | VSICURL: Downloading 16384-49151 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 269 | VSICURL: Got response_code=206 |
| 270 | GDAL: GDALOpen(/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif, this=0x23d7610) succeeds as GTiff. |
| 271 | Input file size is 10980, 10980 |
| 272 | GTiff: ScanDirectories() |
| 273 | VSICURL: Downloading 2113536-2129919 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 274 | VSICURL: Got response_code=206 |
| 275 | VSICURL: Downloading 2129920-2162687 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 276 | VSICURL: Got response_code=206 |
| 277 | GTiff: Opened 5490x5490 overview. |
| 278 | GTiff: Opened 2745x2745 overview. |
| 279 | GTiff: Opened 1373x1373 overview. |
| 280 | GTiff: Opened 687x687 overview. |
| 281 | GTiff: Opened 344x344 overview. |
| 282 | VSICURL: Downloading 3342336-3358719 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 283 | VSICURL: Got response_code=206 |
| 284 | VSICURL: Downloading 3358720-3363606 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_regular_with_ovr_2.tif)... |
| 285 | VSICURL: Got response_code=206 |
| 286 | ...10...20...30...40...50...60...70...80...90...100 - done. |
| 287 | |
| 288 | real 0m0.810s |
| 289 | user 0m0.108s |
| 290 | sys 0m0.020s |
| 291 | }}} |
| 292 | |
| 293 | Best timing on a AWS S3 bucket: ~ 2.5s |
| 294 | |
| 295 | A full scan of the IFD is necessary to find the appropriate overview level. |
| 296 | |
| 297 | * Cloud optimized GeoTIFF: |
| 298 | |
| 299 | {{{ |
| 300 | $ time GDAL_DISABLE_READDIR_ON_OPEN=YES CPL_VSIL_CURL_ALLOWED_EXTENSIONS=.tif gdal_translate --debug on \ |
| 301 | /vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif \ |
| 302 | out.tif -outsize 1% 1% |
| 303 | VSICURL: GetFileSize(http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)=3355470 response_code=200 |
| 304 | VSICURL: Downloading 0-16383 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)... |
| 305 | VSICURL: Got response_code=206 |
| 306 | VSICURL: Downloading 16384-49151 (http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif)... |
| 307 | VSICURL: Got response_code=206 |
| 308 | GDAL: GDALOpen(/vsicurl/http://even.rouault.free.fr/gtiff_test/S2A_MSIL1C_20170102T111442_N0204_R137_T30TXT_20170102T111441_TCI_cloudoptimized_2.tif, this=0x1847610) succeeds as GTiff. |
| 309 | Input file size is 10980, 10980 |
| 310 | GTiff: ScanDirectories() |
| 311 | GTiff: Opened 5490x5490 overview. |
| 312 | GTiff: Opened 2745x2745 overview. |
| 313 | GTiff: Opened 1373x1373 overview. |
| 314 | GTiff: Opened 687x687 overview. |
| 315 | GTiff: Opened 344x344 overview. |
| 316 | GDAL: GDALDatasetCopyWholeRaster(): 109*109 swaths, bInterleave=1 |
| 317 | ...10...20...30...40...50...60...70...80...90...100 - done. |
| 318 | |
| 319 | real 0m0.435s |
| 320 | user 0m0.088s |
| 321 | sys 0m0.028s |
| 322 | }}} |
| 323 | |
| 324 | Best timing on a AWS S3 bucket: ~ 1.5s |
| 325 | |
| 326 | As the IFD are at the beginning of the files, as well as the pixel data for the smallest overview, the request can be completed with the 2 first HTTP GET requests (this is a bit of an extreme case of course) |