prepare: add index module, update pipeline, tests, Dockerfile, and run.sh
This commit is contained in:
@ -110,8 +110,9 @@ class TestDetectGroundMethod:
|
||||
mock_las.points.__len__ = lambda self: len(num_returns)
|
||||
return mock_las
|
||||
|
||||
@patch('lidar_pipeline.dtm.laspy')
|
||||
def test_urban_terrain_returns_csf(self, mock_laspy):
|
||||
@patch('lidar_pipeline.dtm._read_with_pdal')
|
||||
@patch('laspy.read')
|
||||
def test_urban_terrain_returns_csf(self, mock_read, mock_pdal):
|
||||
"""High single-return ratio (>0.6) should select CSF."""
|
||||
from lidar_pipeline.dtm import detect_ground_method
|
||||
|
||||
@ -121,13 +122,14 @@ class TestDetectGroundMethod:
|
||||
num_returns[:int(n * 0.3)] = 2 # 30% multi-return
|
||||
z_values = np.random.normal(100, 5, n) # Low variance = flat terrain
|
||||
|
||||
mock_laspy.read.return_value = self._make_mock_las(num_returns, z_values)
|
||||
mock_read.return_value = self._make_mock_las(num_returns, z_values)
|
||||
|
||||
result = detect_ground_method(Path("/data/input/test.laz"))
|
||||
assert result == 'csf'
|
||||
|
||||
@patch('lidar_pipeline.dtm.laspy')
|
||||
def test_natural_terrain_returns_smrf(self, mock_laspy):
|
||||
@patch('lidar_pipeline.dtm._read_with_pdal')
|
||||
@patch('laspy.read')
|
||||
def test_natural_terrain_returns_smrf(self, mock_read, mock_pdal):
|
||||
"""Low single-return ratio and moderate variance should select SMRF."""
|
||||
from lidar_pipeline.dtm import detect_ground_method
|
||||
|
||||
@ -137,13 +139,14 @@ class TestDetectGroundMethod:
|
||||
num_returns[:int(n * 0.6)] = 2 # 60% multi-return (forest)
|
||||
z_values = np.random.normal(100, 15, n) # Moderate variance
|
||||
|
||||
mock_laspy.read.return_value = self._make_mock_las(num_returns, z_values)
|
||||
mock_read.return_value = self._make_mock_las(num_returns, z_values)
|
||||
|
||||
result = detect_ground_method(Path("/data/input/test.laz"))
|
||||
assert result == 'smrf'
|
||||
|
||||
@patch('lidar_pipeline.dtm.laspy')
|
||||
def test_mountainous_terrain_returns_csf(self, mock_laspy):
|
||||
@patch('lidar_pipeline.dtm._read_with_pdal')
|
||||
@patch('laspy.read')
|
||||
def test_mountainous_terrain_returns_csf(self, mock_read, mock_pdal):
|
||||
"""High variance terrain (>30m std) selects CSF for complex terrain."""
|
||||
from lidar_pipeline.dtm import detect_ground_method
|
||||
|
||||
@ -153,7 +156,7 @@ class TestDetectGroundMethod:
|
||||
num_returns[:int(n * 0.5)] = 2
|
||||
z_values = np.random.normal(100, 50, n) # Very high variance = mountainous
|
||||
|
||||
mock_laspy.read.return_value = self._make_mock_las(num_returns, z_values)
|
||||
mock_read.return_value = self._make_mock_las(num_returns, z_values)
|
||||
|
||||
result = detect_ground_method(Path("/data/input/test.laz"))
|
||||
assert result == 'csf'
|
||||
@ -161,8 +164,7 @@ class TestDetectGroundMethod:
|
||||
|
||||
class TestClassifyGroundMethod:
|
||||
@patch('lidar_pipeline.dtm.subprocess')
|
||||
@patch('lidar_pipeline.dtm.laspy')
|
||||
def test_classify_ground_auto_calls_detect(self, mock_laspy, mock_subprocess):
|
||||
def test_classify_ground_auto_calls_detect(self, mock_subprocess):
|
||||
"""classify_ground with method='auto' should call detect_ground_method."""
|
||||
from lidar_pipeline.dtm import classify_ground
|
||||
|
||||
@ -174,8 +176,7 @@ class TestClassifyGroundMethod:
|
||||
mock_detect.assert_called_once()
|
||||
|
||||
@patch('lidar_pipeline.dtm.subprocess')
|
||||
@patch('lidar_pipeline.dtm.laspy')
|
||||
def test_classify_ground_smrf_uses_smrf_pipeline(self, mock_laspy, mock_subprocess):
|
||||
def test_classify_ground_smrf_uses_smrf_pipeline(self, mock_subprocess):
|
||||
"""classify_ground with method='smrf' should create SMRF pipeline."""
|
||||
from lidar_pipeline.dtm import classify_ground, _create_ground_pipeline
|
||||
|
||||
@ -195,8 +196,7 @@ class TestClassifyGroundMethod:
|
||||
assert "filters.smrf" in stage_types
|
||||
|
||||
@patch('lidar_pipeline.dtm.subprocess')
|
||||
@patch('lidar_pipeline.dtm.laspy')
|
||||
def test_classify_ground_csf_uses_csf_pipeline(self, mock_laspy, mock_subprocess):
|
||||
def test_classify_ground_csf_uses_csf_pipeline(self, mock_subprocess):
|
||||
"""classify_ground with method='csf' should create CSF pipeline."""
|
||||
from lidar_pipeline.dtm import classify_ground
|
||||
|
||||
|
||||
Reference in New Issue
Block a user