Source code for preprocessor.preprocessor_iceye_helpers

import os
import structlog
import shutil
from os.path import join, basename
import xml.etree.ElementTree as ET
from .util import get_all_data_files

logger = structlog.getLogger(__name__)


[docs]def get_rpc_value(tag, root): return root.find(".//{}".format(tag)).text
[docs]def extract_rpc_to_text_file( source_dir: os.PathLike, target_dir: os.PathLike, preprocess_config: dict, glob: str = "*ICEYE.xml", output_file_name: str = "ICEYE.rpc", ): filenames = get_all_data_files(source_dir, preprocess_config, [glob]) # working in source_dir to be picked up later by move operation target_filename = join(target_dir, output_file_name) if len(filenames) > 0: # read file and parse XML tree = ET.parse(filenames[0]) root = tree.getroot() # extract RPC metadata rpc_data_dict = extract_rpc_metadata(root) logger.info(f"Writing a new RPC file: {target_filename}") with open(target_filename, "w") as w: for rpc_variable_name, value in rpc_data_dict.items(): w.write(f"{rpc_variable_name}: {value}\n") # copy everything else to target_dir for input_filename in get_all_data_files(source_dir, preprocess_config, "**"): target_filename = join(target_dir, basename(input_filename)) shutil.move(input_filename, target_filename)
[docs]def extract_rpc_metadata(root: ET.Element): data = {} rpc_variables = [ "LINE_OFF", "SAMP_OFF", "LAT_OFF", "LONG_OFF", "HEIGHT_OFF", "LINE_SCALE", "SAMP_SCALE", "LAT_SCALE", "LONG_SCALE", "HEIGHT_SCALE", ] rpc_multiple_variables = [ "LINE_NUM_COEFF", "LINE_DEN_COEFF", "SAMP_NUM_COEFF", "SAMP_DEN_COEFF", ] for rpc_variable in rpc_variables: data[rpc_variable] = get_rpc_value(rpc_variable, root) for rpc_multiple_variable in rpc_multiple_variables: text = get_rpc_value(rpc_multiple_variable, root) # text handling and cleanup values = text.replace("\n", "").strip().replace(" ", " ").split(" ") for i, value in enumerate(values): # save values with 1 based index as for example LINE_NUM_COEFF_1 ... 20 data[f"{rpc_multiple_variable}_{i + 1}"] = value logger.debug(f"Extracted following RPC metadata {data}") return data