I'm working on my Bachelor Thesis right now and I have a about 300gb of digital elevation database. This database has a 1m resolution and every single 1x1km square is stored into a single GeoTIFF. Now I need all of this data merged into a single grid.
I tried to work with a batch, but the only solution i could find is to first transform every GeoTIFF into a sgrd and then merge them all together and resample it. Is there a more efficient way? It takes very very long for all this data. My batch looked like this:
@echo off
setlocal enabledelayedexpansion
:: Bestimme das Verzeichnis, in dem das Skript liegt
set "SCRIPT_DIR=%~dp0"
:: Setze das SAGA Moduls PATH
set "SAGA_CMD_PATH=C:\Program Files\saga-6.4.0_x64\saga-6.4.0_x64\saga_cmd.exe"
:: Schleife durch alle TIFF-Dateien im Verzeichnis und konvertiere sie in SAGA-Grid-Dateien
for %%G in ("%SCRIPT_DIR%*.tif") do (
echo Konvertiere %%G in %%~nG.sgrd
"%SAGA_CMD_PATH%" io_gdal 0 -GRIDS "%%~nG.sgrd" -FILES "%%G"
if %ERRORLEVEL% neq 0 (
echo Fehler bei der Konvertierung von %%G
exit /b 1
)
)
:: Erzeuge eine Liste der SAGA-Grid-Dateien im Verzeichnis
set "GRIDS="
for %%H in ("%SCRIPT_DIR%*.sgrd") do (
set "GRIDS=!GRIDS!;%%H"
)
:: Entferne das erste Semikolon
set "GRIDS=%GRIDS:~1%"
:: Überprüfen, ob SAGA-Grid-Dateien gefunden wurden
if "%GRIDS%"=="" (
echo Keine SAGA-Grid-Dateien im Verzeichnis %SCRIPT_DIR% gefunden.
exit /b 1
)
:: Setze die Ausgabedatei
set "OUTPUT_FILE=%SCRIPT_DIR%merged_output.sgrd"
:: Führe das Mosaicking aus
echo Führe das Mosaicking aus
"%SAGA_CMD_PATH%" grid_tools 3 -GRIDS "%GRIDS%" -MERGED "%OUTPUT_FILE%"
:: Überprüfen, ob das Mosaicking erfolgreich war
if %ERRORLEVEL% equ 0 (
echo Mosaicking erfolgreich abgeschlossen. Ausgabedatei: %OUTPUT_FILE%
) else (
echo Fehler beim Mosaicking.
exit /b 1
)
:: Konvertiere die endgültige SAGA-Grid-Datei zurück in GeoTIFF
echo Konvertiere das Mosaik in GeoTIFF
"%SAGA_CMD_PATH%" io_gdal 2 -GRIDS "%OUTPUT_FILE%" -FILES "%SCRIPT_DIR%merged_output.tif" -OUT_CELL_SIZE 30.0
:: Aufräumen: Lösche die temporären SAGA-Grid-Dateien
del "%SCRIPT_DIR%*.sgrd"
del "%SCRIPT_DIR%*.mgrd"
del "%SCRIPT_DIR%*.sdat"
del "%SCRIPT_DIR%*.prj"
echo Fertig.
Does anyone has an Idea to do it more efficient? Maybe with Python?
gdalbuildvrt
andgdal_translate