GDAL - mosaicking, warping, calculating, pansharpening¶
GDAL - Geospatial Data Abstration Library
Set up¶
Use - opengeo micromamba env.
Move to gdal-tools folder.
In [2]:
Copied!
cd /Users/abharathi/Documents/gis_data/gdal-tools/
cd /Users/abharathi/Documents/gis_data/gdal-tools/
/Users/abharathi/Documents/gis_data/gdal-tools
In [3]:
Copied!
ls
ls
1870_southern-india.jpg* landsat8/ 5d16a93f1cf0f6000579ad2c.tif london_1m_dsm/ batch.py* naip/ batch_parallel.py* precipitation.gpkg earth_at_night.jpg* prism/ earthquakes/ spatial_query.gpkg gdal_stuff.qgz srtm/ geonames/ worldcities.csv*
Talk to Cloud systems via streaming¶
In [1]:
Copied!
!gdalinfo /vsigs/spatialthoughts-public-data/viirs_ntl_2021_global.tif --config GS_NO_SIGN_REQUEST YES
!gdalinfo /vsigs/spatialthoughts-public-data/viirs_ntl_2021_global.tif --config GS_NO_SIGN_REQUEST YES
Driver: GTiff/GeoTIFF
Files: /vsigs/spatialthoughts-public-data/viirs_ntl_2021_global.tif
Size is 80152, 80196
Coordinate System is:
PROJCRS["WGS 84 / Pseudo-Mercator",
BASEGEOGCRS["WGS 84",
ENSEMBLE["World Geodetic System 1984 ensemble",
MEMBER["World Geodetic System 1984 (Transit)"],
MEMBER["World Geodetic System 1984 (G730)"],
MEMBER["World Geodetic System 1984 (G873)"],
MEMBER["World Geodetic System 1984 (G1150)"],
MEMBER["World Geodetic System 1984 (G1674)"],
MEMBER["World Geodetic System 1984 (G1762)"],
MEMBER["World Geodetic System 1984 (G2139)"],
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]],
ENSEMBLEACCURACY[2.0]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
ID["EPSG",4326]],
CONVERSION["Popular Visualisation Pseudo-Mercator",
METHOD["Popular Visualisation Pseudo Mercator",
ID["EPSG",1024]],
PARAMETER["Latitude of natural origin",0,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8801]],
PARAMETER["Longitude of natural origin",0,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8802]],
PARAMETER["False easting",0,
LENGTHUNIT["metre",1],
ID["EPSG",8806]],
PARAMETER["False northing",0,
LENGTHUNIT["metre",1],
ID["EPSG",8807]]],
CS[Cartesian,2],
AXIS["easting (X)",east,
ORDER[1],
LENGTHUNIT["metre",1]],
AXIS["northing (Y)",north,
ORDER[2],
LENGTHUNIT["metre",1]],
USAGE[
SCOPE["Web mapping and visualisation."],
AREA["World between 85.06°S and 85.06°N."],
BBOX[-85.06,-180,85.06,180]],
ID["EPSG",3857]]
Data axis to CRS axis mapping: 1,2
Origin = (-20038000.000000000000000,20049000.000000000000000)
Pixel Size = (500.000000000000000,-500.000000000000000)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
COMPRESSION=DEFLATE
INTERLEAVE=BAND
LAYOUT=COG
PREDICTOR=2
Corner Coordinates:
Upper Left (-20038000.000,20049000.000) (179d59'44.10"E, 85d 3'36.09"N)
Lower Left (-20038000.000,-20049000.000) (179d59'44.10"E, 85d 3'36.09"S)
Upper Right (20038000.000,20049000.000) (179d59'44.10"W, 85d 3'36.09"N)
Lower Right (20038000.000,-20049000.000) (179d59'44.10"W, 85d 3'36.09"S)
Center ( 0.0000000, 0.0000000) ( 0d 0' 0.01"E, 0d 0' 0.01"N)
Band 1 Block=512x512 Type=Float32, ColorInterp=Gray
NoData Value=-9999
Overviews: 40076x40098, 20038x20049, 10019x10024, 5009x5012, 2504x2506, 1252x1253, 626x626, 313x313
Working with aerial imagery¶
In [34]:
Copied!
cd ../naip
cd ../naip
/Users/abharathi/Documents/gis_data/gdal-tools/naip
In [35]:
Copied!
ls
ls
aoi.cpg* output_2_1.jp2* output_3_8.jp2* output_5_7.jp2* output_7_6.jp2* aoi.dbf* output_2_2.jp2* output_4_1.jp2* output_5_8.jp2* output_7_7.jp2* aoi.prj* output_2_3.jp2* output_4_2.jp2* output_6_1.jp2* output_7_8.jp2* aoi.qpj* output_2_4.jp2* output_4_3.jp2* output_6_2.jp2* output_8_1.jp2* aoi.shp* output_2_5.jp2* output_4_4.jp2* output_6_3.jp2* output_8_2.jp2* aoi.shx* output_2_6.jp2* output_4_5.jp2* output_6_4.jp2* output_8_3.jp2* filelist.txt output_2_7.jp2* output_4_6.jp2* output_6_5.jp2* output_8_4.jp2* output_1_1.jp2* output_2_8.jp2* output_4_7.jp2* output_6_6.jp2* output_8_5.jp2* output_1_2.jp2* output_3_1.jp2* output_4_8.jp2* output_6_7.jp2* output_8_6.jp2* output_1_3.jp2* output_3_2.jp2* output_5_1.jp2* output_6_8.jp2* output_8_7.jp2* output_1_4.jp2* output_3_3.jp2* output_5_2.jp2* output_7_1.jp2* output_8_8.jp2* output_1_5.jp2* output_3_4.jp2* output_5_3.jp2* output_7_2.jp2* output_1_6.jp2* output_3_5.jp2* output_5_4.jp2* output_7_3.jp2* output_1_7.jp2* output_3_6.jp2* output_5_5.jp2* output_7_4.jp2* output_1_8.jp2* output_3_7.jp2* output_5_6.jp2* output_7_5.jp2*
Mosaicing aerial images¶
In [6]:
Copied!
ls *.jp2 > filelist.txt
ls *.jp2 > filelist.txt
Alpha band is an additional band that simply states which cells have value and which have no-Data. It is an image mask. Alpha is useful when you compress raster using PNG or JP2 formats and reduce quantization to 8bit Uint8. With such low dynamic range, it becomes tricky to use 0 or 255 as no-data.
In [10]:
Copied!
!gdalinfo output_1_1.jp2
!gdalinfo output_1_1.jp2
Driver: JP2OpenJPEG/JPEG-2000 driver based on OpenJPEG library
Files: output_1_1.jp2
Size is 5000, 5000
Coordinate System is:
PROJCRS["NAD83 / UTM zone 10N",
BASEGEOGCRS["NAD83",
DATUM["North American Datum 1983",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
ID["EPSG",4269]],
CONVERSION["UTM zone 10N",
METHOD["Transverse Mercator",
ID["EPSG",9807]],
PARAMETER["Latitude of natural origin",0,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8801]],
PARAMETER["Longitude of natural origin",-123,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8802]],
PARAMETER["Scale factor at natural origin",0.9996,
SCALEUNIT["unity",1],
ID["EPSG",8805]],
PARAMETER["False easting",500000,
LENGTHUNIT["metre",1],
ID["EPSG",8806]],
PARAMETER["False northing",0,
LENGTHUNIT["metre",1],
ID["EPSG",8807]]],
CS[Cartesian,2],
AXIS["(E)",east,
ORDER[1],
LENGTHUNIT["metre",1]],
AXIS["(N)",north,
ORDER[2],
LENGTHUNIT["metre",1]],
USAGE[
SCOPE["Engineering survey, topographic mapping."],
AREA["North America - between 126°W and 120°W - onshore and offshore. Canada - British Columbia; Northwest Territories; Yukon. United States (USA) - California; Oregon; Washington."],
BBOX[30.54,-126,81.8,-119.99]],
ID["EPSG",26910]]
Data axis to CRS axis mapping: 1,2
Origin = (545028.000000000000000,4249325.999946000054479)
Pixel Size = (0.600000000000000,-0.600000000600000)
Image Structure Metadata:
INTERLEAVE=PIXEL
COMPRESSION_REVERSIBILITY=LOSSY
Corner Coordinates:
Upper Left ( 545028.000, 4249326.000) (122d29' 3.80"W, 38d23'27.65"N)
Lower Left ( 545028.000, 4246326.000) (122d29' 4.49"W, 38d21'50.32"N)
Upper Right ( 548028.000, 4249326.000) (122d27' 0.14"W, 38d23'27.08"N)
Lower Right ( 548028.000, 4246326.000) (122d27' 0.87"W, 38d21'49.76"N)
Center ( 546528.000, 4247826.000) (122d28' 2.32"W, 38d22'38.71"N)
Band 1 Block=1024x1024 Type=Byte, ColorInterp=Undefined
Overviews: 2500x2500, 1250x1250, 625x625
Overviews: arbitrary
Image Structure Metadata:
COMPRESSION=JPEG2000
Band 2 Block=1024x1024 Type=Byte, ColorInterp=Undefined
Overviews: 2500x2500, 1250x1250, 625x625
Overviews: arbitrary
Image Structure Metadata:
COMPRESSION=JPEG2000
Band 3 Block=1024x1024 Type=Byte, ColorInterp=Undefined
Overviews: 2500x2500, 1250x1250, 625x625
Overviews: arbitrary
Image Structure Metadata:
COMPRESSION=JPEG2000
Build virtual tile that mosaics the drone images using gdalbuildvrt¶
In [36]:
Copied!
%time
!gdalbuildvrt -input_file_list filelist.txt naip.vrt
%time
!gdalbuildvrt -input_file_list filelist.txt naip.vrt
CPU times: user 4 µs, sys: 1e+03 ns, total: 5 µs Wall time: 12.9 µs 0...10...20...30...40...50...60...70...80...90...100 - done.
Create overview file for visualizing gdal_translate¶
In [38]:
Copied!
%%time
!gdal_translate -of JPEG -outsize 2% 2% naip.vrt naip_preview.jpg
%%time
!gdal_translate -of JPEG -outsize 2% 2% naip.vrt naip_preview.jpg
Input file size is 40000, 40000 0...10...20...30...40...50...60...70...80...90...100 - done. CPU times: user 38.4 ms, sys: 24.2 ms, total: 62.6 ms Wall time: 3.22 s
In [39]:
Copied!
%%time
!gdaltindex -write_absolute_path index.json --optfile filelist.txt
%%time
!gdaltindex -write_absolute_path index.json --optfile filelist.txt
Creating new index file... CPU times: user 20 ms, sys: 15.3 ms, total: 35.4 ms Wall time: 1.17 s
Processing satellite image¶
In [45]:
Copied!
cd ../landsat8/
cd ../landsat8/
/Users/abharathi/Documents/gis_data/gdal-tools/landsat8
In [46]:
Copied!
ls -lh
ls -lh
total 1845384 -rwxr-xr-x@ 1 abharathi staff 110M Oct 12 2019 RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B2.tif* -rwxr-xr-x@ 1 abharathi staff 115M Oct 12 2019 RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B3.tif* -rwxr-xr-x@ 1 abharathi staff 115M Oct 12 2019 RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B4.tif* -rwxr-xr-x@ 1 abharathi staff 131M Oct 12 2019 RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B5.tif* -rwxr-xr-x@ 1 abharathi staff 430M Oct 12 2019 RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B8.tif* -rw-r--r-- 1 abharathi staff 2.5K Apr 26 06:47 rgb.vrt
Use gdalbuildvrt to composite bands into a virtual raster¶
In [30]:
Copied!
!gdalbuildvrt -o rgb.vrt -separate \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B4.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B3.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B2.tif
!gdalbuildvrt -o rgb.vrt -separate \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B4.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B3.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B2.tif
0...10...20...30...40...50...60...70...80...90...100 - done.
In [47]:
Copied!
!gdalbuildvrt -o allbands.vrt -separate \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B4.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B3.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B2.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B5.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B8.tif
!gdalbuildvrt -o allbands.vrt -separate \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B4.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B3.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B2.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B5.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B8.tif
0...10...20...30...40...50...60...70...80...90...100 - done.
Use gdaltranslate to convert virtual to persisted file¶
In [41]:
Copied!
%%time
!gdal_translate rgp.vrt rgb.tif -co PHOTOMETRIC=RGB -co COMPRESS=DEFLATE
%%time
!gdal_translate rgp.vrt rgb.tif -co PHOTOMETRIC=RGB -co COMPRESS=DEFLATE
ERROR 4: rgp.vrt: No such file or directory CPU times: user 7.96 ms, sys: 9.33 ms, total: 17.3 ms Wall time: 631 ms
Build a visualization product that applies histogram stretch¶
In [50]:
Copied!
%%time
!gdal_translate -scale 0 0.3 0 255 -ot Byte rgb.vrt rgb_stretch.tif
%%time
!gdal_translate -scale 0 0.3 0 255 -ot Byte rgb.vrt rgb_stretch.tif
Input file size is 7701, 7861 Warning 1: for band 1, nodata value has been clamped to 0, the original value being out of range. Warning 1: for band 2, nodata value has been clamped to 0, the original value being out of range. Warning 1: for band 3, nodata value has been clamped to 0, the original value being out of range. 0...10...20...30...40...50...60...70...80...90...100 - done. CPU times: user 41.6 ms, sys: 21.8 ms, total: 63.4 ms Wall time: 4.17 s
Raster algebra using gdal_calc.py¶
In [52]:
Copied!
!which gdal_calc.py
!which gdal_calc.py
/Users/abharathi/micromamba/envs/opengeo/bin/gdal_calc.py
In [66]:
Copied!
%run -i /Users/abharathi/micromamba/envs/opengeo/bin/gdal_calc.py
%run -i /Users/abharathi/micromamba/envs/opengeo/bin/gdal_calc.py
usage: gdal_calc.py [--help] --calc [expression ...] [-a [filename ...]]
[--a_band [n ...]] [-b [filename ...]] [--b_band [n ...]]
[-c [filename ...]] [--c_band [n ...]] [-d [filename ...]]
[--d_band [n ...]] [-e [filename ...]] [--e_band [n ...]]
[-f [filename ...]] [--f_band [n ...]] [-g [filename ...]]
[--g_band [n ...]] [-h [filename ...]] [--h_band [n ...]]
[-i [filename ...]] [--i_band [n ...]] [-j [filename ...]]
[--j_band [n ...]] [-k [filename ...]] [--k_band [n ...]]
[-l [filename ...]] [--l_band [n ...]] [-m [filename ...]]
[--m_band [n ...]] [-n [filename ...]] [--n_band [n ...]]
[-o [filename ...]] [--o_band [n ...]] [-p [filename ...]]
[--p_band [n ...]] [-q [filename ...]] [--q_band [n ...]]
[-r [filename ...]] [--r_band [n ...]] [-s [filename ...]]
[--s_band [n ...]] [-t [filename ...]] [--t_band [n ...]]
[-u [filename ...]] [--u_band [n ...]] [-v [filename ...]]
[--v_band [n ...]] [-w [filename ...]] [--w_band [n ...]]
[-x [filename ...]] [--x_band [n ...]] [-y [filename ...]]
[--y_band [n ...]] [-z [filename ...]] [--z_band [n ...]]
[-A [filename ...]] [--A_band [n ...]] [-B [filename ...]]
[--B_band [n ...]] [-C [filename ...]] [--C_band [n ...]]
[-D [filename ...]] [--D_band [n ...]] [-E [filename ...]]
[--E_band [n ...]] [-F [filename ...]] [--F_band [n ...]]
[-G [filename ...]] [--G_band [n ...]] [-H [filename ...]]
[--H_band [n ...]] [-I [filename ...]] [--I_band [n ...]]
[-J [filename ...]] [--J_band [n ...]] [-K [filename ...]]
[--K_band [n ...]] [-L [filename ...]] [--L_band [n ...]]
[-M [filename ...]] [--M_band [n ...]] [-N [filename ...]]
[--N_band [n ...]] [-O [filename ...]] [--O_band [n ...]]
[-P [filename ...]] [--P_band [n ...]] [-Q [filename ...]]
[--Q_band [n ...]] [-R [filename ...]] [--R_band [n ...]]
[-S [filename ...]] [--S_band [n ...]] [-T [filename ...]]
[--T_band [n ...]] [-U [filename ...]] [--U_band [n ...]]
[-V [filename ...]] [--V_band [n ...]] [-W [filename ...]]
[--W_band [n ...]] [-X [filename ...]] [--X_band [n ...]]
[-Y [filename ...]] [--Y_band [n ...]] [-Z [filename ...]]
[--Z_band [n ...]] --outfile filename
[--NoDataValue value] [--hideNoData] [--type datatype]
[--format gdal_format] [--creation-option option]
[--allBands [a-z, A-Z]] [--overwrite] [--debug] [--quiet]
[--color-table COLOR_TABLE]
[--extent {ignore,fail,union,intersect} | --projwin ulx uly lrx lry]
[--projectionCheck]
gdal_calc.py: error: the following arguments are required: --calc, --outfile
An exception has occurred, use %tb to see the full traceback. SystemExit: 2
Performing NDVI¶
In [ ]:
Copied!
%%time
%run -i /Users/abharathi/micromamba/envs/opengeo/bin/gdal_calc.py \
-A RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B5.TIF \
-B RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B4.TIF \
--outfile ndvi.tif --calc="(A-B)/(A+B)" --NoDataValue=-999
%%time
%run -i /Users/abharathi/micromamba/envs/opengeo/bin/gdal_calc.py \
-A RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B5.TIF \
-B RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B4.TIF \
--outfile ndvi.tif --calc="(A-B)/(A+B)" --NoDataValue=-999
Exercise - creating FCC viz product¶
In [69]:
Copied!
%%time
!gdalbuildvrt -o nrg.vrt -separate \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B5.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B4.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B3.tif
%%time
!gdalbuildvrt -o nrg.vrt -separate \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B5.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B4.tif \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B3.tif
0...10...20...30...40...50...60...70...80...90...100 - done. CPU times: user 5.41 ms, sys: 9.25 ms, total: 14.7 ms Wall time: 424 ms
In [73]:
Copied!
%%time
!gdal_translate -of JPEG nrg.vrt nrg.jpg -co COMPRESS=JPG -scale 0 0.3 0 255 -ot Byte -outsize 10% 10%
%%time
!gdal_translate -of JPEG nrg.vrt nrg.jpg -co COMPRESS=JPG -scale 0 0.3 0 255 -ot Byte -outsize 10% 10%
Input file size is 7701, 7861 Warning 1: for band 1, nodata value has been clamped to 0, the original value being out of range. Warning 1: for band 2, nodata value has been clamped to 0, the original value being out of range. Warning 1: for band 3, nodata value has been clamped to 0, the original value being out of range. Warning 6: driver JPEG does not support creation option COMPRESS 0...10...20...30...40...50...60...70...80...90...100 - done. CPU times: user 9.38 ms, sys: 11.1 ms, total: 20.4 ms Wall time: 589 ms

Pansharpen¶
In [76]:
Copied!
!which gdal_pansharpen.py
!which gdal_pansharpen.py
/Users/abharathi/micromamba/envs/opengeo/bin/gdal_pansharpen.py
In [78]:
Copied!
%%time
%run -i /Users/abharathi/micromamba/envs/opengeo/bin/gdal_pansharpen.py \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B8.tif \
rgb.vrt pansharpened.vrt -r bilinear -co COMPRESS=DEFLATE -co PHOTOMETRIC=RGB
%%time
%run -i /Users/abharathi/micromamba/envs/opengeo/bin/gdal_pansharpen.py \
RT_LC08_L1TP_137042_20190920_20190926_01_T1_2019-09-20_B8.tif \
rgb.vrt pansharpened.vrt -r bilinear -co COMPRESS=DEFLATE -co PHOTOMETRIC=RGB
CPU times: user 6.39 ms, sys: 9.63 ms, total: 16 ms Wall time: 68.6 ms
In [80]:
Copied!
%%time
!gdal_translate -of JPEG pansharpened.vrt pansharpened.jpg -scale 0 0.3 0 255 -ot Byte -outsize 40% 40%
%%time
!gdal_translate -of JPEG pansharpened.vrt pansharpened.jpg -scale 0 0.3 0 255 -ot Byte -outsize 40% 40%
Input file size is 15401, 15721 Warning 1: for band 1, nodata value has been clamped to 0, the original value being out of range. Warning 1: for band 2, nodata value has been clamped to 0, the original value being out of range. Warning 1: for band 3, nodata value has been clamped to 0, the original value being out of range. 0...10...20...30...40...50...60...70...80...90...100 - done. CPU times: user 97.1 ms, sys: 40.8 ms, total: 138 ms Wall time: 12.8 s
Exercise - Lidar of UK viewshed analysis¶
STEPS
- mosaic using buildvrt
- assign SRS of 4326 and persist raster
- reproject using gdaltransform
- gdal_viewshed to produce the viewshed raster
In [83]:
Copied!
cd ../london_1m_dsm/
cd ../london_1m_dsm/
/Users/abharathi/Documents/gis_data/gdal-tools/london_1m_dsm
In [84]:
Copied!
ls *.asc > filelist.txt
ls *.asc > filelist.txt
In [85]:
Copied!
%%time
!gdalbuildvrt -input_file_list filelist.txt londondsm.vrt
%%time
!gdalbuildvrt -input_file_list filelist.txt londondsm.vrt
0...10...20...30...40...50...60...70...80...90...100 - done. CPU times: user 25.1 ms, sys: 17.7 ms, total: 42.8 ms Wall time: 1.55 s
In [86]:
Copied!
# No CRS in the vrt
!gdalinfo londondsm.vrt
# No CRS in the vrt
!gdalinfo londondsm.vrt
Driver: VRT/Virtual Raster
Files: londondsm.vrt
tq3080_DSM_1M.asc
tq3081_DSM_1M.asc
tq3082_DSM_1M.asc
tq3083_DSM_1M.asc
tq3084_DSM_1M.asc
tq3180_DSM_1M.asc
tq3181_DSM_1M.asc
tq3182_DSM_1M.asc
tq3183_DSM_1M.asc
tq3184_DSM_1M.asc
tq3280_DSM_1M.asc
tq3281_DSM_1M.asc
tq3282_DSM_1M.asc
tq3283_DSM_1M.asc
tq3284_DSM_1M.asc
tq3380_DSM_1M.asc
tq3381_DSM_1M.asc
tq3382_DSM_1M.asc
tq3383_DSM_1M.asc
tq3384_DSM_1M.asc
tq3480_DSM_1M.asc
tq3481_DSM_1M.asc
tq3482_DSM_1M.asc
tq3483_DSM_1M.asc
tq3484_DSM_1M.asc
Size is 5000, 5000
Origin = (530000.000000000000000,185000.000000000000000)
Pixel Size = (1.000000000000000,-1.000000000000000)
Corner Coordinates:
Upper Left ( 530000.000, 185000.000)
Lower Left ( 530000.000, 180000.000)
Upper Right ( 535000.000, 185000.000)
Lower Right ( 535000.000, 180000.000)
Center ( 532500.000, 182500.000)
Band 1 Block=128x128 Type=Float32, ColorInterp=Undefined
NoData Value=-9999
In [89]:
Copied!
%%time
#Assign SRS
!gdal_translate londondsm.vrt londondsm.tif \
-co COMPRESS=DEFLATE -co PREDICTOR=2 \
-a_srs EPSG:27700
%%time
#Assign SRS
!gdal_translate londondsm.vrt londondsm.tif \
-co COMPRESS=DEFLATE -co PREDICTOR=2 \
-a_srs EPSG:27700
Input file size is 5000, 5000 0...10...20...30...40...50...60...70...80...90...100 - done. CPU times: user 30.6 ms, sys: 18.2 ms, total: 48.8 ms Wall time: 3.3 s
Reproject¶
In [ ]:
Copied!
!gdaltransform -s_srs EPSG:4326
!gdaltransform -s_srs EPSG:4326