Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ajout d'une fn de surpression de dimensions #14

Closed
wants to merge 2 commits into from
Closed

Conversation

alavenant
Copy link
Collaborator

No description provided.

@alavenant alavenant added the enhancement New feature or request label Jun 27, 2024
@alavenant alavenant requested a review from leavauchier June 27, 2024 11:00
test/test_remove_dimension.py Show resolved Hide resolved

def test_remove_dimension():

ini_las = "test/data/4_6.las"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ça vaut peut-être le coup de tester avec des extra_dims qui ne sont pas supprimées en plus de ce test-là (pour être sûrs que ça supprime pas toutes les extra_dims d'unef façon ou d'une autre

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bien vu, je rajoute un test

@@ -83,6 +87,40 @@ def keep_non_planar_pts(pipeline, condition, condition_out):
return pipeline


def remove_dimensions(input_las, dimensions, ouput_las):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pas sûre que ça a sa place dans le même fichier que les macros, parce que tu fais un pipeline à part ici
Potentiellement ça pourrait même aller dans ign-pdal-tools parce que je pense que ce ne sera pas utilisé que dans le contexte du plugin

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oui je suis d'accord avec toi, le mettre dans ign-pdal-tools serait plus judicieux. Je peux le faire. Mais il faut que l'on soit sur du concept en amont.

@@ -0,0 +1,38 @@
import tempfile
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tu peux mettre ce test dans test/pdal_ign_macro/test_macro.py stp ? (comme ça on a la même arborescence entre code et test, ce sera plus pratique quand on aura plus de code)

C'est valable que si la fonction testée reste là où elle est (à adapter sinon)

Comment on lines +95 to +117
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], )
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ca peut se simplifier en utilisant numpy :

Suggested change
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.execute()
points = pipeline.arrays[0]
input_dimensions = list(points.dtype.fields.keys())
output_dimensions = [dim for dim in input_dimensions if dim not in dimensions]
points_pruned = points[output_dimensions]
params = li.get_writer_parameters_from_reader_metadata(pipeline.metadata)
pipeline_end = pdal.Pipeline(
arrays=[points_pruned],
)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vu comme ça... il faut tout de même ajouter le dtype au tableau.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pour moi c'est numpy qui s'en occupe tout seul, parce que la donnée est une structured array https://numpy.org/doc/stable/user/basics.rec.html , mais si t'as un doute ça vaut le coup de vérifier

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oui tu as raison. Je me suis vraiment complexifié la vie !! il va falloir que tu me donnes des cours de numpy

@alavenant alavenant closed this Jun 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants