Files
Aislo/tests/test_b03_file_input_analyze.py
T
2026-07-05 21:27:23 +09:00

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},
)