Ejemplo n.º 1
0
def distribuir_kc(dia, semeadura_, colheita_, ano_inicio, dia_inicio,
                  periodo_kc, kc_vetorizado, path_img_referencia, path_out):

    threading.currentThread().terminada = False
    imagem_kc = RasterFile(file_full_path=path_img_referencia)
    imagem_kc.getLoadJustMetaData()
    imagem_kc.file_path = path_out

    n_linhas = len(semeadura_)
    n_colunas = len(semeadura_[0])

    delta_c = (colheita_ - semeadura_)  #.astype(np.float32)
    tempo_em_campo = (dia + 1 - semeadura_)  #.astype(np.float32)

    i_FKc = np.zeros((n_linhas, n_colunas)).astype(np.float32)

    for i in range(n_linhas):
        mask = ((tempo_em_campo[i] > 0) & (tempo_em_campo[i] <= delta_c[i]))
        i_FKc[i][mask] = (
            (tempo_em_campo[i][mask] - 1) * periodo_kc) / delta_c[i][mask]
        i_FKc[i][mask] = np.ceil(i_FKc[i][mask])
        i_FKc[i][mask] = [kc_vetorizado[index] for index in i_FKc[i][mask]]

    imagem_kc.file_name = str(
        datetime.datetime(ano_inicio, 1, 1) +
        datetime.timedelta(dia + dia_inicio - 1))[:10]

    imagem_kc.metadata.update(nodata=0)
    imagem_kc.metadata.update(dtype="float32")
    imagem_kc.saveRasterData(band_matrix=i_FKc)
    threading.currentThread().terminada = True

    return
Ejemplo n.º 2
0
def distribuir_kc(dia, semeadura_, colheita_, ano_inicio, dia_inicio, periodo_kc, kc_vetorizado, path_img_referencia, path_out):
    
        threading.currentThread().terminada = False
        imagem_kc = RasterFile(file_full_path = path_img_referencia)
        imagem_kc.getLoadJustMetaData()
        imagem_kc.file_path = path_out

        n_linhas = len(semeadura_)
        n_colunas = len(semeadura_[0])
        
        delta_c = (colheita_ - semeadura_)#.astype(np.float32)
        tempo_em_campo = (dia+1 - semeadura_)#.astype(np.float32)
            
        i_FKc = np.zeros((n_linhas, n_colunas)).astype(np.float32)
                        
        for i in range(n_linhas) :
            mask = ((tempo_em_campo[i] > 0) & (tempo_em_campo[i] <= delta_c[i]))
            i_FKc[i][mask] = ((tempo_em_campo[i][mask]-1) * periodo_kc)/delta_c[i][mask]
            i_FKc[i][mask] = np.ceil(i_FKc[i][mask])
            i_FKc[i][mask] = [kc_vetorizado[index] for index in i_FKc[i][mask]]
            
        imagem_kc.file_name = str(datetime.datetime(ano_inicio, 1, 1) + datetime.timedelta(dia + dia_inicio - 1))[:10]
        imagem_kc.metadata.update(nodata=0)
        imagem_kc.metadata.update(dtype="float32")
        
        imagem_kc.saveRasterData(band_matrix = i_FKc)

        threading.currentThread().terminada = True
                
        return
Ejemplo n.º 3
0
    def __execOperation__(self):

        serie_imagem_in = self.paramentrosIN_carregados["In"].loadListByRoot()
        serie_imagem_out = self.paramentrosIN_carregados["Out_config"]

        imagem_in_factor = float(serie_imagem_in.mutiply_factor)
        imagem_out_factor = float(serie_imagem_out.mutiply_factor)

        n_imagens = len(serie_imagem_in)

        if n_imagens is 0:
            self.console(u"Erro: Nenhuma imagem encontrada na pasta especificada.")
            self.console(u"Cancelando função.")
            threading.currentThread().stop()
            return

        self.console(u"Construindo série temporal diária...")

        for i in range(n_imagens):

            self.progresso = (i / float(n_imagens)) * 100

            """Recupera a data correspondente a imagem atual do laço """
            data = serie_imagem_in.getDate_time(i)
            dia_mes = data.day

            """Calcula quantos dias tem no decend atual"""
            if dia_mes <= 10:
                duracao = 10
            elif dia_mes <= 20:
                duracao = 10
            else:
                duracao = int(calendar.monthrange(data.year, data.month)[1]) - 20

            if threading.currentThread().stopped():
                print "thread parada, retornando da função"
                return

            imagem_ = serie_imagem_in[i].loadRasterData()
            imagem_ *= imagem_in_factor

            if self.paramentrosIN_carregados["Operation"] == "dividir valores":
                imagem_ = imagem_ / float(duracao)
                imagem_ = numpy.round(imagem_, 4)
            elif self.paramentrosIN_carregados["Operation"] == "manter valores":
                pass

            imagem_ *= imagem_out_factor

            # imagem_ = self.compactar(imagem_)

            for ii in range(0, duracao):
                img = RasterFile()
                img.file_path = serie_imagem_out.root_path
                data_img = data + timedelta(ii)
                img.file_name = (
                    serie_imagem_out.prefixo + data_img.strftime(serie_imagem_out.date_mask) + serie_imagem_out.sufixo
                )
                img.data = imagem_
                img.file_ext = "tif"
                metadata = serie_imagem_in[i].metadata
                # metadata.update(nodata=0)
                img.saveRasterData(metadata=metadata)
                print metadata

        self.console(u"Série temporal diária concluída.")
Ejemplo n.º 4
0
    def __execOperation__(self):
        
        serie_imagem_in = self.paramentrosIN_carregados["In"].loadListByRoot()
        serie_imagem_out = self.paramentrosIN_carregados["Out_config"]
        
        #imagem_in_factor = float(serie_imagem_in.mutiply_factor)
        #imagem_out_factor = float(serie_imagem_out.mutiply_factor)
        
        
        n_imagens = len(serie_imagem_in)
        
        if n_imagens is 0 :
            self.console(u"Erro: Nenhuma imagem encontrada na pasta especificada.") 
            self.console(u"Cancelando função.") 
            threading.currentThread().stop()
            return
        
        self.console(u"Construindo série temporal diária...")
        
        for i in range(n_imagens):
            
            self.setProgresso(i, n_imagens)
            
            '''Recupera a data correspondente a imagem atual do laço '''
            try:
                data = serie_imagem_in.getDate_time(i)
                dia_mes = data.day

                '''Calcula quantos dias tem no decend atual'''
                if dia_mes <= 10: duracao = 10
                elif dia_mes <= 20: duracao = 10
                else : duracao =  int(calendar.monthrange(data.year, data.month)[1]) - 20
                
                if threading.currentThread().stopped()  :
                    print "thread parada, retornando da função"
                    return 
               
                imagem_ = serie_imagem_in[i].loadRasterData()
                imagem_ = numpy.ma.masked_array(imagem_, mask=(imagem_ == serie_imagem_in[i].metadata["nodata"]))
    
                if self.paramentrosIN_carregados["Operation"] == "dividir valores": 
                    imagem_ = (imagem_ / float(duracao))
                    imagem_[numpy.isinf(imagem_)] = 0
                elif self.paramentrosIN_carregados["Operation"] == "manter valores": 
                    pass
                     
                for ii in range (0, duracao):
                    img = RasterFile()
                    img.file_path = serie_imagem_out.root_path   
                    data_img = data + timedelta(ii)
                    img.file_name = serie_imagem_out.prefixo + data_img.strftime(serie_imagem_out.date_mask) + serie_imagem_out.sufixo
                    img.data = imagem_
                    img.file_ext = "tif"
                    metadata = serie_imagem_in[i].metadata
                    img.metadata = metadata
                    img.metadata.update(dtype = img.data.dtype)
                    img.saveRasterData(metadata=metadata)
            except:
                self.console(u"Erro na imagem: " + serie_imagem_in[i].file_name)             
            
   
        self.console(u"Série temporal diária concluída.")

        
Ejemplo n.º 5
0
def distribuir_kc(data_minima, data_maxima, semeadura_, colheita_, periodo_kc,
                  kc_vetorizado, path_img_referencia, i, path_out):

    import ctypes
    import ConfigParser
    config = ConfigParser.RawConfigParser()
    config.read('workspace.properties')

    company = config.get('Version', 'company')
    product = config.get('Version', 'product')
    subproduct = config.get('Version', 'subproduct')
    version = config.get('Version', 'Version')

    myappid = (company + "." + product + "." + subproduct + "." + version)
    ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)

    threading.currentThread().terminada = False
    imagem_kc = RasterFile(file_full_path=path_img_referencia)
    imagem_kc.loadRasterData()
    imagem_kc.file_path = path_out

    #print imagem_kc.metadata

    n_linhas = len(semeadura_)
    n_colunas = len(colheita_[0])

    delta_total = (data_maxima - data_minima).days + 1

    for i_dia in range(0, delta_total):

        imagem_kc_ = np.zeros((n_linhas, n_colunas))
        imagem_kc_ = array(imagem_kc_).astype(dtype="uint8")

        dia = data_minima + timedelta(i_dia)

        imagem_kc.data = array(semeadura_)
        imagem_kc.file_name = str(dia.date())

        #if delta_total > 1 :

        #progresso = (i_dia/float(delta_total))*100

        for i_linha in range(0, n_linhas):

            progress(i_linha / float(n_linhas - 1))

            for i_coluna in range(0, n_colunas):

                try:
                    Ds = Ds_DC_to_date(semeadura_[i_linha][i_coluna])
                    Dc = Ds_DC_to_date(colheita_[i_linha][i_coluna])
                    delta_c = (Dc - Ds).days + 1

                    if (dia >= Ds and dia <= Dc):
                        k = dia - Ds
                        i_FKc = int((k * periodo_kc).days / delta_c)
                        Kc = kc_vetorizado[i_FKc]
                        imagem_kc_[i_linha][i_coluna] = Kc
                except:
                    pass

        imagem_kc.metadata.update(nodata=0)
        imagem_kc.saveRasterData(band_matrix=imagem_kc_)
    print "retornando do processo", i
    #threading.currentThread().stopped = True
    threading.currentThread().terminada = True
    return None