framework-chl-temp / NetCDFModule.py
NetCDFModule.py
Raw
from fnmatch import fnmatch
import cv2 as cv
import netCDF4 as nc
import numpy as np
from os import system
import os
import glob
from osgeo import gdal

class NetCDFModule(object):
	def __init__(self,_fn=None): #_fn: directorio imágenes netcdf
		self.fn=_fn
		self.LImgClor=[]
		self.LImgCloud=[]
		self.names_images=[]
		self.ref_raster=None
		self.load_ref_raster()

	def load(self):
		os.chdir(self.fn)
		os.getcwd() 
		lista=glob.glob("*.nc")
		for imagen in lista:
			path=self.fn+'\\'+imagen
			ds = nc.Dataset(path)
			clo_cloud = ds['chlor_a_count'][:]
			clo = ds['chlor_a'][:]
			self.LImgClor.append(clo)
			self.LImgCloud.append(clo_cloud)
			self.names_images.append(imagen)
		self.create_folder()

	def load_ref_raster(self):
		self.ref_raster = gdal.Open('ref_im.tif')

	def create_folder(self):
		path_dest1=self.fn+"modis_clo"
		path_dest2=self.fn+"modis_cloud"
		if not os.path.isdir(path_dest1):
			os.makedirs(path_dest1)
		if not os.path.isdir(path_dest2):
			os.makedirs(path_dest2)
		self.save(path_dest1,self.LImgClor,self.names_images,'clora')
		self.save(path_dest2,self.LImgCloud,self.names_images,'cloud')

	def save(self,path_dest,list_images,list_names,keyword):
		NoDataValue=-999
		driver = gdal.GetDriverByName("GTiff")
		for i in range(len(list_images)):
			outFileName=path_dest+'\\'+keyword+'_'+list_names[i]+'.tif'
			outdata = driver.Create(outFileName,list_images[i].shape[1], list_images[i].shape[0], 1, gdal.GDT_Float32)
			outdata.SetGeoTransform(self.ref_raster.GetGeoTransform())
			outdata.SetProjection(self.ref_raster.GetProjection())
			outdata.GetRasterBand(1).WriteArray(list_images[i])
			outdata.GetRasterBand(1).SetNoDataValue(NoDataValue)
			outdata.FlushCache()