def __execOperation__(self): sys.stdout.write("Inicializando Parametros...") self.print_text(u"Inicializando Parametros...") prefix = self.paramentrosIN_carregados["prefixo"] sufix = self.paramentrosIN_carregados["sufixo"] mask = self.paramentrosIN_carregados["mask"] images_super = self.paramentrosIN_carregados["images"] avanco_semeadura = self.paramentrosIN_carregados["avanco_semeadura"] avanco_semeadura = avanco_semeadura avanco_colheita = self.paramentrosIN_carregados["avanco_colheita"] avanco_colheita = avanco_colheita intervalo_semeadura = self.paramentrosIN_carregados[ "intervalo_semeadura"] intervalo_pico = self.paramentrosIN_carregados["intervalo_pico"] intervalo_colheita = self.paramentrosIN_carregados[ "intervalo_colheita"] #barra_progresso = self.paramentrosIN_carregados["progress_bar"] intervalo_semeadura = intervalo_semeadura.split("-") intervalo_pico = intervalo_pico.split("-") intervalo_colheita = intervalo_colheita.split("-") images = images_super.loadListRasterData() if images == None: raise Exception( "A funcao necessita de uma serie de imagens para funcionar") #n_images = len(images) n_linhas = len(images[0]) n_colunas = len(images[0][0]) nullValue = float(self.paramentrosIN_carregados["null_value"]) if (images[0][0][0] == nullValue): print("null value igual") #else : print("diferente") imagem_referencia = np.zeros((n_linhas, n_colunas)) imagem_semeadura = array(imagem_referencia).astype(dtype="int32") imagem_colheita = array(imagem_referencia).astype(dtype="int32") imagem_pico = array(imagem_referencia).astype(dtype="int32") sys.stdout.write("Gerando estimativas: ") self.print_text("Gerando estimativas.") progress(0.0) imagem_for_null_value = images[0] #nullValue = imagem_for_null_value[0][0] avanco_semeadura = timedelta(avanco_semeadura) avanco_colheita = timedelta(avanco_colheita) images_super[0].metadata.update(nodata=0) for i_linhas in range(0, n_linhas): #progress(i_linhas/float(n_linhas)) self.setProgresso(i_linhas, n_linhas) for i_coluna in range(0, n_colunas): line = list() if threading.currentThread().stopped(): return if nullValue != imagem_for_null_value[i_linhas][i_coluna]: for img in images: line.append(img[i_linhas][i_coluna]) cenaPico = self.findPeakHelper(line, int( intervalo_pico[0]), int(intervalo_pico[1])) # 3 - 23 data_txt_pico = images_super[cenaPico].file_name.replace( prefix, "").replace(sufix, "") data_pico = dt.strptime(data_txt_pico, mask) ano_pico = data_pico.year dia_juliano = data_pico.timetuple().tm_yday imagem_pico[i_linhas][i_coluna] = ((ano_pico * 1000) + dia_juliano) cenaSemeadura = self.findLowPeakHelper( line, int(intervalo_semeadura[0]), int(intervalo_semeadura[1])) # 6 - 23 cenaColheita = self.findLowPeakHelper( line, int(intervalo_colheita[0]), int(intervalo_colheita[1])) # 11 - 34 data_txt_semeadura = images_super[ cenaSemeadura].file_name.replace(prefix, "").replace( sufix, "") data_semeadura = dt.strptime(data_txt_semeadura, mask) data_txt_colheita = images_super[ cenaColheita].file_name.replace(prefix, "").replace(sufix, "") data_colheita = dt.strptime(data_txt_colheita, mask) picoMenosSemeadura = data_pico - data_semeadura ColheitaMenosPico = data_colheita - data_pico data_semeadura += timedelta( (picoMenosSemeadura.days * avanco_semeadura).days) data_colheita += timedelta( (ColheitaMenosPico.days * avanco_colheita).days) dia_juliano_semeadura = data_semeadura.timetuple().tm_yday imagem_semeadura[i_linhas][i_coluna] = ( (data_semeadura.year * 1000) + dia_juliano_semeadura) dia_juliano_colheita = data_colheita.timetuple().tm_yday imagem_colheita[i_linhas][i_coluna] = ( (data_colheita.year * 1000) + dia_juliano_colheita) saida = TableData() imagem_semeadura = RasterFile(data=imagem_semeadura) imagem_semeadura.metadata = images_super[0].metadata imagem_semeadura.data_name = "semeadura" imagem_colheita = RasterFile(data=imagem_colheita) imagem_colheita.metadata = images_super[0].metadata imagem_colheita.data_name = "colheita" imagem_pico = RasterFile(data=imagem_pico) imagem_pico.metadata = images_super[0].metadata imagem_pico.data_name = "cenaPico" saida["imagem_semeadura"] = imagem_semeadura saida["imagem_colheita"] = imagem_colheita saida["imagem_pico"] = imagem_pico return saida
def __execOperation__(self): self.print_text(u"Iniciando função") images_super = self.paramentrosIN_carregados["images"] self.console(u"Número de imagens para ler: " + str(len(images_super))) #nullValue = self.paramentrosIN_carregados["null_value"] statistics = self.paramentrosIN_carregados["statistics"] #self.print_text("Estatisticas a fazer: ", statistics) doMedia = "media" in statistics doCV = "cv" in statistics doSD = "sd" in statistics doSoma = "soma" in statistics doMin = "min" in statistics doMax = "max" in statistics doMediana = "mediana" in statistics doAmplitude = "amplitude" in statistics imagem_referencia = images_super[0].loadRasterData() n_linhas = len(imagem_referencia) n_colunas = len(imagem_referencia[0]) for img in images_super: img = img.loadRasterData() if len(img) != n_linhas or len(img[0]) != n_colunas: raise IndexError( "Erro - As imagens precisam ter o mesmo número de linhas e colunas" ) imagem_referencia = np.zeros((n_linhas, n_colunas)) if doMedia: imagem_media = array(imagem_referencia).astype(dtype="float32") if doCV: imagem_cv = array(imagem_referencia).astype(dtype="float32") if doSD: imagem_sd = array(imagem_referencia) #.astype(dtype="int16") if doSoma: imagem_soma = array(imagem_referencia).astype(dtype="float32") if doMin: imagem_min = array(imagem_referencia).astype(dtype="float32") if doMax: imagem_max = array(imagem_referencia).astype(dtype="float32") if doMediana: imagem_mediana = array(imagem_referencia) #.astype(dtype="int16") if doAmplitude: imagem_amplitude = array(imagem_referencia).astype(dtype="float32") self.print_text(u"Processando:") if doSoma: n_imagens = len(images_super) self.print_text(u"Somando Imagens:") progress(0.0) for i in range(n_imagens - 1): imagem_soma += images_super[i + 1].loadRasterData() self.setProgresso(i, n_imagens) #progress( 0.0) if doMedia or doCV or doSD or doMin or doMax or doMediana or doAmplitude: images = images_super.loadListRasterData() for i_linha in range(0, n_linhas): #status = i_linha+1/float(n_linhas) #progress(float(i_linha/float(n_linhas))) self.progresso = (float(i_linha / float(n_linhas))) * 100 for i_coluna in range(0, n_colunas): line = list() if threading.currentThread().stopped(): return for img in images: line.append(img[i_linha][i_coluna]) mean = None sd = None if doCV: mean = np.nanmean(line) sd = np.nanstd(line) divisor = mean * 100 if divisor != 0: cv = sd / mean * 100 else: cv = 0 imagem_cv[i_linha][i_coluna] = cv if doMedia: if mean == None: mean = np.nanmean(line) # calcula a média imagem_media[i_linha][i_coluna] = mean if doSD: if sd == None: sd = np.nanstd(line) # calcula o desvio padrão imagem_sd[i_linha][i_coluna] = sd #if doSoma : #soma = np.nansum(line) #imagem_soma[i_linha][i_coluna] = soma minimo = None if doMin: minimo = np.nanmin(line) imagem_min[i_linha][i_coluna] = minimo maximo = None if doMax: maximo = np.nanmax(line) imagem_max[i_linha][i_coluna] = maximo if doMediana: mediana = np.nanmedian(line) imagem_mediana[i_linha][i_coluna] = mediana if doAmplitude: if minimo == None: minimo = np.nanmin(line) if maximo == None: maximo = np.nanmax(line) amplitude = maximo - minimo imagem_amplitude[i_linha][i_coluna] = amplitude self.print_text(u"Arrumando imagens de saida") saida = SerialFile() saida.metadata = self.paramentrosIN_carregados["images"][0].metadata if doMedia: imagem_media = RasterFile(data=imagem_media) imagem_media.metadata = saida.metadata imagem_media.file_name = "imagem_media" saida.append(imagem_media) if doCV: imagem_cv = RasterFile(data=imagem_cv) imagem_cv.metadata = saida.metadata imagem_cv.file_name = "imagem_coeficiente_variacao" saida.append(imagem_cv) if doSD: imagem_sd = RasterFile(data=imagem_sd) imagem_sd.metadata = saida.metadata imagem_sd.file_name = "imagem_desvio_padrao" saida.append(imagem_sd) if doSoma: imagem_soma = RasterFile(data=imagem_soma) imagem_soma.metadata = saida.metadata imagem_soma.file_name = "imagem_soma" saida.append(imagem_soma) if doMin: imagem_min = RasterFile(data=imagem_min) imagem_min.metadata = saida.metadata imagem_min.file_name = "imagem_minimo" saida.append(imagem_min) if doMax: imagem_max = RasterFile(data=imagem_max) imagem_max.metadata = saida.metadata imagem_max.file_name = "imagem_maximo" saida.append(imagem_max) if doMediana: imagem_mediana = RasterFile(data=imagem_mediana) imagem_mediana.metadata = saida.metadata imagem_mediana.file_name = "imagem_mediana" saida.append(imagem_mediana) if doAmplitude: imagem_amplitude = RasterFile(data=imagem_amplitude) imagem_amplitude.metadata = saida.metadata imagem_amplitude.file_name = "imagem_amplitude" saida.append(imagem_amplitude) self.print_text( u"imagens prontas para gravar, statistical stractor completo") return saida
def __execOperation__(self): serie_T = self.paramentrosIN_carregados["T"].loadListByRoot() serie_PPR = self.paramentrosIN_carregados["PPR"] self.Cc = self.paramentrosIN_carregados["Cc"] matriz = serie_T[0] matriz_ = matriz.loadRasterData() info = matriz.getRasterInformation() nullValue = info["NoData"] img_lat = self.img_lat_long(info, matriz_, nullValue) lat_rad = np.radians(img_lat) a = float(180)/np.pi ii=1 for T in serie_T: if threading.currentThread().stopped() : return start = time.time() T_ = np.array(T.loadRasterData()).astype(dtype="float32") data_T = serie_T.getDate_time(file=T) dj = data_T.timetuple().tm_yday # Dia Juliano #print dj declinacao_solar = 23.45 * np.sin(np.radians((float(360)/float(365)) * (float(dj)-float(80)))) declinacao_solar_r = np.radians(declinacao_solar) angulo_solar = np.arccos(np.radians(-np.tan(lat_rad) * np.tan(declinacao_solar_r))) * a "DR = Distancia relativa sol-terra" agulo_solar_r = np.radians(angulo_solar) if declinacao_solar != 0: DR = 1 + 0.0033 * np.cos(np.radians(360/(365*declinacao_solar))) else : DR = 1 radiacao_topo_atmosfera = 37.6 * DR * ((np.pi/180) * angulo_solar * np.sin(declinacao_solar_r) * np.sin(lat_rad) + np.cos(declinacao_solar_r) * np.cos(lat_rad) * np.sin(agulo_solar_r)) #radiacao_topo_atmosfera = radiacao_topo_atmosfera * 23.92344 ctn = 0.583 + 0.014 * T_ + 0.0013 * (T_**2) - 0.000037 * (T_**3) ctc = -0.0425 + 0.035 * T_ + 0.00325 * (T_**2) - 0.0000925 * (T_**3) n_t = range(len(T_)) for i in n_t: index = [(T_[i]<16.5) & (T_[i]>37)] ctn[i][index] = -0.0425 + 0.035 * T_[i][index] + 0.00325 * (T_[i][index]**2) - 0.0000925 * (T_[i][index]**3) ctc[i][index] = -1.085 + 0.07 * T_[i][index] + 0.0065 * (T_[i][index]**2) - 0.000185 * (T_[i][index]**3) PPBn = (31.7+0.219*radiacao_topo_atmosfera) * ctn * 0.6 PPBc = (107.2+0.219*radiacao_topo_atmosfera) * ctc * 0.6 PPBp = PPBn + PPBc PPR_ = 0.265455 * self.Cc * PPBp PPR = RasterFile(file_path=serie_PPR.root_path, ext="tif") PPR = serie_PPR.setDate_time(data_T, file=PPR) PPR.metadata = T.metadata PPR.data = PPR_ PPR.saveRasterData() PPR.data = None serie_PPR.append(PPR) ii +=1 end = time.time() self.console("tempo restante(m):" + str( np.round(((end - start) * (len(serie_T)-ii)) /60, 2))) self.setProgresso(ii, len(serie_T)) return serie_PPR
def __execOperation__(self): global nullValue, imagem_media, imagem_sd, imagem_cv, imagem_soma, imagem_min, imagem_max global imagem_mediana, imagem_amplitude, images, n_linhas, n_colunas, threads_ready, n_threadings print("executando operação") images_super = self.paramentrosIN_carregados["images"] print("Numero de imagens para ler: " + str(len(images_super))) nullValue = np.double(images_super[0].getRasterInformation()["NoData"]) statistics = self.paramentrosIN_carregados["statistics"] print("Estatisticas a fazer: ", statistics) do = dict() do["Media"] = "media" in statistics do["CV"] = "cv" in statistics do["SD"] = "sd" in statistics do["Soma"] = "soma" in statistics do["Min"] = "min" in statistics do["Max"] = "max" in statistics do["Mediana"] = "mediana" in statistics do["Amplitude"] = "amplitude" in statistics images = images_super.loadListRasterData() print("Numero de imagens lidas: " + str(len(images))) n_linhas = len(images[0]) n_colunas = len(images[0][0]) for img in images: if len(img) != n_linhas or len(img[0]) != n_colunas: raise IndexError("Erro - As imagens precisam ter o mesmo número de linhas e colunas") print("numero de colunas e linhas: " + str(n_linhas) + " : " + str(n_colunas)) #imagem_referencia = [[0 for x in range(n_colunas)] for x in range(n_linhas)] imagem_referencia = np.zeros((n_linhas, n_colunas)) imagem_out = dict if do["Media"] : imagem_out["media"] = array(imagem_referencia)#.astype(dtype="int16") if do["CV"] : imagem_out["cv"] = array(imagem_referencia)#.astype(dtype="int16") if do["SD"] : imagem_out["sd"] = array(imagem_referencia)#.astype(dtype="int16") if do["Soma"] : imagem_out["soma"] = array(imagem_referencia)#.astype(dtype="int16") if do["Min"] : imagem_out["min"] = array(imagem_referencia)#.astype(dtype="int16") if do["Max"] : imagem_out["max"] = array(imagem_referencia)#.astype(dtype="int16") if do["Mediana"] : imagem_out["mediana"] = array(imagem_referencia)#.astype(dtype="int16") if do["Amplitude"] : imagem_out["amplitude"] = array(imagem_referencia)#.astype(dtype="int16") print("processando:") numero_de_nucleos = GeneralTools.available_cpu_count() n_threadings = int(numero_de_nucleos-2) print ("Numero de threads", n_threadings) threads_ready = 0 pool = Pool() #pool = multiprocessing.Pool(processes=n_threadings) for i in range(0, n_threadings): #t = threading.Thread(target=thread_process, args=(n_linhas/n_threadings*i, n_linhas/n_threadings*(i+1))) #t.start() linha_inicial = n_linhas/n_threadings*i linha_final = n_linhas/n_threadings*(i+1) p = Process(target= thread_process, args=(linha_inicial, linha_final)) p.start() #pool.map(thread_process(n_linhas/n_threadings*i, n_linhas/n_threadings*(i+1))) #pool.close() while (threads_ready < n_threadings): pass print("Arrumando imagens de saida") saida = SerialFile () saida.metadata = self.paramentrosIN_carregados["images"][0].metadata if do["Media"]: imagem_media = RasterFile(data = imagem_media) imagem_media.metadata = saida.metadata imagem_media.file_name = "imagem_media" saida.append(imagem_media) if do["CV"]: imagem_cv = RasterFile(data = imagem_cv) imagem_cv.metadata = saida.metadata imagem_cv.file_name = "imagem_coeficiente_variacao" saida.append(imagem_cv) if do["SD"] : imagem_sd = RasterFile(data = imagem_sd) imagem_sd.metadata = saida.metadata imagem_sd.file_name = "imagem_desvio_padrao" saida.append(imagem_sd) if do["Soma"] : imagem_soma = RasterFile(data = imagem_soma) imagem_soma.metadata = saida.metadata imagem_soma.file_name = "imagem_soma" saida.append(imagem_soma) if do["Min"] : imagem_min = RasterFile(data = imagem_min) imagem_min.metadata = saida.metadata imagem_min.file_name = "imagem_minimo" saida.append(imagem_min) if do["Max"] : imagem_max = RasterFile(data = imagem_max) imagem_max.metadata = saida.metadata imagem_max.file_name = "imagem_maximo" saida.append(imagem_max) if do["Mediana"] : imagem_mediana = RasterFile(data = imagem_mediana) imagem_mediana.metadata = saida.metadata imagem_mediana.file_name = "imagem_mediana" saida.append(imagem_mediana) if do["Amplitude"] : imagem_amplitude = RasterFile(data = imagem_amplitude) imagem_amplitude.metadata = saida.metadata imagem_amplitude.file_name = "imagem_amplitude" saida.append(imagem_amplitude) print("imagens prontas para gravar, statistical stractor completo") return saida
def __execOperation__(self): prefix = self.paramentrosIN_carregados["prefixo"] sufix = self.paramentrosIN_carregados["sufixo"] mask = self.paramentrosIN_carregados["mask"] images_super = self.paramentrosIN_carregados["images"] avanco_semeadura = self.paramentrosIN_carregados["avanco_semeadura"] avanco_semeadura = avanco_semeadura avanco_colheita = self.paramentrosIN_carregados["avanco_colheita"] avanco_colheita = avanco_colheita intervalo_semeadura = self.paramentrosIN_carregados["intervalo_semeadura"] intervalo_pico = self.paramentrosIN_carregados["intervalo_pico"] intervalo_colheita = self.paramentrosIN_carregados["intervalo_colheita"] #barra_progresso = self.paramentrosIN_carregados["progress_bar"] intervalo_semeadura = intervalo_semeadura.split("-") intervalo_pico = intervalo_pico.split("-") intervalo_colheita = intervalo_colheita.split("-") images = images_super.loadListRasterData() if images==None: raise Exception("A funcao necessita de uma serie de imagens para funcionar") n_images = len(images) n_linhas = len(images[0]) n_colunas = len(images[0][0]) #nullValue = float(self.paramentrosIN_carregados["null_value"]) #if(images[0][0][0] == nullValue) : print("null value igual") #else : print("diferente") sys.stdout.write( "Criando imagens de referencia: ") self.print_text(u"Criando imagens de referência.") imagem_referencia = np.zeros((n_linhas, n_colunas)) imagem_semeadura = array(imagem_referencia).astype(dtype="int32") imagem_colheita = array(imagem_referencia).astype(dtype="int32") imagem_pico = array(imagem_referencia).astype(dtype="int32") sys.stdout.write( "Gerando estimativas: ") self.print_text("Gerando estimativas.") progress(0.0) imagem_for_null_value = images[0] nullValue = imagem_for_null_value[0][0] #print(nullValue) avanco_semeadura = timedelta(avanco_semeadura) avanco_colheita = timedelta(avanco_colheita) images_super[0].metadata.update(nodata=0) #print images_super[0].metadata for i_linhas in range(0, n_linhas): progress(i_linhas/float(n_linhas)) self.progresso = (i_linhas/float(n_linhas)) * 100 for i_coluna in range(0, n_colunas): line = list() if threading.currentThread().stopped() : return if nullValue != imagem_for_null_value[i_linhas][i_coluna] : for img in images: line.append(img[i_linhas][i_coluna]) cenaPico = self.findPeakHelper(line, int(intervalo_pico[0]), int(intervalo_pico[1])) # 3 - 23 data_txt_pico = images_super[cenaPico].file_name.replace(prefix, "").replace(sufix, "") data_pico = dt.strptime(data_txt_pico, mask) ano_pico = data_pico.year dia_juliano = data_pico.timetuple().tm_yday imagem_pico[i_linhas][i_coluna] = ((ano_pico * 1000) + dia_juliano) cenaSemeadura = self.findLowPeakHelper(line, int(intervalo_semeadura[0]), int(intervalo_semeadura[1])) # 6 - 23 cenaColheita = self.findLowPeakHelper(line, int(intervalo_colheita[0]), int(intervalo_colheita[1])) # 11 - 34 data_txt_semeadura = images_super[cenaSemeadura].file_name.replace(prefix, "").replace(sufix, "") data_semeadura = dt.strptime(data_txt_semeadura, mask) data_txt_colheita = images_super[cenaColheita].file_name.replace(prefix, "").replace(sufix, "") data_colheita = dt.strptime(data_txt_colheita, mask) picoMenosSemeadura = data_pico - data_semeadura ColheitaMenosPico = data_colheita - data_pico data_semeadura += timedelta((picoMenosSemeadura.days * avanco_semeadura).days) data_colheita += timedelta((ColheitaMenosPico.days * avanco_colheita).days) dia_juliano_semeadura = data_semeadura.timetuple().tm_yday imagem_semeadura[i_linhas][i_coluna] = ((data_semeadura.year * 1000) + dia_juliano_semeadura) dia_juliano_colheita = data_colheita.timetuple().tm_yday imagem_colheita[i_linhas][i_coluna] = ((data_colheita.year * 1000) + dia_juliano_colheita) saida = TableData() imagem_semeadura = RasterFile(data=imagem_semeadura) imagem_semeadura.metadata = images_super[0].metadata imagem_semeadura.data_name = "semeadura" imagem_colheita = RasterFile(data=imagem_colheita) imagem_colheita.metadata = images_super[0].metadata imagem_colheita.data_name = "colheita" imagem_pico = RasterFile(data=imagem_pico) imagem_pico.metadata = images_super[0].metadata imagem_pico.data_name = "cenaPico" saida["imagem_semeadura"] = imagem_semeadura saida["imagem_colheita"] = imagem_colheita saida["imagem_pico"] = imagem_pico return saida
from Modelo.beans import RasterFile root = "D:\\1 - Mestrado (segundo semestre)\\Dissertacao\\Estudo de caso\\Cubos\\" path = root + "Cubo_Ya_invertido.tif" import numpy as np raster = RasterFile(file_full_path = path) data_raster = raster.loadRasterData(True) nodata = raster.metadata["nodata"] metadata = raster.metadata metadata["count"] = 1 print raster.metadata soma = imagem_kc_ = np.zeros((len(data_raster[1]), len(data_raster[1][0]))).astype(dtype="float32") for band in data_raster: soma += band saida = RasterFile(file_full_path= path) saida.file_name = "ya_invertido_soma" saida.metadata = raster.metadata saida.data = soma saida.saveRasterData()
def __execOperation__(self): self.console(u"Iniciando parametros.") serie_T = self.paramentrosIN_carregados["T"].loadListByRoot() serie_PPR = self.paramentrosIN_carregados["PPR"] self.Cc = self.paramentrosIN_carregados["Cc"] matriz = serie_T[0] matriz_ = matriz.loadRasterData() info = matriz.getRasterInformation() nullValue = info["NoData"] img_lat = self.img_lat_long(info, matriz_, nullValue) lat_rad = np.radians(img_lat) a = float(180) / np.pi ii = 1 n_imagens = len(serie_T) self.console(u"Número de imagens de encontradas: " + str(n_imagens)) self.console(u"Processando...") for T in serie_T: if threading.currentThread().stopped(): return #start = time.time() T_ = np.array(T.loadRasterData()).astype(dtype="float32") data_T = serie_T.getDate_time(file=T) dj = data_T.timetuple().tm_yday # Dia Juliano #print dj declinacao_solar = 23.45 * np.sin( np.radians( (float(360) / float(365)) * (float(dj) - float(80)))) declinacao_solar_r = np.radians(declinacao_solar) angulo_solar = np.arccos( np.radians(-np.tan(lat_rad) * np.tan(declinacao_solar_r))) * a "DR = Distancia relativa sol-terra" agulo_solar_r = np.radians(angulo_solar) if declinacao_solar != 0: DR = 1 + 0.0033 * np.cos( np.radians(360 / (365 * declinacao_solar))) else: DR = 1 radiacao_topo_atmosfera = 37.6 * DR * ( (np.pi / 180) * angulo_solar * np.sin(declinacao_solar_r) * np.sin(lat_rad) + np.cos(declinacao_solar_r) * np.cos(lat_rad) * np.sin(agulo_solar_r)) #radiacao_topo_atmosfera = radiacao_topo_atmosfera * 23.92344 ctn = 0.583 + 0.014 * T_ + 0.0013 * (T_**2) - 0.000037 * (T_**3) ctc = -0.0425 + 0.035 * T_ + 0.00325 * (T_**2) - 0.0000925 * (T_** 3) n_t = range(len(T_)) for i in n_t: index = [(T_[i] < 16.5) & (T_[i] > 37)] ctn[i][index] = -0.0425 + 0.035 * T_[i][index] + 0.00325 * ( T_[i][index]**2) - 0.0000925 * (T_[i][index]**3) ctc[i][index] = -1.085 + 0.07 * T_[i][index] + 0.0065 * ( T_[i][index]**2) - 0.000185 * (T_[i][index]**3) PPBn = (31.7 + 0.219 * radiacao_topo_atmosfera) * ctn * 0.6 PPBc = (107.2 + 0.219 * radiacao_topo_atmosfera) * ctc * 0.6 PPBp = PPBn + PPBc PPR_ = 0.265455 * self.Cc * PPBp PPR = RasterFile(file_path=serie_PPR.root_path, ext="tif") PPR = serie_PPR.setDate_time(data_T, file=PPR) PPR.metadata = T.metadata #print (PPR.metadata) PPR_[PPR_ == float('Inf')] = PPR.metadata["nodata"] #ks_[i][taw_[i] == float('NaN')] = -1 PPR.data = PPR_ PPR.metadata.update(dtype=PPR.data.dtype) PPR.saveRasterData() PPR.data = None serie_PPR.append(PPR) ii += 1 #end = time.time() #self.console("tempo restante(m):" + str( np.round(((end - start) * (len(serie_T)-ii)) /60, 2))) self.setProgresso(ii, len(serie_T)) return serie_PPR
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.")
def __execOperation__(self): global nullValue, imagem_media, imagem_sd, imagem_cv, imagem_soma, imagem_min, imagem_max global imagem_mediana, imagem_amplitude, images, n_linhas, n_colunas, threads_ready, n_threadings print("executando operação") images_super = self.paramentrosIN_carregados["images"] print("Numero de imagens para ler: " + str(len(images_super))) nullValue = np.double(images_super[0].getRasterInformation()["NoData"]) statistics = self.paramentrosIN_carregados["statistics"] print("Estatisticas a fazer: ", statistics) do = dict() do["Media"] = "media" in statistics do["CV"] = "cv" in statistics do["SD"] = "sd" in statistics do["Soma"] = "soma" in statistics do["Min"] = "min" in statistics do["Max"] = "max" in statistics do["Mediana"] = "mediana" in statistics do["Amplitude"] = "amplitude" in statistics images = images_super.loadListRasterData() print("Numero de imagens lidas: " + str(len(images))) n_linhas = len(images[0]) n_colunas = len(images[0][0]) for img in images: if len(img) != n_linhas or len(img[0]) != n_colunas: raise IndexError( "Erro - As imagens precisam ter o mesmo número de linhas e colunas" ) print("numero de colunas e linhas: " + str(n_linhas) + " : " + str(n_colunas)) #imagem_referencia = [[0 for x in range(n_colunas)] for x in range(n_linhas)] imagem_referencia = np.zeros((n_linhas, n_colunas)) imagem_out = dict if do["Media"]: imagem_out["media"] = array( imagem_referencia) #.astype(dtype="int16") if do["CV"]: imagem_out["cv"] = array( imagem_referencia) #.astype(dtype="int16") if do["SD"]: imagem_out["sd"] = array( imagem_referencia) #.astype(dtype="int16") if do["Soma"]: imagem_out["soma"] = array( imagem_referencia) #.astype(dtype="int16") if do["Min"]: imagem_out["min"] = array( imagem_referencia) #.astype(dtype="int16") if do["Max"]: imagem_out["max"] = array( imagem_referencia) #.astype(dtype="int16") if do["Mediana"]: imagem_out["mediana"] = array( imagem_referencia) #.astype(dtype="int16") if do["Amplitude"]: imagem_out["amplitude"] = array( imagem_referencia) #.astype(dtype="int16") print("processando:") numero_de_nucleos = GeneralTools.available_cpu_count() n_threadings = int(numero_de_nucleos - 2) print("Numero de threads", n_threadings) threads_ready = 0 pool = Pool() #pool = multiprocessing.Pool(processes=n_threadings) for i in range(0, n_threadings): #t = threading.Thread(target=thread_process, args=(n_linhas/n_threadings*i, n_linhas/n_threadings*(i+1))) #t.start() linha_inicial = n_linhas / n_threadings * i linha_final = n_linhas / n_threadings * (i + 1) p = Process(target=thread_process, args=(linha_inicial, linha_final)) p.start() #pool.map(thread_process(n_linhas/n_threadings*i, n_linhas/n_threadings*(i+1))) #pool.close() while (threads_ready < n_threadings): pass print("Arrumando imagens de saida") saida = SerialFile() saida.metadata = self.paramentrosIN_carregados["images"][0].metadata if do["Media"]: imagem_media = RasterFile(data=imagem_media) imagem_media.metadata = saida.metadata imagem_media.file_name = "imagem_media" saida.append(imagem_media) if do["CV"]: imagem_cv = RasterFile(data=imagem_cv) imagem_cv.metadata = saida.metadata imagem_cv.file_name = "imagem_coeficiente_variacao" saida.append(imagem_cv) if do["SD"]: imagem_sd = RasterFile(data=imagem_sd) imagem_sd.metadata = saida.metadata imagem_sd.file_name = "imagem_desvio_padrao" saida.append(imagem_sd) if do["Soma"]: imagem_soma = RasterFile(data=imagem_soma) imagem_soma.metadata = saida.metadata imagem_soma.file_name = "imagem_soma" saida.append(imagem_soma) if do["Min"]: imagem_min = RasterFile(data=imagem_min) imagem_min.metadata = saida.metadata imagem_min.file_name = "imagem_minimo" saida.append(imagem_min) if do["Max"]: imagem_max = RasterFile(data=imagem_max) imagem_max.metadata = saida.metadata imagem_max.file_name = "imagem_maximo" saida.append(imagem_max) if do["Mediana"]: imagem_mediana = RasterFile(data=imagem_mediana) imagem_mediana.metadata = saida.metadata imagem_mediana.file_name = "imagem_mediana" saida.append(imagem_mediana) if do["Amplitude"]: imagem_amplitude = RasterFile(data=imagem_amplitude) imagem_amplitude.metadata = saida.metadata imagem_amplitude.file_name = "imagem_amplitude" saida.append(imagem_amplitude) print("imagens prontas para gravar, statistical stractor completo") return saida
def __execOperation__(self): self.print_text(u"Iniciando função") images_super = self.paramentrosIN_carregados["images"] self.console(u"Número de imagens para ler: " + str(len(images_super))) nullValue = self.paramentrosIN_carregados["null_value"] statistics = self.paramentrosIN_carregados["statistics"] #self.print_text("Estatisticas a fazer: ", statistics) doMedia = "media" in statistics doCV = "cv" in statistics doSD = "sd" in statistics doSoma = "soma" in statistics doMin = "min" in statistics doMax = "max" in statistics doMediana = "mediana" in statistics doAmplitude = "amplitude" in statistics images = images_super.loadListRasterData() #self.print_text("Numero de imagens lidas: " + str(len(images))) n_linhas = len(images[0]) n_colunas = len(images[0][0]) for img in images: if len(img) != n_linhas or len(img[0]) != n_colunas: raise IndexError("Erro - As imagens precisam ter o mesmo número de linhas e colunas") #self.print_text("numero de colunas e linhas: " + str(n_linhas) + " : " + str(n_colunas)) #imagem_referencia = [[0 for x in range(n_colunas)] for x in range(n_linhas)] imagem_referencia = np.zeros((n_linhas, n_colunas)) if doMedia : imagem_media = array(imagem_referencia).astype(dtype="float32") if doCV : imagem_cv = array(imagem_referencia).astype(dtype="float32") if doSD : imagem_sd = array(imagem_referencia)#.astype(dtype="int16") if doSoma : imagem_soma = array(imagem_referencia).astype(dtype="float32") if doMin : imagem_min = array(imagem_referencia).astype(dtype="float32") if doMax : imagem_max = array(imagem_referencia).astype(dtype="float32") if doMediana : imagem_mediana = array(imagem_referencia)#.astype(dtype="int16") if doAmplitude : imagem_amplitude = array(imagem_referencia).astype(dtype="float32") self.print_text(u"Processando:") #progress( 0.0) for i_linha in range(0, n_linhas): #status = i_linha+1/float(n_linhas) #progress(float(i_linha/float(n_linhas))) self.progresso = (float(i_linha/float(n_linhas)))*100 for i_coluna in range(0, n_colunas): line = list() if threading.currentThread().stopped() : return #if nullValue != None and float(nullValue) == images[1][i_linha][i_coluna] : #pass #else: for img in images: line.append(img[i_linha][i_coluna]) mean = None sd = None if doCV : mean = np.nanmean(line) sd = np.nanstd(line) divisor = mean * 100 if divisor != 0 : cv = sd / mean * 100 else : cv = 0 imagem_cv[i_linha][i_coluna] = cv if doMedia : if mean == None : mean = np.nanmean(line) # calcula a média imagem_media[i_linha][i_coluna] = mean if doSD : if sd == None : sd = np.nanstd(line) # calcula o desvio padrão imagem_sd[i_linha][i_coluna] = sd if doSoma : soma = np.nansum(line) imagem_soma[i_linha][i_coluna] = soma minimo = None if doMin : minimo = np.nanmin(line) imagem_min[i_linha][i_coluna] = minimo maximo = None if doMax : maximo = np.nanmax(line) imagem_max[i_linha][i_coluna] = maximo if doMediana : mediana = np.nanmedian(line) imagem_mediana[i_linha][i_coluna] = mediana if doAmplitude : if minimo == None : minimo = np.nanmin(line) if maximo == None : maximo = np.nanmax(line) amplitude = maximo - minimo imagem_amplitude[i_linha][i_coluna] = amplitude self.print_text(u"Arrumando imagens de saida") saida = SerialFile () saida.metadata = self.paramentrosIN_carregados["images"][0].metadata if doMedia: imagem_media = RasterFile(data = imagem_media) imagem_media.metadata = saida.metadata imagem_media.file_name = "imagem_media" saida.append(imagem_media) if doCV: imagem_cv = RasterFile(data = imagem_cv) imagem_cv.metadata = saida.metadata imagem_cv.file_name = "imagem_coeficiente_variacao" saida.append(imagem_cv) if doSD : imagem_sd = RasterFile(data = imagem_sd) imagem_sd.metadata = saida.metadata imagem_sd.file_name = "imagem_desvio_padrao" saida.append(imagem_sd) if doSoma : imagem_soma = RasterFile(data = imagem_soma) imagem_soma.metadata = saida.metadata imagem_soma.file_name = "imagem_soma" saida.append(imagem_soma) if doMin : imagem_min = RasterFile(data = imagem_min) imagem_min.metadata = saida.metadata imagem_min.file_name = "imagem_minimo" saida.append(imagem_min) if doMax : imagem_max = RasterFile(data = imagem_max) imagem_max.metadata = saida.metadata imagem_max.file_name = "imagem_maximo" saida.append(imagem_max) if doMediana : imagem_mediana = RasterFile(data = imagem_mediana) imagem_mediana.metadata = saida.metadata imagem_mediana.file_name = "imagem_mediana" saida.append(imagem_mediana) if doAmplitude : imagem_amplitude = RasterFile(data = imagem_amplitude) imagem_amplitude.metadata = saida.metadata imagem_amplitude.file_name = "imagem_amplitude" saida.append(imagem_amplitude) self.print_text(u"imagens prontas para gravar, statistical stractor completo") return saida