Skip to content

Instantly share code, notes, and snippets.

@thareUSGS
Last active June 24, 2020 23:05
Show Gist options
  • Save thareUSGS/fdcccac4e78c52c64d611973663a34ad to your computer and use it in GitHub Desktop.
Save thareUSGS/fdcccac4e78c52c64d611973663a34ad to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# GDAL Format Conversions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Requirements:\n",
"> conda install -c conda-forge gdal=3 jupyter matplotlib tuiview\n",
"\n",
"**Data for lesson**\n",
"\n",
"CTX Image: https://astrogeology.usgs.gov/search/map/Mars/Mars2020/landing_site/J03_045994_1986_J03_046060_1986_20m_DTM\n",
"\n",
"This file is in GeoTIFF format with optional ISIS3 and PDS3 labels available for download. Copy into a \"ctx/\" directory below this notebook.\n",
"\n",
"files:\n",
"\n",
"* J03_045994_1986_J03_046060_1986_20m_DTM.tif\n",
"* J03_045994_1986_J03_046060_1986_20m_DTM.lbl\n",
"* J03_045994_1986_J03_046060_1986_20m_DTM_pds3.lbl\n",
"\n",
"---\n",
"\n",
"Note: \n",
"* Using **!** allows one to run a routine outside of the notebook in the terminal\n",
"* $variable, sends the variable's value to the terminal (command-line)\n",
"* \"//\" for path works in Linux (Mac) and Windows\n",
"* to hide any display errors from command-line you can use \">/dev/null 2>&1\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### gathering image information from GDAL"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Driver: GTiff/GeoTIFF\n",
"Files: ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif\n",
" ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif.aux.xml\n",
"Size is 2093, 5235\n",
"Coordinate System is:\n",
"PROJCRS[\"Equirectangular Mars\",\n",
" BASEGEOGCRS[\"GCS_Mars\",\n",
" DATUM[\"D_Mars\",\n",
" ELLIPSOID[\"Mars_localRadius\",3396190,0,\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]]],\n",
" PRIMEM[\"Reference_Meridian\",0,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433,\n",
" ID[\"EPSG\",9122]]]],\n",
" CONVERSION[\"Equidistant Cylindrical\",\n",
" METHOD[\"Equidistant Cylindrical\",\n",
" ID[\"EPSG\",1028]],\n",
" PARAMETER[\"Latitude of 1st standard parallel\",0,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433],\n",
" ID[\"EPSG\",8823]],\n",
" PARAMETER[\"Longitude of natural origin\",180,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433],\n",
" ID[\"EPSG\",8802]],\n",
" PARAMETER[\"False easting\",0,\n",
" LENGTHUNIT[\"metre\",1],\n",
" ID[\"EPSG\",8806]],\n",
" PARAMETER[\"False northing\",0,\n",
" LENGTHUNIT[\"metre\",1],\n",
" ID[\"EPSG\",8807]]],\n",
" CS[Cartesian,2],\n",
" AXIS[\"easting\",east,\n",
" ORDER[1],\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]],\n",
" AXIS[\"northing\",north,\n",
" ORDER[2],\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]]]\n",
"Data axis to CRS axis mapping: 1,2\n",
"Origin = (-6100387.894499500282109,1145171.166843499988317)\n",
"Pixel Size = (20.201297749849001,-20.201297749849001)\n",
"Metadata:\n",
" AREA_OR_POINT=Area\n",
"Image Structure Metadata:\n",
" INTERLEAVE=BAND\n",
"Corner Coordinates:\n",
"Upper Left (-6100387.894, 1145171.167) ( 77d 4'57.96\"E, 19d19'11.03\"N)\n",
"Lower Left (-6100387.894, 1039417.373) ( 77d 4'57.96\"E, 17d32' 8.16\"N)\n",
"Upper Right (-6058106.578, 1145171.167) ( 77d47'45.88\"E, 19d19'11.03\"N)\n",
"Lower Right (-6058106.578, 1039417.373) ( 77d47'45.88\"E, 17d32' 8.16\"N)\n",
"Center (-6079247.236, 1092294.270) ( 77d26'21.92\"E, 18d25'39.59\"N)\n",
"Band 1 Block=2093x1 Type=Float32, ColorInterp=Gray\n",
" Min=-3075.834 Max=-1371.845 \n",
" Minimum=-3075.834, Maximum=-1371.845, Mean=-2207.017, StdDev=352.174\n",
" NoData Value=-3.40282265508890445e+38\n",
" Metadata:\n",
" STATISTICS_MAXIMUM=-1371.8452148438\n",
" STATISTICS_MEAN=-2207.017430716\n",
" STATISTICS_MINIMUM=-3075.8342285156\n",
" STATISTICS_STDDEV=352.17409320039\n",
" STATISTICS_VALID_PERCENT=66.37\n"
]
}
],
"source": [
"# command-line\n",
"# gdalinfo ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif\n",
"\n",
"\n",
"# Data for lesson\n",
"# CTX Image: https://astrogeology.usgs.gov/search/map/Mars/Mars2020/landing_site/J03_045994_1986_J03_046060_1986_20m_DTM\n",
"# This file is in GeoTIFF format with optional ISIS3 and PDS3 labels available for download.\n",
"ctx = \"ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif\"\n",
"ctx_isis3 = \"ctx//J03_045994_1986_J03_046060_1986_20m_DTM.lbl\"\n",
"ctx_pds3 = \"ctx//J03_045994_1986_J03_046060_1986_20m_DTM_pds3.lbl\"\n",
"\n",
"# try all three files, one at a time\n",
"!gdalinfo $ctx\n",
"#!gdalinfo $ctx_isis3\n",
"#!gdalinfo $ctx_pds3"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Driver: ISIS3/USGS Astrogeology ISIS cube (Version 3)\n",
"Files: ctx//J03_045994_1986_J03_046060_1986_20m_DTM.lbl\n",
" ctx/J03_045994_1986_J03_046060_1986_20m_DTM.tif\n",
"Size is 2093, 5235\n",
"Coordinate System is:\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"GDAL: GDALOpen(ctx/J03_045994_1986_J03_046060_1986_20m_DTM.tif, this=000001E0D19FC000) succeeds as GTiff.\n",
"GDAL: GDALClose(ctx/J03_045994_1986_J03_046060_1986_20m_DTM.tif, this=000001E0D19FC000)\n",
"GDALRaw: RawRasterBand(000001E0CFB96E80,1,000001E0D179E0A0,\n",
" Off=42551,PixOff=4,LineOff=8372,Float32,1)\n",
"GDAL: GDALOpen(ctx//J03_045994_1986_J03_046060_1986_20m_DTM.lbl, this=000001E0CFB96E80) succeeds as ISIS3.\n",
"GDAL: GDALDefaultOverviews::OverviewScan()\n",
"GDAL: GDALClose(ctx//J03_045994_1986_J03_046060_1986_20m_DTM.lbl, this=000001E0CFB96E80)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"PROJCRS[\"Equirectangular Mars\",\n",
" BASEGEOGCRS[\"GCS_Mars\",\n",
" DATUM[\"D_Mars\",\n",
" ELLIPSOID[\"Mars_localRadius\",3396190,0,\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]]],\n",
" PRIMEM[\"Reference_Meridian\",0,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433,\n",
" ID[\"EPSG\",9122]]]],\n",
" CONVERSION[\"unnamed\",\n",
" METHOD[\"Equidistant Cylindrical\",\n",
" ID[\"EPSG\",1028]],\n",
" PARAMETER[\"Latitude of 1st standard parallel\",0,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433],\n",
" ID[\"EPSG\",8823]],\n",
" PARAMETER[\"Longitude of natural origin\",180,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433],\n",
" ID[\"EPSG\",8802]],\n",
" PARAMETER[\"False easting\",0,\n",
" LENGTHUNIT[\"metre\",1],\n",
" ID[\"EPSG\",8806]],\n",
" PARAMETER[\"False northing\",0,\n",
" LENGTHUNIT[\"metre\",1],\n",
" ID[\"EPSG\",8807]]],\n",
" CS[Cartesian,2],\n",
" AXIS[\"easting\",east,\n",
" ORDER[1],\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]],\n",
" AXIS[\"northing\",north,\n",
" ORDER[2],\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]]]\n",
"Data axis to CRS axis mapping: 1,2\n",
"Origin = (-6100387.894499500282109,1145171.166843499988317)\n",
"Pixel Size = (20.201297749849001,-20.201297749849001)\n",
"Corner Coordinates:\n",
"Upper Left (-6100387.894, 1145171.167) ( 77d 4'57.96\"E, 19d19'11.03\"N)\n",
"Lower Left (-6100387.894, 1039417.373) ( 77d 4'57.96\"E, 17d32' 8.16\"N)\n",
"Upper Right (-6058106.578, 1145171.167) ( 77d47'45.88\"E, 19d19'11.03\"N)\n",
"Lower Right (-6058106.578, 1039417.373) ( 77d47'45.88\"E, 17d32' 8.16\"N)\n",
"Center (-6079247.236, 1092294.270) ( 77d26'21.92\"E, 18d25'39.59\"N)\n",
"Band 1 Block=2093x1 Type=Float32, ColorInterp=Undefined\n",
" NoData Value=-3.40282265508890445e+38\n",
" Mask Flags: \n"
]
}
],
"source": [
"# gdalinfo with debug mode on\n",
"\n",
"# command-line\n",
"# gdalinfo \"ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif\"\n",
"\n",
"!gdalinfo --debug on $ctx_isis3"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Driver: GTiff/GeoTIFF\n",
"Files: ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif\n",
" ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif.aux.xml\n",
"Size is 2093, 5235\n",
"Coordinate System is:\n",
"PROJCRS[\"Equirectangular Mars\",\n",
" BASEGEOGCRS[\"GCS_Mars\",\n",
" DATUM[\"D_Mars\",\n",
" ELLIPSOID[\"Mars_localRadius\",3396190,0,\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]]],\n",
" PRIMEM[\"Reference_Meridian\",0,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433,\n",
" ID[\"EPSG\",9122]]]],\n",
" CONVERSION[\"Equidistant Cylindrical\",\n",
" METHOD[\"Equidistant Cylindrical\",\n",
" ID[\"EPSG\",1028]],\n",
" PARAMETER[\"Latitude of 1st standard parallel\",0,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433],\n",
" ID[\"EPSG\",8823]],\n",
" PARAMETER[\"Longitude of natural origin\",180,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433],\n",
" ID[\"EPSG\",8802]],\n",
" PARAMETER[\"False easting\",0,\n",
" LENGTHUNIT[\"metre\",1],\n",
" ID[\"EPSG\",8806]],\n",
" PARAMETER[\"False northing\",0,\n",
" LENGTHUNIT[\"metre\",1],\n",
" ID[\"EPSG\",8807]]],\n",
" CS[Cartesian,2],\n",
" AXIS[\"easting\",east,\n",
" ORDER[1],\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]],\n",
" AXIS[\"northing\",north,\n",
" ORDER[2],\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]]]\n",
"Data axis to CRS axis mapping: 1,2\n",
"Origin = (-6100387.894499500282109,1145171.166843499988317)\n",
"Pixel Size = (20.201297749849001,-20.201297749849001)\n",
"Metadata:\n",
" AREA_OR_POINT=Area\n",
"Image Structure Metadata:\n",
" INTERLEAVE=BAND\n",
"Corner Coordinates:\n",
"Upper Left (-6100387.894, 1145171.167) ( 77d 4'57.96\"E, 19d19'11.03\"N)\n",
"Lower Left (-6100387.894, 1039417.373) ( 77d 4'57.96\"E, 17d32' 8.16\"N)\n",
"Upper Right (-6058106.578, 1145171.167) ( 77d47'45.88\"E, 19d19'11.03\"N)\n",
"Lower Right (-6058106.578, 1039417.373) ( 77d47'45.88\"E, 17d32' 8.16\"N)\n",
"Center (-6079247.236, 1092294.270) ( 77d26'21.92\"E, 18d25'39.59\"N)\n",
"Band 1 Block=2093x1 Type=Float32, ColorInterp=Gray\n",
" Min=-3075.834 Max=-1371.845 \n",
" Minimum=-3075.834, Maximum=-1371.845, Mean=-2207.017, StdDev=352.174\n",
" 256 buckets from -3072.27 to -1446.26:\n",
" 804 881 811 775 770 808 967 1302 1806 2031 2722 3323 4259 3705 2425 2432 2161 2131 2141 2214 2251 3069 3373 4001 4123 5813 6539 6196 6483 6156 5834 6029 7006 8611 5778 5945 6256 6320 7112 7310 8501 10785 11830 12695 13146 14882 19060 20923 21290 19728 20931 22732 21130 20424 19698 15935 14561 15735 18879 22654 30585 28228 29948 37155 39705 52973 82807 95500 79423 62525 74160 71170 63343 49485 44975 50931 52703 60255 62688 65805 59237 53709 50359 40536 38985 32591 32805 33983 35806 39034 36438 36690 34347 31400 31218 30278 29453 28983 28592 28061 30231 32806 32584 34069 33941 32110 28362 25031 24083 20945 20750 22170 24607 23106 22186 22365 23671 24937 26871 27664 27900 27404 25094 26618 27600 29161 32020 32646 33790 34364 38771 38905 34155 34142 34919 35760 35568 33535 35027 32560 30850 30822 32377 31657 32053 33873 35102 40835 47152 54646 56694 58474 67085 73921 70490 65188 68906 70642 69270 62956 59074 58613 56965 52243 49750 47110 43689 42299 43418 40617 38740 38463 38045 40322 39063 39284 37977 37991 37805 37608 41908 42468 41561 42012 42983 48009 42767 40270 40436 40305 41432 39490 34847 34719 33375 30776 29660 24657 23194 23952 23542 23612 25254 27008 28788 30473 34094 34413 33681 37741 38414 35353 32710 33081 31164 29330 29360 29528 27450 26822 27153 23702 23568 26648 25027 23109 19398 17989 19138 21208 18430 17140 15750 15097 13892 12884 12494 12594 14423 12648 10658 9776 10087 9866 11101 7469 6271 5766 5412 4824 2288 1957 1270 702 351 1693 \n",
" NoData Value=-3.40282265508890445e+38\n",
" Metadata:\n",
" STATISTICS_MAXIMUM=-1371.8452148438\n",
" STATISTICS_MEAN=-2207.017430716\n",
" STATISTICS_MINIMUM=-3075.8342285156\n",
" STATISTICS_STDDEV=352.17409320039\n",
" STATISTICS_VALID_PERCENT=66.37\n"
]
}
],
"source": [
"# gdalinfo min/max, stats, histogram\n",
"\n",
"# command-line\n",
"# gdalinfo -stats \"ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif\"\n",
"\n",
"# try all three files, one at a time\n",
"#!gdalinfo -mm $ctx\n",
"#!gdalinfo -stats $ctx\n",
"!gdalinfo -hist $ctx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the histogram, copy the 256 buckets (text) from above. Now in Excel (paste -> use Text Import Wizard) or Libre Calc paste those 256 values into columns or rows and create a bar chart. The elevation range is not correctly shown on the X axis, but this just allows one to quickly visual the distribution. In lesson 04, we will see plotting a more proper histogram within a notebook using matplotlib."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import Image\n",
"Image(\"ctx//ctx_histogram.png\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### List raster formats\n",
"\n",
"note the output shown here can changed based on GDAL build (or version)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Supported Formats:\n",
" VRT -raster- (rw+v): Virtual Raster\n",
" DERIVED -raster- (ro): Derived datasets using VRT pixel functions\n",
" GTiff -raster- (rw+vs): GeoTIFF\n",
" NITF -raster- (rw+vs): National Imagery Transmission Format\n",
" RPFTOC -raster- (rovs): Raster Product Format TOC format\n",
" ECRGTOC -raster- (rovs): ECRG TOC format\n",
" HFA -raster- (rw+v): Erdas Imagine Images (.img)\n",
" SAR_CEOS -raster- (rov): CEOS SAR Image\n",
" CEOS -raster- (rov): CEOS Image\n",
" JAXAPALSAR -raster- (rov): JAXA PALSAR Product Reader (Level 1.1/1.5)\n",
" GFF -raster- (rov): Ground-based SAR Applications Testbed File Format (.gff)\n",
" ELAS -raster- (rw+v): ELAS\n",
" AIG -raster- (rov): Arc/Info Binary Grid\n",
" AAIGrid -raster- (rwv): Arc/Info ASCII Grid\n",
" GRASSASCIIGrid -raster- (rov): GRASS ASCII Grid\n",
" SDTS -raster- (rov): SDTS Raster\n",
" DTED -raster- (rwv): DTED Elevation Raster\n",
" PNG -raster- (rwv): Portable Network Graphics\n",
" JPEG -raster- (rwv): JPEG JFIF\n",
" MEM -raster- (rw+): In Memory Raster\n",
" JDEM -raster- (rov): Japanese DEM (.mem)\n",
" GIF -raster- (rwv): Graphics Interchange Format (.gif)\n",
" BIGGIF -raster- (rov): Graphics Interchange Format (.gif)\n",
" ESAT -raster- (rov): Envisat Image Format\n",
" FITS -raster- (rw+): Flexible Image Transport System\n",
" BSB -raster- (rov): Maptech BSB Nautical Charts\n",
" XPM -raster- (rwv): X11 PixMap Format\n",
" BMP -raster- (rw+v): MS Windows Device Independent Bitmap\n",
" DIMAP -raster- (rov): SPOT DIMAP\n",
" AirSAR -raster- (rov): AirSAR Polarimetric Image\n",
" RS2 -raster- (rovs): RadarSat 2 XML Product\n",
" SAFE -raster- (rov): Sentinel-1 SAR SAFE Product\n",
" PCIDSK -raster,vector- (rw+v): PCIDSK Database File\n",
" PCRaster -raster- (rw+): PCRaster Raster File\n",
" ILWIS -raster- (rw+v): ILWIS Raster Map\n",
" SGI -raster- (rw+v): SGI Image File Format 1.0\n",
" SRTMHGT -raster- (rwv): SRTMHGT File Format\n",
" Leveller -raster- (rw+v): Leveller heightfield\n",
" Terragen -raster- (rw+v): Terragen heightfield\n",
" GMT -raster- (rw): GMT NetCDF Grid Format\n",
" netCDF -raster,vector- (rw+s): Network Common Data Format\n",
" HDF4 -raster- (ros): Hierarchical Data Format Release 4\n",
" HDF4Image -raster- (rw+): HDF4 Dataset\n",
" ISIS3 -raster- (rw+v): USGS Astrogeology ISIS cube (Version 3)\n",
" ISIS2 -raster- (rw+v): USGS Astrogeology ISIS cube (Version 2)\n",
" PDS -raster- (rov): NASA Planetary Data System\n",
" PDS4 -raster,vector- (rw+vs): NASA Planetary Data System 4\n",
" VICAR -raster- (rov): MIPL VICAR file\n",
" TIL -raster- (rov): EarthWatch .TIL\n",
" ERS -raster- (rw+v): ERMapper .ers Labelled\n",
" JP2OpenJPEG -raster,vector- (rwv): JPEG-2000 driver based on OpenJPEG library\n",
" L1B -raster- (rovs): NOAA Polar Orbiter Level 1b Data Set\n",
" FIT -raster- (rwv): FIT Image\n",
" GRIB -raster- (rwv): GRIdded Binary (.grb, .grb2)\n",
" RMF -raster- (rw+v): Raster Matrix Format\n",
" WCS -raster- (rovs): OGC Web Coverage Service\n",
" WMS -raster- (rwvs): OGC Web Map Service\n",
" MSGN -raster- (rov): EUMETSAT Archive native (.nat)\n",
" RST -raster- (rw+v): Idrisi Raster A.1\n",
" INGR -raster- (rw+v): Intergraph Raster\n",
" GSAG -raster- (rwv): Golden Software ASCII Grid (.grd)\n",
" GSBG -raster- (rw+v): Golden Software Binary Grid (.grd)\n",
" GS7BG -raster- (rw+v): Golden Software 7 Binary Grid (.grd)\n",
" COSAR -raster- (rov): COSAR Annotated Binary Matrix (TerraSAR-X)\n",
" TSX -raster- (rov): TerraSAR-X Product\n",
" COASP -raster- (ro): DRDC COASP SAR Processor Raster\n",
" R -raster- (rwv): R Object Data Store\n",
" MAP -raster- (rov): OziExplorer .MAP\n",
" KMLSUPEROVERLAY -raster- (rwv): Kml Super Overlay\n",
" WEBP -raster- (rwv): WEBP\n",
" PDF -raster,vector- (rw+vs): Geospatial PDF\n",
" Rasterlite -raster- (rwvs): Rasterlite\n",
" MBTiles -raster,vector- (rw+v): MBTiles\n",
" PLMOSAIC -raster- (ro): Planet Labs Mosaics API\n",
" CALS -raster- (rwv): CALS (Type 1)\n",
" WMTS -raster- (rwv): OGC Web Map Tile Service\n",
" SENTINEL2 -raster- (rovs): Sentinel 2\n",
" MRF -raster- (rw+v): Meta Raster Format\n",
" TileDB -raster- (rw+vs): TileDB\n",
" PNM -raster- (rw+v): Portable Pixmap Format (netpbm)\n",
" DOQ1 -raster- (rov): USGS DOQ (Old Style)\n",
" DOQ2 -raster- (rov): USGS DOQ (New Style)\n",
" PAux -raster- (rw+v): PCI .aux Labelled\n",
" MFF -raster- (rw+v): Vexcel MFF Raster\n",
" MFF2 -raster- (rw+): Vexcel MFF2 (HKV) Raster\n",
" FujiBAS -raster- (rov): Fuji BAS Scanner Image\n",
" GSC -raster- (rov): GSC Geogrid\n",
" FAST -raster- (rov): EOSAT FAST Format\n",
" BT -raster- (rw+v): VTP .bt (Binary Terrain) 1.3 Format\n",
" LAN -raster- (rw+v): Erdas .LAN/.GIS\n",
" CPG -raster- (rov): Convair PolGASP\n",
" IDA -raster- (rw+v): Image Data and Analysis\n",
" NDF -raster- (rov): NLAPS Data Format\n",
" EIR -raster- (rov): Erdas Imagine Raw\n",
" DIPEx -raster- (rov): DIPEx\n",
" LCP -raster- (rwv): FARSITE v.4 Landscape File (.lcp)\n",
" GTX -raster- (rw+v): NOAA Vertical Datum .GTX\n",
" LOSLAS -raster- (rov): NADCON .los/.las Datum Grid Shift\n",
" NTv1 -raster- (rov): NTv1 Datum Grid Shift\n",
" NTv2 -raster- (rw+vs): NTv2 Datum Grid Shift\n",
" CTable2 -raster- (rw+v): CTable2 Datum Grid Shift\n",
" ACE2 -raster- (rov): ACE2\n",
" SNODAS -raster- (rov): Snow Data Assimilation System\n",
" KRO -raster- (rw+v): KOLOR Raw\n",
" ROI_PAC -raster- (rw+v): ROI_PAC raster\n",
" RRASTER -raster- (rw+v): R Raster\n",
" BYN -raster- (rw+v): Natural Resources Canada's Geoid\n",
" ARG -raster- (rwv): Azavea Raster Grid format\n",
" RIK -raster- (rov): Swedish Grid RIK (.rik)\n",
" USGSDEM -raster- (rwv): USGS Optional ASCII DEM (and CDED)\n",
" GXF -raster- (rov): GeoSoft Grid Exchange Format\n",
" KEA -raster- (rw+v): KEA Image Format (.kea)\n",
" BAG -raster- (rwv): Bathymetry Attributed Grid\n",
" HDF5 -raster- (rovs): Hierarchical Data Format Release 5\n",
" HDF5Image -raster- (rov): HDF5 Dataset\n",
" NWT_GRD -raster- (rw+v): Northwood Numeric Grid Format .grd/.tab\n",
" NWT_GRC -raster- (rov): Northwood Classified Grid Format .grc/.tab\n",
" ADRG -raster- (rw+vs): ARC Digitized Raster Graphics\n",
" SRP -raster- (rovs): Standard Raster Product (ASRP/USRP)\n",
" BLX -raster- (rwv): Magellan topo (.blx)\n",
" PostGISRaster -raster- (rws): PostGIS Raster driver\n",
" SAGA -raster- (rw+v): SAGA GIS Binary Grid (.sdat, .sg-grd-z)\n",
" IGNFHeightASCIIGrid -raster- (rov): IGN France height correction ASCII Grid\n",
" XYZ -raster- (rwv): ASCII Gridded XYZ\n",
" HF2 -raster- (rwv): HF2/HFZ heightfield raster\n",
" OZI -raster- (rov): OziExplorer Image File\n",
" CTG -raster- (rov): USGS LULC Composite Theme Grid\n",
" E00GRID -raster- (rov): Arc/Info Export E00 GRID\n",
" ZMap -raster- (rwv): ZMap Plus Grid\n",
" NGSGEOID -raster- (rov): NOAA NGS Geoid Height Grids\n",
" IRIS -raster- (rov): IRIS data (.PPI, .CAPPi etc)\n",
" PRF -raster- (rov): Racurs PHOTOMOD PRF\n",
" RDA -raster- (ro): DigitalGlobe Raster Data Access driver\n",
" EEDAI -raster- (ros): Earth Engine Data API Image\n",
" DAAS -raster- (ro): Airbus DS Intelligence Data As A Service driver\n",
" SIGDEM -raster- (rwv): Scaled Integer Gridded DEM .sigdem\n",
" DB2ODBC -raster,vector- (rw+): IBM DB2 Spatial Database\n",
" GPKG -raster,vector- (rw+vs): GeoPackage\n",
" CAD -raster,vector- (rovs): AutoCAD Driver\n",
" PLSCENES -raster,vector- (ro): Planet Labs Scenes API\n",
" NGW -raster,vector- (rw+s): NextGIS Web\n",
" GenBin -raster- (rov): Generic Binary (.hdr Labelled)\n",
" ENVI -raster- (rw+v): ENVI .hdr Labelled\n",
" EHdr -raster- (rw+v): ESRI .hdr Labelled\n",
" ISCE -raster- (rw+v): ISCE raster\n",
" HTTP -raster,vector- (ro): HTTP Fetching Wrapper\n"
]
}
],
"source": [
"# command-line:\n",
"# gdalinfo --formats\n",
"\n",
"!gdal_translate --formats"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### List format details/options\n",
"\n",
"note the output shown here can change here based on version"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Format Details:\n",
" Short Name: GTiff\n",
" Long Name: GeoTIFF\n",
" Supports: Raster\n",
" Extensions: tif tiff\n",
" Mime Type: image/tiff\n",
" Help Topic: frmt_gtiff.html\n",
" Supports: Subdatasets\n",
" Supports: Open() - Open existing dataset.\n",
" Supports: Create() - Create writable dataset.\n",
" Supports: CreateCopy() - Create dataset by copying another.\n",
" Supports: Virtual IO - eg. /vsimem/\n",
" Creation Datatypes: Byte UInt16 Int16 UInt32 Int32 Float32 Float64 CInt16 CInt32 CFloat32 CFloat64\n",
"\n",
"<CreationOptionList>\n",
" <Option name=\"COMPRESS\" type=\"string-select\">\n",
" <Value>NONE</Value>\n",
" <Value>LZW</Value>\n",
" <Value>PACKBITS</Value>\n",
" <Value>JPEG</Value>\n",
" <Value>CCITTRLE</Value>\n",
" <Value>CCITTFAX3</Value>\n",
" <Value>CCITTFAX4</Value>\n",
" <Value>DEFLATE</Value>\n",
" <Value>LZMA</Value>\n",
" <Value>ZSTD</Value>\n",
" </Option>\n",
" <Option name=\"PREDICTOR\" type=\"int\" description=\"Predictor Type (1=default, 2=horizontal differencing, 3=floating point prediction)\" />\n",
" <Option name=\"DISCARD_LSB\" type=\"string\" description=\"Number of least-significant bits to set to clear as a single value or comma-separated list of values for per-band values\" />\n",
" <Option name=\"JPEG_QUALITY\" type=\"int\" description=\"JPEG quality 1-100\" default=\"75\" />\n",
" <Option name=\"JPEGTABLESMODE\" type=\"int\" description=\"Content of JPEGTABLES tag. 0=no JPEGTABLES tag, 1=Quantization tables only, 2=Huffman tables only, 3=Both\" default=\"1\" />\n",
" <Option name=\"ZLEVEL\" type=\"int\" description=\"DEFLATE compression level 1-9\" default=\"6\" />\n",
" <Option name=\"LZMA_PRESET\" type=\"int\" description=\"LZMA compression level 0(fast)-9(slow)\" default=\"6\" />\n",
" <Option name=\"ZSTD_LEVEL\" type=\"int\" description=\"ZSTD compression level 1(fast)-22(slow)\" default=\"9\" />\n",
" <Option name=\"NUM_THREADS\" type=\"string\" description=\"Number of worker threads for compression. Can be set to ALL_CPUS\" default=\"1\" />\n",
" <Option name=\"NBITS\" type=\"int\" description=\"BITS for sub-byte files (1-7), sub-uint16 (9-15), sub-uint32 (17-31), or float32 (16)\" />\n",
" <Option name=\"INTERLEAVE\" type=\"string-select\" default=\"PIXEL\">\n",
" <Value>BAND</Value>\n",
" <Value>PIXEL</Value>\n",
" </Option>\n",
" <Option name=\"TILED\" type=\"boolean\" description=\"Switch to tiled format\" />\n",
" <Option name=\"TFW\" type=\"boolean\" description=\"Write out world file\" />\n",
" <Option name=\"RPB\" type=\"boolean\" description=\"Write out .RPB (RPC) file\" />\n",
" <Option name=\"RPCTXT\" type=\"boolean\" description=\"Write out _RPC.TXT file\" />\n",
" <Option name=\"BLOCKXSIZE\" type=\"int\" description=\"Tile Width\" />\n",
" <Option name=\"BLOCKYSIZE\" type=\"int\" description=\"Tile/Strip Height\" />\n",
" <Option name=\"PHOTOMETRIC\" type=\"string-select\">\n",
" <Value>MINISBLACK</Value>\n",
" <Value>MINISWHITE</Value>\n",
" <Value>PALETTE</Value>\n",
" <Value>RGB</Value>\n",
" <Value>CMYK</Value>\n",
" <Value>YCBCR</Value>\n",
" <Value>CIELAB</Value>\n",
" <Value>ICCLAB</Value>\n",
" <Value>ITULAB</Value>\n",
" </Option>\n",
" <Option name=\"SPARSE_OK\" type=\"boolean\" description=\"Should empty blocks be omitted on disk?\" default=\"FALSE\" />\n",
" <Option name=\"ALPHA\" type=\"string-select\" description=\"Mark first extrasample as being alpha\">\n",
" <Value>NON-PREMULTIPLIED</Value>\n",
" <Value>PREMULTIPLIED</Value>\n",
" <Value>UNSPECIFIED</Value>\n",
" <Value aliasOf=\"NON-PREMULTIPLIED\">YES</Value>\n",
" <Value aliasOf=\"UNSPECIFIED\">NO</Value>\n",
" </Option>\n",
" <Option name=\"PROFILE\" type=\"string-select\" default=\"GDALGeoTIFF\">\n",
" <Value>GDALGeoTIFF</Value>\n",
" <Value>GeoTIFF</Value>\n",
" <Value>BASELINE</Value>\n",
" </Option>\n",
" <Option name=\"PIXELTYPE\" type=\"string-select\">\n",
" <Value>DEFAULT</Value>\n",
" <Value>SIGNEDBYTE</Value>\n",
" </Option>\n",
" <Option name=\"BIGTIFF\" type=\"string-select\" description=\"Force creation of BigTIFF file\">\n",
" <Value>YES</Value>\n",
" <Value>NO</Value>\n",
" <Value>IF_NEEDED</Value>\n",
" <Value>IF_SAFER</Value>\n",
" </Option>\n",
" <Option name=\"ENDIANNESS\" type=\"string-select\" default=\"NATIVE\" description=\"Force endianness of created file. For DEBUG purpose mostly\">\n",
" <Value>NATIVE</Value>\n",
" <Value>INVERTED</Value>\n",
" <Value>LITTLE</Value>\n",
" <Value>BIG</Value>\n",
" </Option>\n",
" <Option name=\"COPY_SRC_OVERVIEWS\" type=\"boolean\" default=\"NO\" description=\"Force copy of overviews of source dataset (CreateCopy())\" />\n",
" <Option name=\"SOURCE_ICC_PROFILE\" type=\"string\" description=\"ICC profile\" />\n",
" <Option name=\"SOURCE_PRIMARIES_RED\" type=\"string\" description=\"x,y,1.0 (xyY) red chromaticity\" />\n",
" <Option name=\"SOURCE_PRIMARIES_GREEN\" type=\"string\" description=\"x,y,1.0 (xyY) green chromaticity\" />\n",
" <Option name=\"SOURCE_PRIMARIES_BLUE\" type=\"string\" description=\"x,y,1.0 (xyY) blue chromaticity\" />\n",
" <Option name=\"SOURCE_WHITEPOINT\" type=\"string\" description=\"x,y,1.0 (xyY) whitepoint\" />\n",
" <Option name=\"TIFFTAG_TRANSFERFUNCTION_RED\" type=\"string\" description=\"Transfer function for red\" />\n",
" <Option name=\"TIFFTAG_TRANSFERFUNCTION_GREEN\" type=\"string\" description=\"Transfer function for green\" />\n",
" <Option name=\"TIFFTAG_TRANSFERFUNCTION_BLUE\" type=\"string\" description=\"Transfer function for blue\" />\n",
" <Option name=\"TIFFTAG_TRANSFERRANGE_BLACK\" type=\"string\" description=\"Transfer range for black\" />\n",
" <Option name=\"TIFFTAG_TRANSFERRANGE_WHITE\" type=\"string\" description=\"Transfer range for white\" />\n",
" <Option name=\"STREAMABLE_OUTPUT\" type=\"boolean\" default=\"NO\" description=\"Enforce a mode compatible with a streamable file\" />\n",
" <Option name=\"GEOTIFF_KEYS_FLAVOR\" type=\"string-select\" default=\"STANDARD\" description=\"Which flavor of GeoTIFF keys must be used\">\n",
" <Value>STANDARD</Value>\n",
" <Value>ESRI_PE</Value>\n",
" </Option>\n",
"</CreationOptionList>\n",
"\n",
"<OpenOptionList>\n",
" <Option name=\"NUM_THREADS\" type=\"string\" description=\"Number of worker threads for compression. Can be set to ALL_CPUS\" default=\"1\" />\n",
" <Option name=\"GEOTIFF_KEYS_FLAVOR\" type=\"string-select\" default=\"STANDARD\" description=\"Which flavor of GeoTIFF keys must be used (for writing)\">\n",
" <Value>STANDARD</Value>\n",
" <Value>ESRI_PE</Value>\n",
" </Option>\n",
" <Option name=\"GEOREF_SOURCES\" type=\"string\" description=\"Comma separated list made with values INTERNAL/TABFILE/WORLDFILE/PAM/NONE that describe the priority order for georeferencing\" default=\"PAM,INTERNAL,TABFILE,WORLDFILE\" />\n",
" <Option name=\"SPARSE_OK\" type=\"boolean\" description=\"Should empty blocks be omitted on disk?\" default=\"FALSE\" />\n",
"</OpenOptionList>\n",
"\n",
" Other metadata items:\n",
" LIBTIFF=LIBTIFF, Version 4.1.0\n",
"Copyright (c) 1988-1996 Sam Leffler\n",
"Copyright (c) 1991-1996 Silicon Graphics, Inc.\n"
]
}
],
"source": [
"# command-line:\n",
"# gdal_translate --format FITS\n",
"# gdal_translate --format PDS4\n",
"\n",
"!gdal_translate --format GTIFF"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Convert ISIS3 file to 32bit floating point GeoTIFF"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input file size is 2093, 5235\n",
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"out_GTIFF = \"ctx//out_J03_045994_1986_J03_046060_1986_20m_DTM.tif\"\n",
"\n",
"# command-line:\n",
"# gdal_translate -of GTIFF ctx//out_GTIFF_J03_045994_1986_J03_046060_1986_20m_DTM_pds3.lbl ctx//out.tif\n",
"\n",
"!gdal_translate -of GTIFF $ctx_isis3 $out_GTIFF\n",
"\n",
"# GeoTIFF is the default so this is the same\n",
"#!gdal_translate $ctx_isis3 $out_GTIFF"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"!tuiview $out_GTIFF"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Convert CTX DEM to 8bit PNG "
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input file size is 2093, 5235\n",
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning 6: PNG driver doesn't support data type Float32. Only eight bit (Byte) and sixteen bit (UInt16) bands supported. Defaulting to Byte\n",
"\n"
]
}
],
"source": [
"out_PNG = \"ctx//out_J03_045994_1986_J03_046060_1986_20m_DTM.png\"\n",
"\n",
"!gdal_translate -of PNG $ctx_pds3 $out_PNG"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"!tuiview $out_PNG"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**that's bad**, defaulting to Byte, will simply truncate(!) values outside the 8bit range.\n",
"\n",
"It is better to explicitly the define output type (Byte = 8bit, 0-255 range), build stats, and then try auto-scale."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Driver: GTiff/GeoTIFF\n",
"Files: ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif\n",
" ctx//J03_045994_1986_J03_046060_1986_20m_DTM.tif.aux.xml\n",
"Size is 2093, 5235\n",
"Coordinate System is:\n",
"PROJCRS[\"Equirectangular Mars\",\n",
" BASEGEOGCRS[\"GCS_Mars\",\n",
" DATUM[\"D_Mars\",\n",
" ELLIPSOID[\"Mars_localRadius\",3396190,0,\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]]],\n",
" PRIMEM[\"Reference_Meridian\",0,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433,\n",
" ID[\"EPSG\",9122]]]],\n",
" CONVERSION[\"Equidistant Cylindrical\",\n",
" METHOD[\"Equidistant Cylindrical\",\n",
" ID[\"EPSG\",1028]],\n",
" PARAMETER[\"Latitude of 1st standard parallel\",0,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433],\n",
" ID[\"EPSG\",8823]],\n",
" PARAMETER[\"Longitude of natural origin\",180,\n",
" ANGLEUNIT[\"degree\",0.0174532925199433],\n",
" ID[\"EPSG\",8802]],\n",
" PARAMETER[\"False easting\",0,\n",
" LENGTHUNIT[\"metre\",1],\n",
" ID[\"EPSG\",8806]],\n",
" PARAMETER[\"False northing\",0,\n",
" LENGTHUNIT[\"metre\",1],\n",
" ID[\"EPSG\",8807]]],\n",
" CS[Cartesian,2],\n",
" AXIS[\"easting\",east,\n",
" ORDER[1],\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]],\n",
" AXIS[\"northing\",north,\n",
" ORDER[2],\n",
" LENGTHUNIT[\"metre\",1,\n",
" ID[\"EPSG\",9001]]]]\n",
"Data axis to CRS axis mapping: 1,2\n",
"Origin = (-6100387.894499500282109,1145171.166843499988317)\n",
"Pixel Size = (20.201297749849001,-20.201297749849001)\n",
"Metadata:\n",
" AREA_OR_POINT=Area\n",
"Image Structure Metadata:\n",
" INTERLEAVE=BAND\n",
"Corner Coordinates:\n",
"Upper Left (-6100387.894, 1145171.167) ( 77d 4'57.96\"E, 19d19'11.03\"N)\n",
"Lower Left (-6100387.894, 1039417.373) ( 77d 4'57.96\"E, 17d32' 8.16\"N)\n",
"Upper Right (-6058106.578, 1145171.167) ( 77d47'45.88\"E, 19d19'11.03\"N)\n",
"Lower Right (-6058106.578, 1039417.373) ( 77d47'45.88\"E, 17d32' 8.16\"N)\n",
"Center (-6079247.236, 1092294.270) ( 77d26'21.92\"E, 18d25'39.59\"N)\n",
"Band 1 Block=2093x1 Type=Float32, ColorInterp=Gray\n",
" Min=-3075.834 Max=-1371.845 \n",
" Minimum=-3075.834, Maximum=-1371.845, Mean=-2207.017, StdDev=352.174\n",
" NoData Value=-3.40282265508890445e+38\n",
" Metadata:\n",
" STATISTICS_MAXIMUM=-1371.8452148438\n",
" STATISTICS_MEAN=-2207.017430716\n",
" STATISTICS_MINIMUM=-3075.8342285156\n",
" STATISTICS_STDDEV=352.17409320039\n",
" STATISTICS_VALID_PERCENT=66.37\n"
]
}
],
"source": [
"# build stats first\n",
"!gdalinfo -stats $ctx\n",
"\n",
"# click \"...\" to expand text box"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input file size is 2093, 5235\n",
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"# now try to use \"-scale\" which should try to auto-scale the input range\n",
"# to the allowed 8bit (0 to 255) output range. This is a linear scaling.\n",
"!gdal_translate -of PNG -ot Byte -scale $ctx $out_PNG"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"# note here I am passing TuiView band 1, grayscale, and std dev stretch (just a helper)\n",
"!tuiview -b 1 -g -s $out_PNG"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input file size is 2093, 5235\n",
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"# It is even better to explicitly also define the output NoData value\n",
"!gdal_translate -of PNG -ot Byte -scale -a_nodata 0 $ctx $out_PNG"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input file size is 2093, 5235\n",
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"# Lastly, adding a manual scale can sometimes help if an auto-scale doesn't work\n",
"# STATISTICS_MAXIMUM=-1371.8452148438\n",
"# STATISTICS_MINIMUM=-3075.8342285156\n",
"!gdal_translate -of PNG -ot Byte -scale -3075.8342285156 -1371.8452148438 1 255 -a_nodata 0 $ctx $out_PNG"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"!tuiview -b 1 -g -s $out_PNG"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Resize image to a new resolution or force specific output size"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input file size is 2093, 5235\n",
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"# we can also set a new raster resolution during conversion\n",
"# using \"-tr\" target resolution (in unit of the map, here meters)\n",
"# using \"r\" resampling type, choices = nearest,bilinear,cubic,cubicspline,lanczos,average,mode\n",
"!gdal_translate -of GTIFF -r bilinear -tr 100 100 $ctx $out_GTIFF"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"!tuiview $ctx $out_GTIFF"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input file size is 2093, 5235\n",
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"# using outsize you can set the output pixe size (width, height) or percent\n",
"!gdal_translate -of GTIFF -r bilinear -outsize 10% 10% $ctx $out_GTIFF"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input file size is 2093, 5235\n",
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"#recommend setting one to zero (to maintain current aspect)\n",
"!gdal_translate -of GTIFF -r bilinear -outsize 0 512 $ctx $out_GTIFF"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"!tuiview $ctx $out_GTIFF"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## (optional section) GDAL elevation tools\n",
"\n",
"### hillshade"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"# GDAL elevation tools (hillshade)\n",
"\n",
"#!gdaldem\n",
"#!gdal_contour\n",
"\n",
"out_hillshade = \"ctx//out_J03_045994_1986_J03_046060_1986_20m_shade.png\"\n",
"\n",
"# -z ZFactor (default=1)]\n",
"# -az Azimuth (default=315)\n",
"# -alt Altitude (default=45)\n",
"!gdaldem hillshade -of png -z 2 -az 270 -alt 30 $ctx $out_hillshade"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"!tuiview $out_hillshade"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### colorize"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"# QGIS Generated Color Map Export File\n",
"# INTERPOLATION:INTERPOLATED\n",
"-3075.83,68,1,84,255,-3075.8342285156\n",
"-2639.61,70,44,123,255,-2639.61304101562\n",
"-2544.19,58,82,139,255,-2544.18965625\n",
"-2356.75,43,114,142,255,-2356.7508647461\n",
"-2164.2,32,144,141,255,-2164.20010620119\n",
"-2060.26,39,174,128,255,-2060.25677636721\n",
"-1929.05,93,201,98,255,-1929.04962231448\n",
"-1765.47,171,220,50,255,-1765.46667700199\n",
"-1450.23,253,231,37,255,-1450.2287094727\n",
"nv 0 0 0\n",
"\n"
]
}
],
"source": [
"# GDAL elevation tools (colorize)\n",
"\n",
"#!gdaldem\n",
"\n",
"# Tip: use QGIS to make a color-ramp (exact, using elevation range, or change to percent)\n",
"# (see presentation for symbology window). Note that gdaldem will only use the first\n",
"# 4 columns in the look-up table (start elevation, R, G, B)\n",
"#\n",
"# Note, you must comment out the top two lines using \"#\" and\n",
"# I like to add the next line at the end, which defines nodata value as black.\n",
"# nv 0 0 0\n",
"\n",
"out_colorize8bit = \"ctx//out_J03_045994_1986_J03_046060_1986_20m_colorize.png\"\n",
"\n",
"viridis_lut = \"ctx//viridis.lut\"\n",
"\n",
"#print to notebook\n",
"with open(viridis_lut, 'r') as f:\n",
" print(f.read())"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"#run to 8bit RGB PNG\n",
"!gdaldem color-relief -of PNG $ctx $viridis_lut $out_colorize8bit"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"!tuiview -r -n -b 1,2,3 $out_colorize8bit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### slope"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0...10...20...30...40...50...60...70...80...90...100 - done.\n",
"# green to red\n",
"0.0 0 255 0\n",
"40.0 255 0 0 \n",
"nv 0 0 0 \n",
"\n",
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"# GDAL elevation tools (slope)\n",
"\n",
"#!gdaldem\n",
"\n",
"out_slope = \"ctx//out_J03_045994_1986_J03_046060_1986_20m_slope.tif\"\n",
"out_slope8bit = \"ctx//out_J03_045994_1986_J03_046060_1986_20m_slope8bit.png\"\n",
"out_lut = \"ctx//slope.lut\"\n",
"\n",
"# slope (horne 3x3 method, default)\n",
"!gdaldem slope -of GTIFF $ctx $out_slope\n",
"\n",
"# check out simple color ramp, mapped from 0 to 50 degree slope\n",
"# print to notebook look-up table to notebook:\n",
"with open(out_lut, 'r') as f:\n",
" print(f.read())\n",
"\n",
"#run to 8bit RGB PNG using the look-up table\n",
"!gdaldem color-relief -of PNG $out_slope $out_lut $out_slope8bit"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"!tuiview $out_slope $out_slope8bit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### color merge\n",
"\n",
"uses Python script hsv_merge.py (can be slow, but good example for GDAL coding):\n",
"https://github.com/OSGeo/gdal/blob/master/gdal/swig/python/samples/hsv_merge.py\n",
"\n",
"for more info and for using NASA ASP to do the same see:\n",
"https://planetarygis.blogspot.com/2017/06/using-gdal-andor-nasa-asp-to-create.html"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"# We can merge the colorized elevation file with the hillshade.\n",
"\n",
"# command-line:\n",
"# python hsv_merge.py -of GTIFF colorize.tif hillshade.tif out.tif\n",
"\n",
"outColorShade = \"ctx//out_J03_045994_1986_J03_046060_1986_20m_colorShade.tif\"\n",
"\n",
"!python ctx//hsv_merge.py -of GTIFF $out_colorize8bit $out_hillshade $outColorShade"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"!tuiview -r -n -b 1,2,3 $outColorShade"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0...10...20...30...40...50...60...70...80...90...100 - done.\n"
]
}
],
"source": [
"# Now merge the colorized slope file with the hillshade. Any grayscale image, like\n",
"# a mosaic, can be used but it must be the exact same size as the colorized image.\n",
"# See lesson 03 for more on forcing the same size for different files.\n",
"\n",
"# command-line:\n",
"# python hsv_merge.py -of GTIFF colorize.tif hillshade.tif out.tif\n",
"\n",
"!python ctx//hsv_merge.py -of GTIFF $out_slope8bit $out_hillshade $outColorShade"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"!tuiview -r -n -b 1,2,3 $outColorShade"
]
}
],
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment