Pre-processing - generate .map files from .tif input files
Opened this issue · 2 comments
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
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).
@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).