LabSid-USP / RUBEMHydrological

The Rainfall rUnoff Balance Enhanced Model (RUBEM) QGIS plugin
https://labsid.poli.usp.br/softwares/rubem-hydrological/
GNU General Public License v3.0
5 stars 1 forks source link

Pre-processing - generate .map files from .tif input files #42

Open soaressgabriel opened 3 years ago

soaressgabriel commented 3 years ago

Baseado na sugestão de @camilabillerbeck

A implementação atual do RUBEM precisa dos dois arquivos DEM (.map e .tif). A funcionalidade de exportação dos resultados usa o .tif de entrada como referência.

Os arquivos .tif precisam ser convertidos em .map pois a atual implementação do RUBEM utiliza o PCRaster.

Sugiro fortemente que seja feita uma adaptação pra o usuário inserir somente arquivos .tif e os arquivos .map sejam gerados e inseridos no arquivo de configuração automaticamente.

Deixo aqui também um exemplo de código que realiza essa operação:

'''
##########
GDal Batch convert tif to map
##########
'''
# Source must have compatible data type format Float32 ( X GDT Byte)

def tif2map(Tifs_Dir, FileName = 'original', FileFormat = '.map' , Step = 0, Total = 0):
    import gdal
    import glob
    import os
    import numpy as np

    # change the current directory 
    # to specified directory 
    os.chdir(Tifs_Dir)
    print(Total)
    #folders containing files to read
    Raster_path = os.getcwd()

    #files
    Raster_files = glob.glob(os.path.join(Raster_path,'*.tif'))

    #Type output data --- options: gdal.GDT_Byte= BOOLEAN ; gdal.GDT_Int32= NOMINAL ; gdal.GDT_Float32=SCALAR
    outType= gdal.GDT_Float32 #scalar

    sufix = []

    # File format, .map os Tss
    if FileFormat != '.map':

        array = np.arange(1,Total,Step)

        for x in range(len(array)):
            sufix.append(str('.')+f"{array[x]:03d}")

    else:
        for x in range(len(Raster_files)):
            sufix.append(str(FileFormat))  

#    print(str(Raster_files[1][-4]+str(sufix[x])))
    for x in range(len(Raster_files)):
        ## convert to PCRaster file format

        if FileName == 'original':
            out_map = gdal.Translate(str((Raster_files[x][:-4])+str(sufix[x])), Raster_files[x], format = 'PCRaster', outputType=outType)
            #Properly close the datasets to flush to disk
            out_map = None

        else:
            out_map = gdal.Translate(str(str(Tifs_Dir)+'/'+FileName+str(sufix[x])), Raster_files[x], format = 'PCRaster', outputType=outType)
            out_map = None

    # erase .xml files
    files_in_directory = os.listdir(Tifs_Dir)
    filtered_files = [file for file in files_in_directory if file.endswith(".xml")]
    for file in filtered_files:
        path_to_file = os.path.join(Tifs_Dir, file)
        os.remove(path_to_file)

    return(sufix)

##### Set Options #####
# FileName - "original' - to keep original file name, or prefix as "ndvi0000" / "prec0000"
# FileFormat - ".map" or ".001" 
    # If FileFormat = '.001' - specify temporal Step (months) and Total months to consider
wdvichete84 commented 3 years ago

Acho que vale a pena implementar para o DEM, mas para os demais parâmetros eu acho que vai ser mais complicado por compor uma série de dados em camadas (que representa o tempo).

A não ser que todos os arquivos .map venham oriundos de um raster (um raster para cada tempo para chuva, landuse, land cover, etc).

soaressgabriel commented 3 years ago

@wdvichete84 Creio que o código de exemplo mencionado na descrição do issue já trata dessa questão da série de dados TIFF (*.tiff).