111 lines
4.2 KiB
Python
111 lines
4.2 KiB
Python
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
import laspy
|
|
import numpy as np
|
|
import rasterio
|
|
from pyproj import CRS
|
|
from rasterio.transform import from_origin
|
|
|
|
from B03_FileInput.B03_FileInput_Engine_Analyze import (
|
|
analyze_input_metadata,
|
|
analyze_las_metadata,
|
|
analyze_prj_metadata,
|
|
analyze_tfw_metadata,
|
|
analyze_tif_metadata,
|
|
)
|
|
|
|
|
|
class AnalyzeLasMetadataTest(unittest.TestCase):
|
|
def test_analyze_las_metadata(self) -> None:
|
|
with tempfile.TemporaryDirectory() as temporary_directory:
|
|
source = Path(temporary_directory) / "sample.las"
|
|
las = laspy.LasData(laspy.LasHeader(point_format=3, version="1.2"))
|
|
las.x = np.array([100.0, 102.0])
|
|
las.y = np.array([200.0, 204.0])
|
|
las.z = np.array([10.0, 14.0])
|
|
las.classification = np.array([2, 5], dtype=np.uint8)
|
|
las.write(source)
|
|
|
|
metadata = analyze_las_metadata(source)
|
|
|
|
self.assertEqual(metadata["file"], "sample.las")
|
|
self.assertEqual(metadata["point_count"], 2)
|
|
self.assertEqual(metadata["bounds"]["x"], [100.0, 102.0])
|
|
self.assertEqual(metadata["bounds"]["y"], [200.0, 204.0])
|
|
self.assertEqual(metadata["bounds"]["z"], [10.0, 14.0])
|
|
self.assertEqual(metadata["classification_summary"], {"2": 1, "5": 1})
|
|
|
|
def test_analyze_prj_metadata(self) -> None:
|
|
with tempfile.TemporaryDirectory() as temporary_directory:
|
|
source = Path(temporary_directory) / "result.prj"
|
|
source.write_text(CRS.from_epsg(5179).to_wkt(), encoding="utf-8")
|
|
|
|
metadata = analyze_prj_metadata(source)
|
|
|
|
self.assertEqual(metadata["file"], "result.prj")
|
|
self.assertEqual(metadata["epsg"], 5179)
|
|
self.assertTrue(metadata["is_valid"])
|
|
|
|
source.write_text("invalid wkt", encoding="utf-8")
|
|
invalid_metadata = analyze_prj_metadata(source)
|
|
self.assertFalse(invalid_metadata["is_valid"])
|
|
self.assertIn("error", invalid_metadata)
|
|
|
|
def test_analyze_tfw_metadata(self) -> None:
|
|
with tempfile.TemporaryDirectory() as temporary_directory:
|
|
source = Path(temporary_directory) / "result.tfw"
|
|
source.write_text("0.5\n0\n0\n-0.5\n100\n200\n", encoding="utf-8")
|
|
|
|
metadata = analyze_tfw_metadata(source)
|
|
|
|
self.assertTrue(metadata["is_valid"])
|
|
self.assertEqual(metadata["pixel_size_x"], 0.5)
|
|
self.assertEqual(metadata["pixel_size_y"], -0.5)
|
|
self.assertEqual(metadata["origin_x"], 100.0)
|
|
self.assertEqual(metadata["origin_y"], 200.0)
|
|
|
|
source.write_text("nan\n0\n0\n-0.5\n100\n200\n", encoding="utf-8")
|
|
with self.assertRaises(ValueError):
|
|
analyze_tfw_metadata(source)
|
|
|
|
def test_analyze_tif_metadata(self) -> None:
|
|
with tempfile.TemporaryDirectory() as temporary_directory:
|
|
source = Path(temporary_directory) / "result.tif"
|
|
with rasterio.open(
|
|
source,
|
|
mode="w",
|
|
driver="GTiff",
|
|
width=3,
|
|
height=2,
|
|
count=1,
|
|
dtype="float32",
|
|
crs="EPSG:5179",
|
|
transform=from_origin(100, 200, 2, 2),
|
|
nodata=-9999,
|
|
) as dataset:
|
|
dataset.write(np.ones((1, 2, 3), dtype=np.float32))
|
|
|
|
metadata = analyze_tif_metadata(source)
|
|
|
|
self.assertEqual(metadata["file"], "result.tif")
|
|
self.assertEqual(metadata["width"], 3)
|
|
self.assertEqual(metadata["height"], 2)
|
|
self.assertEqual(metadata["count"], 1)
|
|
self.assertEqual(metadata["epsg"], 5179)
|
|
self.assertEqual(metadata["resolution"], [2.0, 2.0])
|
|
self.assertEqual(metadata["likely_type"], "dem")
|
|
|
|
def test_analyze_input_metadata(self) -> None:
|
|
with tempfile.TemporaryDirectory() as temporary_directory:
|
|
source = Path(temporary_directory) / "drawing.dxf"
|
|
source.write_bytes(b"0\nSECTION\n")
|
|
|
|
metadata = analyze_input_metadata(source)
|
|
|
|
self.assertEqual(
|
|
metadata,
|
|
{"file": "drawing.dxf", "extension": "dxf", "size_bytes": 10},
|
|
)
|