From 021ef146e681561374583e14c4e6a887bc889a07 Mon Sep 17 00:00:00 2001 From: cuiyyyu <1748614422@qq.com> Date: Thu, 4 Jan 2024 10:28:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8F=B6=E9=9D=A2=E7=A7=AF?= =?UTF-8?q?=E6=8C=87=E6=95=B0=E6=A8=A1=E5=9E=8B=E8=AE=AD=E7=BB=83=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backScattering/BackScattering.xml | 10 +++++----- backScattering/BackScatteringAlg.py | 17 +++++++++++++++++ backScattering/BackScatteringMain.py | 18 ++++++++++++++++-- leafAreaIndex/LeafAreaIndex.xml | 22 +++++++++++----------- leafAreaIndex/LeafIndexMain.py | 2 +- tool/algorithm/block/blockprocess.py | 21 +++++++++++++++++++++ tool/algorithm/image/ImageHandle.py | 3 ++- tool/algorithm/xml/AlgXmlHandle.py | 15 ++++++++++++++- 8 files changed, 87 insertions(+), 21 deletions(-) diff --git a/backScattering/BackScattering.xml b/backScattering/BackScattering.xml index 3dd480a4..8764ff23 100644 --- a/backScattering/BackScattering.xml +++ b/backScattering/BackScattering.xml @@ -1,7 +1,7 @@ CSAR_202107275419_0001-0 - D:\micro\WorkSpace\ + E:\Result_GF3\ File ElementAlg @@ -42,7 +42,7 @@ File tar.gz Cal - E:\MicroWorkspace\GF3-Deformation\GF3-yuan\GF3_KSC_QPSI_036065_E116.4_N44.2_20230616_L1A_AHV_L10006792277.tar.gz + E:\GF3Data\backscatter\GF3_KSC_QPSI_036065_E116.4_N44.2_20230616_L1A_AHV_L10006792277.tar.gz True False File @@ -55,9 +55,9 @@ DEM数字高程影像 30m分辨率DEM数字高程影像 File - File + zip Cal - E:\MicroWorkspace\GF3-Deformation\yuan-gf3-dem + E:\GF3Data\backscatter\ASTGTM2_N43E116_dem.zip True True File @@ -74,7 +74,7 @@ File tar.gz Cal - D:\micro\WorkSpace\BackScattering\Output\GF3_KSC_QPSI_036065_E116.4_N44.2_20230616_L1A_AHV_L10006792277-cal.tar.gz + E:\Result_GF3\BackScattering\Output\GF3_KSC_QPSI_036065_E116.4_N44.2_20230616_L1A_AHV_L10006792277-cal.tar.gz DEFAULT DEFAULT DEFAULT diff --git a/backScattering/BackScatteringAlg.py b/backScattering/BackScatteringAlg.py index 0decf3dd..dd382def 100644 --- a/backScattering/BackScatteringAlg.py +++ b/backScattering/BackScatteringAlg.py @@ -8,6 +8,8 @@ @Date :2021/8/14 @Version :1.0.0 """ +import zipfile + # from re import I, T, X, match # from types import DynamicClassAttribute # from numpy.core.einsumfunc import _parse_possible_contraction @@ -942,6 +944,21 @@ class DEMProcess(object): del in_ds, out_band, out_ds @staticmethod + def unzip_file(zip_file_path, out_path): + # 获取压缩文件所在的目录 + out_path_merg = os.path.join(out_path, 'dem') + os.mkdir(out_path_merg) + + para_value_list = zip_file_path.split(";") + for n in para_value_list: + with zipfile.ZipFile(n, 'r') as zip_ref: + # 解压到和压缩文件同名的文件夹中 + zip_ref.extractall(out_path_merg) + + # 返回解压后文件夹的路径 + # unzipped_folder_path = os.path.join(out_path, os.path.splitext(os.path.basename(zip_file_path))[0]) + return out_path_merg + @staticmethod def dem_clip(OutFilePath, DEMFilePath, SelectArea): ''' 根据选择范围裁剪DEM,并输出 diff --git a/backScattering/BackScatteringMain.py b/backScattering/BackScatteringMain.py index dd0bbbce..67707a36 100644 --- a/backScattering/BackScatteringMain.py +++ b/backScattering/BackScatteringMain.py @@ -10,6 +10,7 @@ """ import logging from tool.algorithm.algtools.logHandler import LogHandler +from tool.algorithm.block.blockprocess import BlockProcess from tool.algorithm.xml.AlgXmlHandle import ManageAlgXML, CheckSource from tool.algorithm.xml.CreateMetaDict import CreateMetaDict, CreateProductXml, OrthoAzimuth from tool.algorithm.image.ImageHandle import ImageHandler @@ -78,7 +79,7 @@ class ScatteringMain: self.__create_work_space() self.__task_id = self.__alg_xml_handler.get_task_id() self.__input_paras = self.__alg_xml_handler.get_input_paras() - self.__in_processing_paras = self.__init_processing_paras(self.__input_paras) + self.__in_processing_paras = self.__init_processing_paras(self.__input_paras, self.__workspace_preprocessing_path) SrcImageName = os.path.split(self.__input_paras["SLC"]['ParaValue'])[1].split('.tar.gz')[0] AlgorithmName = self.__alg_xml_handler.get_algorithm_name() TaskId = self.__alg_xml_handler.get_task_id() @@ -92,7 +93,7 @@ class ScatteringMain: logger.info('progress bar: 30%') return True - def __init_processing_paras(self, names): + def __init_processing_paras(self, names,out_path): """ :param names:字典列表,每个字典为一个输入产品的配置信息 """ @@ -119,6 +120,17 @@ class ScatteringMain: for path in paths: tar_gz_dic = self.__dec_tar_gz(path, self.__workspace_preprocessing_path) processing_paras.update(tar_gz_dic) + elif para['DataType'] == 'zip': + # temp_para = para['ParaValue'].split(".")[0] + para_value_list = para['ParaValue'].split(";") + if len(para_value_list) == 1: + para_path = para['ParaValue'] + if para_path != 'empty' and para_path != '': + file_path = BlockProcess.unzip_file(para_path, out_path) + processing_paras.update({name: os.path.dirname(file_path)}) + else: + file_path = DEMProcess.unzip_file(para['ParaValue'], out_path) + processing_paras.update({name: file_path}) elif para['DataType'] == 'tif' or para['DataType'] == 'tiff': # 新增修改dem数据为文件绝对路径 if para['ParaValue'] != 'empty' and para['ParaValue'] != 'Empty' and para['ParaValue'] != '': para_path_list = para['ParaValue'].split(";") @@ -294,6 +306,8 @@ class ScatteringMain: in_dem_path = self.__in_processing_paras['DEM'] meta_file_path = self.__in_processing_paras['META'] # .meta文件路径 out_dem_path = self.__workspace_preprocessing_path + # unzipped_folder_path = DEMProcess.unzip_file(in_dem_path, self.__workspace_origin_path) # 解压DEM.zip + dem_merged_path=DEMProcess.dem_merged(in_dem_path, meta_file_path, out_dem_path) # 生成TestDEM\mergedDEM_VRT.tif in_slc_path=None diff --git a/leafAreaIndex/LeafAreaIndex.xml b/leafAreaIndex/LeafAreaIndex.xml index 1eb91b67..7fc404dc 100644 --- a/leafAreaIndex/LeafAreaIndex.xml +++ b/leafAreaIndex/LeafAreaIndex.xml @@ -1,7 +1,7 @@ CSAR_202107275419_0001-0 - D:\micro\WorkSpace\ + E:\Result_GF3\ File ElementAlg @@ -53,7 +53,7 @@ File tar.gz Man - E:\MicroWorkspace\Micro\neimenggu\GF3_MDJ_QPSI_031847_E116.4_N43.9_20220828_L1A_AHV_L10006708819-cal.tar.gz + E:\GF3Data\leafindex\GF3_MDJ_QPSI_031847_E116.4_N43.9_20220828_L1A_AHV_L10006708819-cal.tar.gz True False File @@ -81,9 +81,9 @@ 土壤水分产品 土壤水分产品 File - tif + zip Man - E:\MicroWorkspace\Micro\neimenggu\soil_moisture.tif + E:\GF3Data\leafindex\soil_moisture.zip True False File @@ -96,9 +96,9 @@ 叶面积指数实测数据 叶面积指数实测数据 File - csv + zip Man - D:\estar-proj\microproduct_depdence\process_lai\laiplus2.csv + E:\GF3Data\leafindex\laiplus2.zip True False File @@ -111,9 +111,9 @@ NDVI NDVI影像,坐标系要求:WGS84 File - tif + zip Cal - E:\MicroWorkspace\Micro\neimenggu\L9NDVI.tif + E:\GF3Data\leafindex\L9NDVI.zip True False File @@ -141,9 +141,9 @@ 地表覆盖度 地表覆盖度数据,坐标系要求:WGS84 File - tif + zip Cal - E:\MicroWorkspace\Micro\neimenggu\N50_40_2020LC030_geo.tif + E:\GF3Data\leafindex\N50_40_2020LC030_geo.zip True False File @@ -235,7 +235,7 @@ File tar.gz Cal - D:\micro\WorkSpace\LeafAreaIndex\Output\GF3_MDJ_QPSI_031847_E116.4_N43.9_20220828_L1A_AHV_L10006708819-cal-LAI.tar.gz + E:\Result_GF3\LeafAreaIndex\Output\GF3_MDJ_QPSI_031847_E116.4_N43.9_20220828_L1A_AHV_L10006708819-cal-LAI.tar.gz DEFAULT DEFAULT DEFAULT diff --git a/leafAreaIndex/LeafIndexMain.py b/leafAreaIndex/LeafIndexMain.py index 6509085a..2de1c4f0 100644 --- a/leafAreaIndex/LeafIndexMain.py +++ b/leafAreaIndex/LeafIndexMain.py @@ -118,7 +118,7 @@ class LeafIndexMain: self.__sar_tif_name = 'empty' else: raise ValueError("input Para 'Polarization' is not 'HV'、'HH'、'VV'or 'empty'!") - self.__processing_paras = InitPara.init_processing_paras(self.__input_paras) + self.__processing_paras = InitPara.init_processing_paras(self.__input_paras, self.__workspace_preprocessed_path) self.__processing_paras.update(self.get_tar_gz_inf(self.__processing_paras["sar_path0"])) logger.info('check_source success!') return True diff --git a/tool/algorithm/block/blockprocess.py b/tool/algorithm/block/blockprocess.py index 96e508dd..21eb2c78 100644 --- a/tool/algorithm/block/blockprocess.py +++ b/tool/algorithm/block/blockprocess.py @@ -8,6 +8,9 @@ @Date:2021/9/6 @Version:1.0.0 """ +import glob +import zipfile + from osgeo import osr, gdal import numpy as np import os @@ -58,6 +61,24 @@ class BlockProcess: pass return result_dir, result_name + @staticmethod + def unzip_file(zip_file_path, out_path): # ): + # 获取压缩文件所在的目录 + # extract_folder = os.path.dirname(zip_file_path) + basename = os.path.splitext(os.path.basename(zip_file_path))[0] + extract_folder = os.path.join(out_path, basename) + + with zipfile.ZipFile(zip_file_path, 'r') as zip_ref: + # 解压到和压缩文件同名的文件夹中 + zip_ref.extractall(extract_folder) + + # 返回解压后文件夹的路径 + files = list(glob.glob(os.path.join(extract_folder, '*'))) + for file in files: + if basename in os.path.basename(file): + unzipped_folder_path = file + return unzipped_folder_path + @staticmethod def get_same_img(img_dir, img_name): """ diff --git a/tool/algorithm/image/ImageHandle.py b/tool/algorithm/image/ImageHandle.py index dd77b347..35e4d55f 100644 --- a/tool/algorithm/image/ImageHandle.py +++ b/tool/algorithm/image/ImageHandle.py @@ -608,7 +608,8 @@ class ImageHandler: t_data = self.get_data(tif_path) t_data = t_data.astype(float) t_data = np.sqrt(t_data[0] ** 2 + t_data[1] ** 2) - + t_data[np.isnan(t_data)] = 0 + t_data[np.where(t_data == -9999)] = 0 t_r = self.get_img_height(tif_path) t_c = self.get_img_width(tif_path) if t_r > 10000 or t_c > 10000: diff --git a/tool/algorithm/xml/AlgXmlHandle.py b/tool/algorithm/xml/AlgXmlHandle.py index 9d422b45..eec9d5cb 100644 --- a/tool/algorithm/xml/AlgXmlHandle.py +++ b/tool/algorithm/xml/AlgXmlHandle.py @@ -20,6 +20,7 @@ import multiprocessing import ctypes logger = logging.getLogger("mylog") import glob +from tool.algorithm.block.blockprocess import BlockProcess class ManageAlgXML: """ @@ -519,7 +520,7 @@ class InitPara: self._debug = debug @staticmethod - def init_processing_paras(input_paras): + def init_processing_paras(input_paras,out_path): """ :param names:字典列表,每个字典为一个输入产品的配置信息 """ @@ -540,6 +541,18 @@ class InitPara: else: for n, para_value in zip(range(len(para_value_list)), para_value_list): processing_paras.update({name+str(n): para_value}) + elif para['DataType'] == 'zip': + # temp_para = para['ParaValue'].split(".")[0] + para_value_list = out_path.split(";") + if len(para_value_list) == 1: + para_path = para['ParaValue'] + if para_path != 'empty' and para_path != '': + file_path = BlockProcess.unzip_file(para_path, out_path) + processing_paras.update({name: file_path}) + else: + for n, para_value_zip in zip(range(len(para_value_list)), para_value_list): + file_path = BlockProcess.unzip_file(para_value_zip, out_path) + processing_paras.update({name+str(n): file_path}) elif para['DataType'] == 'tar.gz': paths = para['ParaValue'].split(';') for n, path in zip(range(len(paths)), paths):