Skip to content

Commit

Permalink
ajout d'une fn de surpression de dimensions
Browse files Browse the repository at this point in the history
  • Loading branch information
alavenant committed Jun 27, 2024
1 parent 961ae62 commit 2b041de
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
38 changes: 38 additions & 0 deletions pdal_ign_macro/macro.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import pdal
import numpy
import json

import pdaltools.las_info as li

"""
Some useful filters combinations for complete pdal pipeline
Expand Down Expand Up @@ -83,6 +87,40 @@ def keep_non_planar_pts(pipeline, condition, condition_out):
return pipeline


def remove_dimensions(input_las, dimensions, ouput_las):
"""
export new las whitout some dimensions
"""
pipeline = pdal.Pipeline() | pdal.Reader.las(input_las)
pipeline.execute()
points = pipeline.arrays[0]

dim_remove = []
for dim in dimensions:
dim_remove.append(list(points.dtype.fields.keys()).index(dim))

new_points = []
for pt in points:
ptl = list(pt)
ptl = [ptl[i] for i in range(len(ptl)) if i not in dim_remove]
new_points.append(tuple(ptl))

new_dtype = {}
for dim in points.dtype.fields.keys():
if dim in dimensions:
continue
new_dtype[dim] = points.dtype.fields[dim]

new_las = numpy.array(new_points, dtype=new_dtype)
params = li.get_writer_parameters_from_reader_metadata(pipeline.metadata)

pipeline_end = pdal.Pipeline(arrays=[new_las], )
pipeline_end |= pdal.Writer.las(ouput_las, forward="all", **params )

pipeline_end.execute()



def build_condition(key, values):
"""
build 'key==values[0] || key==values[1] ...'
Expand Down
38 changes: 38 additions & 0 deletions test/test_remove_dimension.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import tempfile
import pdal
import numpy

from macro.macro import remove_dimensions


def test_remove_dimension():

ini_las = "test/data/4_6.las"
added_dimensions = ["DIM_1", "DIM_2"]

tmp_las = tempfile.NamedTemporaryFile(suffix="_add.las").name

# recuperation des données ini
pipeline_read_ini = pdal.Pipeline() | pdal.Reader.las(ini_las)
pipeline_read_ini.execute()
points_ini = pipeline_read_ini.arrays[0]

# ajout de dimensions supplémentaires
pipeline = pdal.Pipeline()
pipeline |= pdal.Reader.las(ini_las)
pipeline |= pdal.Filter.ferry(dimensions="=>" + ", =>".join(added_dimensions))
pipeline |= pdal.Writer.las(tmp_las, extra_dims="all", forward="all",)
pipeline.execute()

# suppression des dimensions
remove_dimensions(tmp_las, added_dimensions, tmp_las)

# recuperation des données finales
pipeline_read_end = pdal.Pipeline() | pdal.Reader.las(tmp_las)
pipeline_read_end.execute()
points_end = pipeline_read_end.arrays[0]

# les données ini et finales doivent être identique
assert numpy.array_equal(points_ini, points_end)


0 comments on commit 2b041de

Please sign in to comment.