diff --git a/CHANGELOG.md b/CHANGELOG.md index bd25d60c1e3b0f50d9caf376c0897db19a9dfc0b..b846ea7bcda6c3eaaafb2d1d5c922fd0192bdd0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/). ## [Unreleased] +### Changed +- IGNGPF-4603: modify get_name_from_template to work without tile_size and origin parameters ## [1.11.2] - 2025-05-14 ### Changed diff --git a/gpf_common_point_cloud/utils/laslaz_utils.py b/gpf_common_point_cloud/utils/laslaz_utils.py index 435bb44b3febf3c5b4e8e4b0f9ee2f98c8b3038c..605973551883682ea52196d2c3450935d2739b6f 100644 --- a/gpf_common_point_cloud/utils/laslaz_utils.py +++ b/gpf_common_point_cloud/utils/laslaz_utils.py @@ -129,19 +129,21 @@ def _get_file_version(metadata: dict) -> str: ) -def correct_max_coord(coord: float, origin: float, tile_size: float) -> float: +def correct_max_coord( + coord: float, origin: float | None, tile_size: float | None +) -> float: """ Correct max coordinate part Args: coord (float): coordinate part to correct - origin (float): grid origin - tile_size (float): tile size + origin (float | None): grid origin + tile_size (float | None): tile size Returns: float: corrected coordinate part """ - if tile_size <= 0: + if tile_size is None or origin is None: return coord shift = (coord - origin) % tile_size @@ -151,19 +153,21 @@ def correct_max_coord(coord: float, origin: float, tile_size: float) -> float: return coord -def correct_min_coord(coord: float, origin: float, tile_size: float) -> float: +def correct_min_coord( + coord: float, origin: float | None, tile_size: float | None +) -> float: """ Correct min coordinate part Args: coord (float): coordinate part to correct - origin (float): grid origin - tile_size (float): tile size + origin (float | None): grid origin + tile_size (float | None): tile size Returns: float: corrected coordinate part """ - if tile_size <= 0: + if tile_size is None or origin is None: return coord shift = (coord - origin) % tile_size @@ -204,7 +208,10 @@ def is_template_valid(template) -> bool: def get_name_from_template( - metadata: dict, template: str, origin: dict, tile_size: float + metadata: dict, + template: str, + origin: dict | None = None, + tile_size: float | None = None, ) -> str | None: """ Compute file name from a template @@ -212,17 +219,20 @@ def get_name_from_template( Args: metadata (dict): Metadata of the file from the PDAL LAS reader template (str): Template to use - origin (dict): Origin of tiling {"x": string, "y": string} - tile_size (float): Tile size + origin (dict | None): Origin of tiling {"x": string, "y": string} + tile_size (float | None): Tile size Returns: str: The computed file name """ reader_metadata: dict = metadata[READER_NAME] - x_min = correct_min_coord(reader_metadata[MINX_FIELD], origin["x"], tile_size) - x_max = correct_max_coord(reader_metadata[MAXX_FIELD], origin["x"], tile_size) - y_min = correct_min_coord(reader_metadata[MINY_FIELD], origin["y"], tile_size) - y_max = correct_max_coord(reader_metadata[MAXY_FIELD], origin["y"], tile_size) + origin_x = origin["x"] if origin and "x" in origin else None + origin_y = origin["y"] if origin and "y" in origin else None + + x_min = correct_min_coord(reader_metadata[MINX_FIELD], origin_x, tile_size) + x_max = correct_max_coord(reader_metadata[MAXX_FIELD], origin_x, tile_size) + y_min = correct_min_coord(reader_metadata[MINY_FIELD], origin_y, tile_size) + y_max = correct_max_coord(reader_metadata[MAXY_FIELD], origin_y, tile_size) values: dict = { "x_min": x_min, diff --git a/tests/test_laslaz_utils.py b/tests/test_laslaz_utils.py index acb9445095d06b162c3903036f68a36bae3adc3d..bf9f1eee956b6587cd4b538d1c9287d24c5bdaca 100644 --- a/tests/test_laslaz_utils.py +++ b/tests/test_laslaz_utils.py @@ -321,7 +321,7 @@ class TestLaslazUtils(unittest.TestCase): self.TEST_GET_NAME_FROM_TEMPLATE_METADATA, template="tile.copc.laz", origin={"x": 0, "y": 0}, - tile_size=1000, + tile_size=None, ) # Then @@ -351,6 +351,18 @@ class TestLaslazUtils(unittest.TestCase): # Then self.assertEqual(result, "tile_4860_6732.copc.laz") + def test_get_name_from_template_ok_no_origin_no_tile_size(self): + # When + result: str = get_name_from_template( + self.TEST_GET_NAME_FROM_TEMPLATE_METADATA, + template="tile_{x_min/100}_{y_max/1000}.copc.laz", + origin=None, + tile_size=None, + ) + + # Then + self.assertEqual(result, "tile_4860_6732.copc.laz") + def test_get_name_from_template_ok_formatters(self): # When result: str = get_name_from_template( @@ -428,11 +440,11 @@ class TestLaslazUtils(unittest.TestCase): # Then self.assertEqual(19000.0, result) - def test_correct_max_coord_tile_size_le_0(self): + def test_correct_max_coord_tile_size_none(self): # Given coord = 486930 origin = 0 - tile_size = 0 + tile_size = None # When result = correct_max_coord(coord, origin, tile_size) @@ -440,10 +452,34 @@ class TestLaslazUtils(unittest.TestCase): # Then self.assertEqual(coord, result) - def test_correct_min_coord_tile_size_le_0(self): + def test_correct_min_coord_tile_size_none(self): # Given coord = 486930 origin = 0 + tile_size = None + + # When + result = correct_min_coord(coord, origin, tile_size) + + # Then + self.assertEqual(coord, result) + + def test_correct_max_coord_origin_none(self): + # Given + coord = 486930 + origin = None + tile_size = 0 + + # When + result = correct_max_coord(coord, origin, tile_size) + + # Then + self.assertEqual(coord, result) + + def test_correct_min_coord_origin_none(self): + # Given + coord = 486930 + origin = None tile_size = 0 # When