""" Services implemented: GMS/DEM/calls/slope POST: to get a slope map """ from monitorT.task import Task from tools.layer import Layer, OutLayer import os import tempfile # Fix gdal 2.40 and 3.3 integration problems try: import gdal except ModuleNotFoundError: from osgeo import gdal class TaskCustom(Task): """ clase interna itasker """ CONTROL = True def post(task, user=None, input_layer: Layer = None, output_layer: OutLayer = None, extra=False): """ Servicio que devuelve un mapa de pendientes implementando las funcionalidades de GDAL Parameters ---------- task user input_layer: Layer capa de entrada con protocolo FTP output_layer: OutLayer capa de salida extra: bool Returns ------- """ if not extra or extra == 'false' or extra == 'none': extra = '' task.set_progress(5) task.status_description = 'cargando capa' url_layer = input_layer.gdal_layer(with_vsi=True) src_ds = gdal.Open(url_layer) if src_ds is None: raise NameError("Unable to open INPUT.tif") # Generating temporal files task.set_progress(50) task.status_description = 'generando capa raster ' \ 'para almacenar la pendiente' tmp_directory = tempfile.mkdtemp(dir='tmp') slope_path = tempfile.NamedTemporaryFile(suffix='.tif', prefix='slope_result_', dir=tmp_directory).name command = "gdaldem slope {input} {output} {extra} -q".format( input=input_layer.gdal_layer(with_vsi=True), output=slope_path, extra=extra) os.system(command) task.set_progress(95) task.status_description = 'terminando' output_layer.attach_sources((slope_path, )) output_layer.residual_sources.append(tmp_directory) return output_layer