Source code for dgi.acesso.utils
import datetime
[docs]def string_para_data(string: str, reverso=True, sep="/") -> datetime.datetime:
"""Função para transformação de string em data
Args:
string (str): String no formato DD{sep}MM{sep}AAAA
reverso (bool): Indica se a string inserida deve ser invertida
sep (str): Indica o separador entre cada elemento das datas
Returns:
datetime: String traduzida para datetime
"""
lista = list(map(int, string.split(sep)[::-1]))
if not reverso:
lista = list(map(int, string.split(sep)))
return datetime.datetime(*lista)
[docs]def divide_lista(lista: list, n: int) -> list:
"""Função para dividir uma lista em N elementos
Args:
lista (list): Lista que deverá ser dividida
n (int): Quantidade de partes que devem ser gerada da lista inserida
Returns:
list: Lista contendo as listas divididas
"""
u = 0.0
m = len(lista) / float(n)
saida = []
while u < len(lista):
saida.append(lista[int(u): int(u + m)])
u += m
return saida
[docs]def cria_documento_download(link) -> dict:
"""Função para gerar um JSON no formato que deve ser inserido nos registros de
download do banco de dados
Args:
link (str): Link de onde as informações devem ser extraídas
Returns:remove_imagens_duplicadas
dict: Dicionário com as seguintes chaves
satelite: ``str``: Nome do satélite que carrega o instrumento que capturou a imagem
instrumento: ``str``: Nome do instrumento que capturou a imagem
data: ``str``: Data da captura da imagem
orbita: ``str``: Orbita da imagem
ponto: ``str``: Ponto da imagem
"""
# ToDo: Remover e tentar generalizar a função (E. g. Chain of responsibility)
if "CBERS_4" not in link:
raise RuntimeError("Este sensor ainda não é suportado por esta ferramenta! Trabalhamos apenas com CBERS-4")
link_dividido = link.split("_")
if "scenario" in link or "png" in link:
path = link_dividido[-2]
row = link_dividido[-1].split(".")[0]
else:
path = link_dividido[-4]
row = link_dividido[-3]
satelite = link_dividido[0]
instrumento = link_dividido[2]
data = f"{link_dividido[3][0:4]}_{link_dividido[3][4:6]}_{link_dividido[3][6:]}"
return {
"satelite": satelite,
"instrumento": instrumento,
"data": data,
"orbita": int(path),
"ponto": int(row)
}
[docs]def remove_imagens_duplicadas(lista_de_imagens: list) -> set:
"""Função para removação de imagens duplicadas em um conjunto de imagens
Aplica-se um filtro na busca de nomes duplicados, caso haja, estes são removidos
Args:
lista_de_imagens (list): Lista de imagens que serão filtradas
Returns:
set: Conjunto de imagens filtradas
"""
return set(map(lambda x: x["nome"], lista_de_imagens))