Example #1
0
def validate_footprints(products_geojson, outpath, index, year):
    valid_list = []
    for feature in products_geojson['features']:
        fname = feature['properties']['title']
        footprintgeojson = os.path.join(outpath, f'{fname}.geojson')
        with open(footprintgeojson, 'w') as geofile:
            json.dump(feature['geometry'], geofile)

        footprint = gpd.read_file(footprintgeojson)
        footprint_32629 = footprint.to_crs("epsg:32629")
        footprint_bounds = footprint_32629.bounds
        array = footprint_bounds.to_numpy()
        footprint_polygon = box(array[0, 0], array[0, 1], array[0, 2],
                                array[0, 3])

        bbox_incendio = getlargebbox(index, year)

        polygon_incendio = box(bbox_incendio[0][0], bbox_incendio[0][1],
                               bbox_incendio[0][2], bbox_incendio[0][3])

        # object.contains(other)
        # retorna True se nenhum dos pontos do "other" estiverem no exterior do objecto
        # e se pelo menos um ponto do interior do "other" estiver no interior do objecto.
        verify = footprint_polygon.contains(polygon_incendio)
        if verify:
            valid_list.append(fname)
        geofile.close()
        del_file(footprintgeojson)

    return valid_list
Example #2
0
def getdem(year="2017"):
    pathfolder = "Dataset" + str(year)
    num_total_subfolders = [folder for folder in os.listdir(pathfolder)]

    for i in range(len(num_total_subfolders)):
        pathdem = os.path.join(pathfolder, str(i))
        bbox_32629 = getlargebbox(i, year)
        _dem_raster = heigths(bbox_32629, pathdem)
Example #3
0
def drawimages(year="2017"):
    full_path = os.getcwd()
    os.chdir(Path(full_path).parents[1])
    switcheryear = {2017: "AA2017", 2018: "ardida_2018", 2019: "ardida_2019"}

    path = os.path.join(switcheryear[int(year)],
                        switcheryear[int(year)] + ".shp")
    pathimage = "Incendios_Completos_" + str(year)

    if year == "2018":
        sf = shapefile.Reader(path, encoding="ISO8859-1")
    else:
        sf = shapefile.Reader(path)

    var_image = Imagemap()
    i = 0

    for shape in sf.iterShapeRecords():
        # criar path com respetiva pasta
        new_path = os.path.join(pathimage, str(i))
        var_image.criarpasta(new_path)
        # gerar mascaras binarias de cada shape

        # bbox aumentada para a forma como vai entrar na rede
        large_bbox = getlargebbox(i, year, initialshapefile=True)[0]
        # saída do png será de 256*256
        Imagemap.getimage(var_image, shape, 2560, 2560, (256, 256), 'shape',
                          new_path)
        # bbox expandida a partir do centro da shape com 2560 metros de largura e altura
        box = Imagemap.bbox(shape, 2560, 2560, modify=True)

        # georeferenciar em coordenadas (lat/lon) e converter imagem para geotiff
        src = os.path.join(new_path, "shape.png")
        dataset = rasterio.open(src, 'r+')
        bands = 1
        data = dataset.read(bands)
        transform = rasterio.transform.from_bounds(box[0], box[1], box[2],
                                                   box[3], 256, 256)
        dst = os.path.join(pathimage, str(i), "shape.tif")
        with rasterio.open(dst,
                           'w',
                           driver='GTiff',
                           width=256,
                           height=256,
                           count=bands,
                           dtype=data.dtype,
                           nodata=0,
                           transform=transform,
                           crs='EPSG:4326') as dst:
            dst.write(data, indexes=bands)

        # warp para sistema de coordenadas 32629 com 10m por pixel e com tamanho (width e height)
        # correcto para entrar na rede
        input_raster = gdal.Open(os.path.join(pathimage, str(i), "shape.tif"))
        output_raster = os.path.join(pathimage, str(i), "shape32629.tif")
        _warp = gdal.Warp(srcDSOrSrcDSTab=input_raster,
                          destNameOrDestDS=output_raster,
                          format="GTiff",
                          outputBounds=[
                              large_bbox[0], large_bbox[1], large_bbox[2],
                              large_bbox[3]
                          ],
                          xRes=10,
                          yRes=10,
                          dstSRS='EPSG:32629')
        _warp = None
        print("Gerado imagem do incendio", format(i))
        i += 1
Example #4
0
def cropsentinel(year="2017"):
    pathdataset = "Dataset" + str(year)
    pathproducts = r"Sentinel_Products"
    if not os.path.exists(pathproducts):
        sys.exit(
            "A pasta de produtos não está presente no caminho especificado!")
    if len(next(os.walk(pathproducts))[2]) == 0:
        sys.exit("A pasta de produtos está vazia!")

    num_total_subfolders = [folder for folder in os.listdir(pathdataset)]
    for i in range(len(num_total_subfolders)):

        pathimages = os.path.join(pathdataset, str(i), "Sentinel_Images")
        try:
            if not os.path.exists(pathimages):
                os.makedirs(pathimages)
            if os.path.exists(pathimages):
                shutil.rmtree(pathimages)
                os.makedirs(pathimages)
        except OSError:
            print("Erro: Ao criar a pasta " + pathimages)

        # para ignorar incêndios que não têm nenhum produto Sentinel associado
        empty_filename = os.path.join(pathdataset, str(i), "Sem_Produtos.txt")
        my_file_index = Path(empty_filename)
        if my_file_index.is_file():
            continue

        bbox = getlargebbox(i, year)

        filetxtpath = os.path.join(pathdataset, str(i), "Final_Product.txt")
        match = False
        # o ficheiro txt só tem um produto, o que é suposto, se tivesse mais que um produto este conjunto seguinte
        # de comandos iria seleccionar o ficheiro zip cujo nome fosse igual ao ultimo produto (linha) presente no txt!!!
        with open(filetxtpath, "r") as txt_file:
            for line in txt_file:
                line = line.rstrip('\n')
                for zip_file in os.listdir(pathproducts):
                    if re.match(f"{line}.zip", zip_file):
                        zipname = line + ".zip"
                        match = True
        txt_file.close()

        if not match:
            sys.exit("O produto associado ao incêndio " + f"{i}" + " do ano " +
                     year + " não está presente na pasta Produtos_Sentinel!")

        zip_f = os.path.join(pathproducts, zipname)
        zf = ZipFile(zip_f, 'r')
        zf.extractall(pathproducts)
        zf.close()

        extracted = os.path.join(pathproducts, line + ".SAFE")

        itr_folder = iter(os.walk(os.path.join(extracted, "GRANULE")))
        root, dirs, files = next(itr_folder)

        auxpath = os.path.join(os.path.join(extracted, "GRANULE"), dirs[0],
                               "IMG_DATA")
        resolutions = [10, 20, 60]
        for k in range(len(resolutions)):
            finalpath = os.path.join(auxpath, f"R{resolutions[k]}m")
            for file in os.listdir(finalpath):
                channel = file.rsplit("_", 2)[1]
                list_already_done = os.listdir(pathimages)
                verify = any(channel in image for image in list_already_done)
                if verify:  # se já foi feito o crop com menor resolução para esse canal passa à frente
                    continue
                else:
                    input_image = os.path.join(finalpath, file)
                    outpath = os.path.join(pathimages, file[:-8] + ".tif")
                    sentinelclip(bbox, input_image, outpath)

        shutil.rmtree(extracted)
Example #5
0
def drawrastershapes(year="2017"):
    pathfolder = "Dataset" + str(year)
    num_total_subfolders = [folder for folder in os.listdir(pathfolder)]

    # Definir tamanho do pixel e o valor no_data para o novo raster
    pixel_size = 10
    NoData_value = 0

    # iterar

    for i in range(len(num_total_subfolders)):
        # Path para os shapefiles individuais
        pathshapefile = os.path.join(pathfolder, str(i), "ShapeIndividual",
                                     "Shape" + str(year[-2:]) + ".shp")
        # Nome para os ficheiros raster
        pathraster = os.path.join(pathfolder, str(i))
        raster_fn = os.path.join(pathraster, "shapebboxincendio.tif")
        raster_fn2 = os.path.join(pathraster, "shapebboxaumentada.tif")
        # Abrir dados do shp e obter a extensao do shapefile
        source_ds = ogr.Open(pathshapefile)
        source_layer = source_ds.GetLayer()

        xmin, xmax, ymin, ymax = source_layer.GetExtent()
        aux_var = getlargebbox(i, year)
        box = aux_var[0]

        xmin_large = box[0]
        xmax_large = box[2]
        ymax_large = box[3]
        ymin_large = box[1]

        # Obter a projeção do raster
        epsg = 32629
        srs = osr.SpatialReference()
        srs.ImportFromEPSG(epsg)
        dest_wkt = srs.ExportToWkt()

        # Criar os dados de destino
        x_res = round((xmax - xmin) / pixel_size)
        y_res = round((ymax - ymin) / pixel_size)
        target_ds = gdal.GetDriverByName('GTiff').Create(
            raster_fn, x_res, y_res, 1, gdal.GDT_Byte)

        # Criar os dados de destino
        x_res_large = round((xmax_large - xmin_large) / pixel_size)
        y_res_large = round((ymax_large - ymin_large) / pixel_size)
        target_ds_large = gdal.GetDriverByName('GTiff').Create(
            raster_fn2, x_res_large, y_res_large, 1, gdal.GDT_Byte)

        # Atribuir projeção
        target_ds.SetProjection(dest_wkt)
        target_ds_large.SetProjection(dest_wkt)

        target_ds.SetGeoTransform((xmin, pixel_size, 0, ymax, 0, -pixel_size))
        target_ds_large.SetGeoTransform(
            (xmin_large, pixel_size, 0, ymax_large, 0, -pixel_size))

        band = target_ds.GetRasterBand(1)
        band.SetNoDataValue(NoData_value)

        band2 = target_ds_large.GetRasterBand(1)
        band2.SetNoDataValue(NoData_value)

        gt = [xmin, pixel_size, 0, ymax, 0, -pixel_size]
        target_ds.SetGeoTransform(gt)

        gt2 = [xmin_large, pixel_size, 0, ymax_large, 0, -pixel_size]
        target_ds_large.SetGeoTransform(gt2)
        # Rasterizar
        gdal.RasterizeLayer(target_ds, [1],
                            source_layer,
                            burn_values=[255],
                            options=["-tr 10 10"])
        gdal.RasterizeLayer(target_ds_large, [1],
                            source_layer,
                            burn_values=[255],
                            options=["-tr 10 10"])

        # Fechar ficheiro
        _target_ds = None
        _target_ds_large = None