Skip to content

Instantly share code, notes, and snippets.

@scottyhq
Created June 5, 2018 21:26
Show Gist options
  • Save scottyhq/20d36c9217298e5dfe284f6a2f25dea8 to your computer and use it in GitHub Desktop.
Save scottyhq/20d36c9217298e5dfe284f6a2f25dea8 to your computer and use it in GitHub Desktop.
exploring VRT format with GDAL and rasterio
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# VRTs and Cloud storage with GDAL and Rasterio\n",
"\n",
"Advanced usage describes using WarpedVRT for operations, but in the end Geotiff arrays are loaded into memory or written to local disk:\n",
"https://gist.github.com/sgillies/7e5cd548110a5b4d45ac1a1d93cb17a3\n",
"\n",
"What if we just want to save VRTs? There are different documented approaches, for specific casesm some of which no longer seem to work:\n",
"https://github.com/mapbox/rasterio/pull/1041#issuecomment-308625948 \n",
"https://github.com/mapbox/rasterio/pull/1029 \n",
"http://rasterio.readthedocs.io/en/latest/topics/virtual-warping.html\n",
"\n",
"VRT format is a really common output format for GDAL command line tools, so it would be great to easily write VRTs from rasterio. In particular, the format is very convenient for referencing public imagery on the Cloud such as Landsat8:\n",
"\n",
" - could be useful to keep a lightweight record of files for a particular analysis in any coordinate system.\n",
" - easily run command line tools to retrieve subsets or overviews of data locally (if you want it)\n",
" - use tools like gdallocationinfo for simple analysis without downloading data\n",
" - an example notebook: \n",
"\n",
"https://github.com/scottyhq/landsat-aws-demo/blob/master/2_Landsat-8-AWS-xarray.ipynb"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.0a12\n"
]
}
],
"source": [
"import rasterio \n",
"print(rasterio.__version__) # Must be >1\n",
"from rasterio.vrt import WarpedVRT\n",
"from rasterio.enums import Resampling"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"GDAL 2.2.2, released 2017/09/15\r\n"
]
}
],
"source": [
"import gdal\n",
"gdal.VersionInfo()\n",
"!gdalinfo --version"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_B1.TIF\n"
]
}
],
"source": [
"# GDAL command line tool can now access public datasets on the cloud\n",
"# here is an example with Landsat8\n",
"\n",
"id='LC08_L1TP_047027_20180419_20180420_01_RT'\n",
"band=1\n",
"url=f'/vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/{id}/{id}_B{band}.TIF'\n",
"print(url)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Driver: GTiff/GeoTIFF\n",
"Files: /vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_B1.TIF\n",
" /vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_B1.TIF.ovr\n",
" /vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_MTL.txt\n",
" /vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_MTL.txt\n",
"Size is 7861, 7971\n",
"Coordinate System is:\n",
"PROJCS[\"WGS 84 / UTM zone 10N\",\n",
" GEOGCS[\"WGS 84\",\n",
" DATUM[\"WGS_1984\",\n",
" SPHEROID[\"WGS 84\",6378137,298.257223563,\n",
" AUTHORITY[\"EPSG\",\"7030\"]],\n",
" AUTHORITY[\"EPSG\",\"6326\"]],\n",
" PRIMEM[\"Greenwich\",0,\n",
" AUTHORITY[\"EPSG\",\"8901\"]],\n",
" UNIT[\"degree\",0.0174532925199433,\n",
" AUTHORITY[\"EPSG\",\"9122\"]],\n",
" AUTHORITY[\"EPSG\",\"4326\"]],\n",
" PROJECTION[\"Transverse_Mercator\"],\n",
" PARAMETER[\"latitude_of_origin\",0],\n",
" PARAMETER[\"central_meridian\",-123],\n",
" PARAMETER[\"scale_factor\",0.9996],\n",
" PARAMETER[\"false_easting\",500000],\n",
" PARAMETER[\"false_northing\",0],\n",
" UNIT[\"metre\",1,\n",
" AUTHORITY[\"EPSG\",\"9001\"]],\n",
" AXIS[\"Easting\",EAST],\n",
" AXIS[\"Northing\",NORTH],\n",
" AUTHORITY[\"EPSG\",\"32610\"]]\n",
"Origin = (352185.000000000000000,5374215.000000000000000)\n",
"Pixel Size = (30.000000000000000,-30.000000000000000)\n",
"Metadata:\n",
" AREA_OR_POINT=Point\n",
" METADATATYPE=ODL\n",
"Image Structure Metadata:\n",
" COMPRESSION=DEFLATE\n",
" INTERLEAVE=BAND\n",
"Corner Coordinates:\n",
"Upper Left ( 352185.000, 5374215.000) (125d 0' 4.17\"W, 48d30'13.14\"N)\n",
"Lower Left ( 352185.000, 5135085.000) (124d55'16.45\"W, 46d21'11.51\"N)\n",
"Upper Right ( 588015.000, 5374215.000) (121d48'29.47\"W, 48d30'53.56\"N)\n",
"Lower Right ( 588015.000, 5135085.000) (121d51'20.91\"W, 46d21'49.01\"N)\n",
"Center ( 470100.000, 5254650.000) (123d23'47.73\"W, 47d26'40.59\"N)\n",
"Band 1 Block=512x512 Type=UInt16, ColorInterp=Gray\n",
" Overviews: 2621x2657, 874x886, 292x296, 98x99\n",
"CPU times: user 40.3 ms, sys: 85.2 ms, total: 126 ms\n",
"Wall time: 2.13 s\n"
]
}
],
"source": [
"%%time\n",
"!gdalinfo {url}"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\"blockxsize\": 512, \"blockysize\": 512, \"bounds\": [352185.0, 5135085.0, 588015.0, 5374215.0], \"colorinterp\": [\"grey\"], \"compress\": \"deflate\", \"count\": 1, \"crs\": \"EPSG:32610\", \"descriptions\": [null], \"driver\": \"GTiff\", \"dtype\": \"uint16\", \"height\": 7971, \"indexes\": [1], \"interleave\": \"band\", \"lnglat\": [-123.39659086399698, 47.444608553735556], \"mask_flags\": [[\"all_valid\"]], \"nodata\": null, \"res\": [30.0, 30.0], \"shape\": [7971, 7861], \"tiled\": true, \"transform\": [30.0, 0.0, 352185.0, 0.0, -30.0, 5374215.0, 0.0, 0.0, 1.0], \"units\": [null], \"width\": 7861}\n",
"CPU times: user 24.8 ms, sys: 57 ms, total: 81.8 ms\n",
"Wall time: 1.55 s\n"
]
}
],
"source": [
"%%time\n",
"# Try the same with rasterio command line\n",
"!rio info {url}"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"gdal_translate -of VRT /vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_B1.TIF LC08_L1TP_047027_20180419_20180420_01_RT_B1_gdal.vrt\n",
"Input file size is 7861, 7971\n"
]
}
],
"source": [
"# Store a local VRT file that points to the COG\n",
"gdalvrt = f'{id}_B{band}_gdal.vrt'\n",
"cmd = f'gdal_translate -of VRT {url} {gdalvrt}'\n",
"print(cmd)\n",
"!{cmd}"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<VRTDataset rasterXSize=\"7861\" rasterYSize=\"7971\">\r\n",
" <SRS>PROJCS[\"WGS 84 / UTM zone 10N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"32610\"]]</SRS>\r\n",
" <GeoTransform> 3.5218500000000000e+05, 3.0000000000000000e+01, 0.0000000000000000e+00, 5.3742150000000000e+06, 0.0000000000000000e+00, -3.0000000000000000e+01</GeoTransform>\r\n",
" <Metadata>\r\n",
" <MDI key=\"AREA_OR_POINT\">Point</MDI>\r\n",
" </Metadata>\r\n",
" <Metadata domain=\"IMD\">\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.CLOUD_COVER\">41.93</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.CLOUD_COVER_LAND\">41.18</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.EARTH_SUN_DISTANCE\">1.0044896</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.GEOMETRIC_RMSE_MODEL\">6.387</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.GEOMETRIC_RMSE_MODEL_X\">4.606</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.GEOMETRIC_RMSE_MODEL_Y\">4.425</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.GEOMETRIC_RMSE_VERIFY\">3.946</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.GROUND_CONTROL_POINTS_MODEL\">438</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.GROUND_CONTROL_POINTS_VERIFY\">204</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.GROUND_CONTROL_POINTS_VERSION\">4</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.IMAGE_QUALITY_OLI\">9</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.IMAGE_QUALITY_TIRS\">7</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.ROLL_ANGLE\">-0.001</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SATURATION_BAND_1\">\"Y\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SATURATION_BAND_2\">\"Y\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SATURATION_BAND_3\">\"Y\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SATURATION_BAND_4\">\"Y\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SATURATION_BAND_5\">\"Y\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SATURATION_BAND_6\">\"Y\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SATURATION_BAND_7\">\"Y\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SATURATION_BAND_8\">\"N\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SATURATION_BAND_9\">\"N\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SUN_AZIMUTH\">151.48512556</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.SUN_ELEVATION\">50.89237677</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.TIRS_SSM_MODEL\">\"PRELIMINARY\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.TIRS_SSM_POSITION_STATUS\">\"ESTIMATED\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.TIRS_STRAY_LIGHT_CORRECTION_SOURCE\">\"TIRS\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.IMAGE_ATTRIBUTES.TRUNCATION_OLI\">\"UPPER\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.METADATA_FILE_INFO.COLLECTION_NUMBER\">01</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.METADATA_FILE_INFO.FILE_DATE\">2018-04-20T02:13:56Z</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.METADATA_FILE_INFO.LANDSAT_PRODUCT_ID\">\"LC08_L1TP_047027_20180419_20180420_01_RT\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.METADATA_FILE_INFO.LANDSAT_SCENE_ID\">\"LC80470272018109LGN00\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.METADATA_FILE_INFO.ORIGIN\">\"Image courtesy of the U.S. Geological Survey\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.METADATA_FILE_INFO.PROCESSING_SOFTWARE_VERSION\">\"LPGS_13.0.0\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.METADATA_FILE_INFO.REQUEST_ID\">\"0501804193031_00033\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.METADATA_FILE_INFO.STATION_ID\">\"LGN\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_1\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_10\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_11\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_2\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_3\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_4\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_5\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_6\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_7\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_8\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MAX_BAND_9\">65535</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_1\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_10\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_11\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_2\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_3\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_4\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_5\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_6\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_7\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_8\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_PIXEL_VALUE.QUANTIZE_CAL_MIN_BAND_9\">1</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_1\">753.28357</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_10\">22.00180</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_11\">22.00180</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_2\">771.37158</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_3\">710.81232</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_4\">599.39697</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_5\">366.80109</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_6\">91.22009</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_7\">30.74605</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_8\">678.35242</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MAXIMUM_BAND_9\">143.35417</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_1\">-62.20641</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_10\">0.10033</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_11\">0.10033</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_2\">-63.70012</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_3\">-58.69911</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_4\">-49.49840</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_5\">-30.29055</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_6\">-7.53298</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_7\">-2.53902</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_8\">-56.01857</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_RADIANCE.RADIANCE_MINIMUM_BAND_9\">-11.83823</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MAXIMUM_BAND_1\">1.210700</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MAXIMUM_BAND_2\">1.210700</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MAXIMUM_BAND_3\">1.210700</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MAXIMUM_BAND_4\">1.210700</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MAXIMUM_BAND_5\">1.210700</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MAXIMUM_BAND_6\">1.210700</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MAXIMUM_BAND_7\">1.210700</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MAXIMUM_BAND_8\">1.210700</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MAXIMUM_BAND_9\">1.210700</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MINIMUM_BAND_1\">-0.099980</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MINIMUM_BAND_2\">-0.099980</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MINIMUM_BAND_3\">-0.099980</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MINIMUM_BAND_4\">-0.099980</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MINIMUM_BAND_5\">-0.099980</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MINIMUM_BAND_6\">-0.099980</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MINIMUM_BAND_7\">-0.099980</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MINIMUM_BAND_8\">-0.099980</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.MIN_MAX_REFLECTANCE.REFLECTANCE_MINIMUM_BAND_9\">-0.099980</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.ANGLE_COEFFICIENT_FILE_NAME\">\"LC08_L1TP_047027_20180419_20180420_01_RT_ANG.txt\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.BPF_NAME_OLI\">\"LO8BPF20180419184544_20180419192109.01\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.BPF_NAME_TIRS\">\"LT8BPF20180413234647_20180413235524.02\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.COLLECTION_CATEGORY\">\"RT\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_LL_LAT_PRODUCT\">46.35334</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_LL_LON_PRODUCT\">-124.92104</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_LL_PROJECTION_X_PRODUCT\">352200.000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_LL_PROJECTION_Y_PRODUCT\">5135100.000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_LR_LAT_PRODUCT\">46.36375</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_LR_LON_PRODUCT\">-121.85600</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_LR_PROJECTION_X_PRODUCT\">588000.000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_LR_PROJECTION_Y_PRODUCT\">5135100.000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_UL_LAT_PRODUCT\">48.50352</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_UL_LON_PRODUCT\">-125.00095</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_UL_PROJECTION_X_PRODUCT\">352200.000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_UL_PROJECTION_Y_PRODUCT\">5374200.000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_UR_LAT_PRODUCT\">48.51474</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_UR_LON_PRODUCT\">-121.80839</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_UR_PROJECTION_X_PRODUCT\">588000.000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CORNER_UR_PROJECTION_Y_PRODUCT\">5374200.000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.CPF_NAME\">\"LC08CPF_20180401_20180630_01.01\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.DATA_TYPE\">\"L1TP\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.DATE_ACQUIRED\">2018-04-19</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.ELEVATION_SOURCE\">\"GLS2000\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_1\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B1.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_10\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B10.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_11\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B11.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_2\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B2.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_3\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B3.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_4\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B4.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_5\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B5.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_6\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B6.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_7\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B7.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_8\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B8.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_9\">\"LC08_L1TP_047027_20180419_20180420_01_RT_B9.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.FILE_NAME_BAND_QUALITY\">\"LC08_L1TP_047027_20180419_20180420_01_RT_BQA.TIF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.METADATA_FILE_NAME\">\"LC08_L1TP_047027_20180419_20180420_01_RT_MTL.txt\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.NADIR_OFFNADIR\">\"NADIR\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.OUTPUT_FORMAT\">\"GEOTIFF\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.PANCHROMATIC_LINES\">15941</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.PANCHROMATIC_SAMPLES\">15721</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.REFLECTIVE_LINES\">7971</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.REFLECTIVE_SAMPLES\">7861</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.RLUT_FILE_NAME\">\"LC08RLUT_20150303_20431231_01_12.h5\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.SCENE_CENTER_TIME\">\"19:01:05.9067169Z\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.SENSOR_ID\">\"OLI_TIRS\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.SPACECRAFT_ID\">\"LANDSAT_8\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.TARGET_WRS_PATH\">47</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.TARGET_WRS_ROW\">27</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.THERMAL_LINES\">7971</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.THERMAL_SAMPLES\">7861</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.WRS_PATH\">47</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PRODUCT_METADATA.WRS_ROW\">27</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PROJECTION_PARAMETERS.DATUM\">\"WGS84\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PROJECTION_PARAMETERS.ELLIPSOID\">\"WGS84\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PROJECTION_PARAMETERS.GRID_CELL_SIZE_PANCHROMATIC\">15.00</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PROJECTION_PARAMETERS.GRID_CELL_SIZE_REFLECTIVE\">30.00</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PROJECTION_PARAMETERS.GRID_CELL_SIZE_THERMAL\">30.00</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PROJECTION_PARAMETERS.MAP_PROJECTION\">\"UTM\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PROJECTION_PARAMETERS.ORIENTATION\">\"NORTH_UP\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PROJECTION_PARAMETERS.RESAMPLING_OPTION\">\"CUBIC_CONVOLUTION\"</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.PROJECTION_PARAMETERS.UTM_ZONE\">10</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_1\">-62.21885</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_10\">0.10000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_11\">0.10000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_2\">-63.71286</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_3\">-58.71086</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_4\">-49.50830</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_5\">-30.29661</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_6\">-7.53449</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_7\">-2.53953</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_8\">-56.02977</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_ADD_BAND_9\">-11.84060</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_1\">1.2444E-02</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_10\">3.3420E-04</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_11\">3.3420E-04</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_2\">1.2743E-02</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_3\">1.1742E-02</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_4\">9.9017E-03</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_5\">6.0593E-03</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_6\">1.5069E-03</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_7\">5.0791E-04</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_8\">1.1206E-02</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.RADIANCE_MULT_BAND_9\">2.3681E-03</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_ADD_BAND_1\">-0.100000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_ADD_BAND_2\">-0.100000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_ADD_BAND_3\">-0.100000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_ADD_BAND_4\">-0.100000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_ADD_BAND_5\">-0.100000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_ADD_BAND_6\">-0.100000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_ADD_BAND_7\">-0.100000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_ADD_BAND_8\">-0.100000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_ADD_BAND_9\">-0.100000</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_MULT_BAND_1\">2.0000E-05</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_MULT_BAND_2\">2.0000E-05</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_MULT_BAND_3\">2.0000E-05</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_MULT_BAND_4\">2.0000E-05</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_MULT_BAND_5\">2.0000E-05</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_MULT_BAND_6\">2.0000E-05</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_MULT_BAND_7\">2.0000E-05</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_MULT_BAND_8\">2.0000E-05</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.RADIOMETRIC_RESCALING.REFLECTANCE_MULT_BAND_9\">2.0000E-05</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.TIRS_THERMAL_CONSTANTS.K1_CONSTANT_BAND_10\">774.8853</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.TIRS_THERMAL_CONSTANTS.K1_CONSTANT_BAND_11\">480.8883</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.TIRS_THERMAL_CONSTANTS.K2_CONSTANT_BAND_10\">1321.0789</MDI>\r\n",
" <MDI key=\"L1_METADATA_FILE.TIRS_THERMAL_CONSTANTS.K2_CONSTANT_BAND_11\">1201.1442</MDI>\r\n",
" </Metadata>\r\n",
" <VRTRasterBand dataType=\"UInt16\" band=\"1\">\r\n",
" <ColorInterp>Gray</ColorInterp>\r\n",
" <SimpleSource>\r\n",
" <SourceFilename relativeToVRT=\"0\">/vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_B1.TIF</SourceFilename>\r\n",
" <SourceBand>1</SourceBand>\r\n",
" <SourceProperties RasterXSize=\"7861\" RasterYSize=\"7971\" DataType=\"UInt16\" BlockXSize=\"512\" BlockYSize=\"512\" />\r\n",
" <SrcRect xOff=\"0\" yOff=\"0\" xSize=\"7861\" ySize=\"7971\" />\r\n",
" <DstRect xOff=\"0\" yOff=\"0\" xSize=\"7861\" ySize=\"7971\" />\r\n",
" </SimpleSource>\r\n",
" </VRTRasterBand>\r\n",
"</VRTDataset>\r\n"
]
}
],
"source": [
"# NOTE: key is /vsicurl/ pointer in <SimpleSource> tag\n",
"!cat {gdalvrt}"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Driver: VRT/Virtual Raster\n",
"Files: LC08_L1TP_047027_20180419_20180420_01_RT_B1_gdal.vrt\n",
" /vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_B1.TIF\n",
"Size is 7861, 7971\n",
"Coordinate System is:\n",
"PROJCS[\"WGS 84 / UTM zone 10N\",\n",
" GEOGCS[\"WGS 84\",\n",
" DATUM[\"WGS_1984\",\n",
" SPHEROID[\"WGS 84\",6378137,298.257223563,\n",
" AUTHORITY[\"EPSG\",\"7030\"]],\n",
" AUTHORITY[\"EPSG\",\"6326\"]],\n",
" PRIMEM[\"Greenwich\",0,\n",
" AUTHORITY[\"EPSG\",\"8901\"]],\n",
" UNIT[\"degree\",0.0174532925199433,\n",
" AUTHORITY[\"EPSG\",\"9122\"]],\n",
" AUTHORITY[\"EPSG\",\"4326\"]],\n",
" PROJECTION[\"Transverse_Mercator\"],\n",
" PARAMETER[\"latitude_of_origin\",0],\n",
" PARAMETER[\"central_meridian\",-123],\n",
" PARAMETER[\"scale_factor\",0.9996],\n",
" PARAMETER[\"false_easting\",500000],\n",
" PARAMETER[\"false_northing\",0],\n",
" UNIT[\"metre\",1,\n",
" AUTHORITY[\"EPSG\",\"9001\"]],\n",
" AXIS[\"Easting\",EAST],\n",
" AXIS[\"Northing\",NORTH],\n",
" AUTHORITY[\"EPSG\",\"32610\"]]\n",
"Origin = (352185.000000000000000,5374215.000000000000000)\n",
"Pixel Size = (30.000000000000000,-30.000000000000000)\n",
"Metadata:\n",
" AREA_OR_POINT=Point\n",
"Corner Coordinates:\n",
"Upper Left ( 352185.000, 5374215.000) (125d 0' 4.17\"W, 48d30'13.14\"N)\n",
"Lower Left ( 352185.000, 5135085.000) (124d55'16.45\"W, 46d21'11.51\"N)\n",
"Upper Right ( 588015.000, 5374215.000) (121d48'29.47\"W, 48d30'53.56\"N)\n",
"Lower Right ( 588015.000, 5135085.000) (121d51'20.91\"W, 46d21'49.01\"N)\n",
"Center ( 470100.000, 5254650.000) (123d23'47.73\"W, 47d26'40.59\"N)\n",
"Band 1 Block=128x128 Type=UInt16, ColorInterp=Gray\n",
" Overviews: 2621x2657, 874x886, 292x296\n",
"CPU times: user 8.33 ms, sys: 16.1 ms, total: 24.4 ms\n",
"Wall time: 345 ms\n"
]
}
],
"source": [
"%%time\n",
"# Use the VRT to access the COG. faster due to caching?\n",
"!gdalinfo {gdalvrt}"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"gdallocationinfo -wgs84 LC08_L1TP_047027_20180419_20180420_01_RT_B1_gdal.vrt -122.335167 47.608013\n",
"Report:\n",
" Location: (6592P,3375L)\n",
" Band 1:\n",
" <LocationInfo><File>/vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_B1.TIF</File></LocationInfo>\n",
" Value: 10439\n"
]
}
],
"source": [
"# Do something other than get metadata\n",
"cmd = f'gdallocationinfo -wgs84 {gdalvrt} -122.335167 47.608013'\n",
"print(cmd)\n",
"!{cmd}"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\"blockxsize\": 128, \"blockysize\": 128, \"bounds\": [352185.0, 5135085.0, 588015.0, 5374215.0], \"colorinterp\": [\"grey\"], \"count\": 1, \"crs\": \"EPSG:32610\", \"descriptions\": [null], \"driver\": \"VRT\", \"dtype\": \"uint16\", \"height\": 7971, \"indexes\": [1], \"lnglat\": [-123.39659086399698, 47.444608553735556], \"mask_flags\": [[\"all_valid\"]], \"nodata\": null, \"res\": [30.0, 30.0], \"shape\": [7971, 7861], \"tiled\": true, \"transform\": [30.0, 0.0, 352185.0, 0.0, -30.0, 5374215.0, 0.0, 0.0, 1.0], \"units\": [null], \"width\": 7861}\n",
"CPU times: user 18.4 ms, sys: 44.6 ms, total: 63 ms\n",
"Wall time: 1.22 s\n"
]
}
],
"source": [
"%%time\n",
"# Seems that rasterio can READ, but NOT WRITE these VRTs:\n",
"!rio info {gdalvrt}"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"rio convert -f VRT /vsicurl/landsat-pds.s3.amazonaws.com/c1/L8/047/027/LC08_L1TP_047027_20180419_20180420_01_RT/LC08_L1TP_047027_20180419_20180420_01_RT_B1.TIF LC08_L1TP_047027_20180419_20180420_01_RT_B1_rio.vrt\n",
"Traceback (most recent call last):\n",
" File \"/Users/scott/miniconda3/envs/rasterio1/bin/rio\", line 11, in <module>\n",
" sys.exit(main_group())\n",
" File \"/Users/scott/miniconda3/envs/rasterio1/lib/python3.6/site-packages/click/core.py\", line 722, in __call__\n",
" return self.main(*args, **kwargs)\n",
" File \"/Users/scott/miniconda3/envs/rasterio1/lib/python3.6/site-packages/click/core.py\", line 697, in main\n",
" rv = self.invoke(ctx)\n",
" File \"/Users/scott/miniconda3/envs/rasterio1/lib/python3.6/site-packages/click/core.py\", line 1066, in invoke\n",
" return _process_result(sub_ctx.command.invoke(sub_ctx))\n",
" File \"/Users/scott/miniconda3/envs/rasterio1/lib/python3.6/site-packages/click/core.py\", line 895, in invoke\n",
" return ctx.invoke(self.callback, **ctx.params)\n",
" File \"/Users/scott/miniconda3/envs/rasterio1/lib/python3.6/site-packages/click/core.py\", line 535, in invoke\n",
" return callback(*args, **kwargs)\n",
" File \"/Users/scott/miniconda3/envs/rasterio1/lib/python3.6/site-packages/click/decorators.py\", line 17, in new_func\n",
" return f(get_current_context(), *args, **kwargs)\n",
" File \"/Users/scott/miniconda3/envs/rasterio1/lib/python3.6/site-packages/rasterio/rio/convert.py\", line 98, in convert\n",
" dst.write(result)\n",
" File \"rasterio/_io.pyx\", line 1278, in rasterio._io.DatasetWriterBase.write\n",
"OSError: Read or write failed\n",
"CPU times: user 348 ms, sys: 737 ms, total: 1.08 s\n",
"Wall time: 20 s\n"
]
}
],
"source": [
"%%time\n",
"# Try to save a local vrt with rasterio/rio\n",
"# NOTE: creates incomplete VRT... and eventually produces an error\n",
"riovrt = f'{id}_B{band}_rio.vrt'\n",
"cmd = f'rio convert -f VRT {url} {riovrt}'\n",
"print(cmd)\n",
"!{cmd}"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"ename": "OSError",
"evalue": "Read or write failed",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<timed exec>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n",
"\u001b[0;32mrasterio/_io.pyx\u001b[0m in \u001b[0;36mrasterio._io.DatasetWriterBase.write\u001b[0;34m()\u001b[0m\n",
"\u001b[0;31mOSError\u001b[0m: Read or write failed"
]
}
],
"source": [
"%%time\n",
"with rasterio.open(gdalvrt) as src:\n",
" profile = src.profile.copy()\n",
" profile.update(driver='VRT')\n",
" with rasterio.open('out.vrt', 'w', **profile) as dst:\n",
" dst.write(src.read())"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 38.5 ms, sys: 6.36 ms, total: 44.9 ms\n",
"Wall time: 1.61 s\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x106a58da0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%time\n",
"oview = 32\n",
"with rasterio.open(gdalvrt) as src:\n",
" thumbnail = src.read(1, out_shape=(1, int(src.height // oview), int(src.width // oview)))\n",
" \n",
"plt.imshow(thumbnail)\n",
"plt.title('Overview - Band 5 ({})'.format(thumbnail.shape))\n",
"plt.xlabel('Column #')\n",
"plt.ylabel('Row #')"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"ename": "ImportError",
"evalue": "cannot import name 'copy'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-15-3b3487048090>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m#https://github.com/mapbox/rasterio/pull/1041#issuecomment-308625948\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mrasterio\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mImportError\u001b[0m: cannot import name 'copy'"
]
}
],
"source": [
"# Seems that rasterio *should* be able to write VRTs:\n",
"\n",
"# \"from rasterio import copy\" approach described here doesn't seem to work \n",
"#https://github.com/mapbox/rasterio/pull/1041#issuecomment-308625948\n",
"\n",
"from rasterio import copy"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'AREA_OR_POINT': 'Point'}\n",
"{'driver': 'GTiff', 'dtype': 'uint16', 'nodata': None, 'width': 7861, 'height': 7971, 'count': 1, 'crs': CRS({'init': 'epsg:32610'}), 'transform': Affine(30.0, 0.0, 352185.0,\n",
" 0.0, -30.0, 5374215.0), 'blockxsize': 512, 'blockysize': 512, 'tiled': True, 'compress': 'deflate', 'interleave': 'band'}\n",
"CPU times: user 713 ms, sys: 606 ms, total: 1.32 s\n",
"Wall time: 27.2 s\n"
]
}
],
"source": [
"%%time\n",
"# This issue demonstrates operating on a WarpedVRT \n",
"# but then saving locally as Geotif:\n",
"#https://github.com/mapbox/rasterio/pull/1029\n",
"\n",
"# down in comments describes a non-intuitive way to save VRTs:\n",
"# NOTE: this does not generate an error, but does not save the pointer\n",
"# to the file on Cloud storage and therefore does not work.\n",
"from rasterio.warp import reproject\n",
"\n",
"with rasterio.open(url) as src:\n",
" print(src.tags())\n",
" print(src.profile)\n",
" profile = src.profile.copy()\n",
" profile.update(driver='VRT')\n",
" with rasterio.open('out.vrt', 'w', **profile) as dst:\n",
" for bidx in range(1, src.count + 1):\n",
" reproject(\n",
" rasterio.band(src, bidx),\n",
" rasterio.band(dst, bidx))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'AREA_OR_POINT': 'Point'}\n",
"{'driver': 'GTiff', 'dtype': 'uint16', 'nodata': None, 'width': 7861, 'height': 7971, 'count': 1, 'crs': CRS({'init': 'epsg:32610'}), 'transform': Affine(30.0, 0.0, 352185.0,\n",
" 0.0, -30.0, 5374215.0), 'blockxsize': 512, 'blockysize': 512, 'tiled': True, 'compress': 'deflate', 'interleave': 'band'}\n",
"CPU times: user 9.77 ms, sys: 6.85 ms, total: 16.6 ms\n",
"Wall time: 167 ms\n"
]
}
],
"source": [
"%%time\n",
"# Yet another approach to saving a VRT, which does seem to work!\n",
"#http://rasterio.readthedocs.io/en/latest/topics/virtual-warping.html\n",
"\n",
"from rasterio import shutil as rio_shutil\n",
"from rasterio.vrt import WarpedVRT\n",
"\n",
"# NOTE: just try to save a VRT without doing any coordinate transformation\n",
"\n",
"# Dump the aligned data into a new file. A VRT representing\n",
"# this transformation can also be produced by switching\n",
"# to the VRT driver.\n",
"with rasterio.open(url) as src:\n",
" print(src.tags())\n",
" print(src.profile)\n",
" \n",
" with WarpedVRT(src) as vrt: \n",
" outfile = riovrt\n",
" rio_shutil.copy(vrt, outfile, driver='VRT')"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"VRT saved by gdal_translate:\n",
"------------------\n",
"{'AREA_OR_POINT': 'Point'}\n",
"{'driver': 'VRT', 'dtype': 'uint16', 'nodata': None, 'width': 7861, 'height': 7971, 'count': 1, 'crs': CRS({'init': 'epsg:32610'}), 'transform': Affine(30.0, 0.0, 352185.0,\n",
" 0.0, -30.0, 5374215.0), 'blockxsize': 128, 'blockysize': 128, 'tiled': True}\n",
"VRT saved by rasterio:\n",
"------------------\n",
"{}\n",
"{'driver': 'VRT', 'dtype': 'uint16', 'nodata': None, 'width': 7861, 'height': 7971, 'count': 1, 'crs': CRS({'init': 'epsg:32610'}), 'transform': Affine(30.000000000000004, 0.0, 352185.0,\n",
" 0.0, -30.000000000000004, 5374215.0), 'blockxsize': 512, 'blockysize': 128, 'tiled': True}\n"
]
}
],
"source": [
"# NOTE: VRT from rasterio is not quite the same as the one produced by gdal_translate:\n",
"print('VRT saved by gdal_translate:')\n",
"print('------------------')\n",
"with rasterio.open(gdalvrt) as src:\n",
" print(src.tags())\n",
" print(src.profile)\n",
" \n",
"print('VRT saved by rasterio:')\n",
"print('------------------')\n",
"with rasterio.open(riovrt) as src:\n",
" print(src.tags())\n",
" print(src.profile)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment