Joe
Joe

Reputation: 1

Is there a way to convert chunks of las file to another las file type?

The converting function seems to only work if you do laspy.read(). However, the whole point of the chunk iterator is so you don't have to read in a full file at a time. This is how I thought an example of laspy.convert() would work with the chunk iterator.

            # READ IN FILE
            with laspy.open(scan.las_file, mode='r') as las_open:
                for chunk in las_open.chunk_iterator(1_000_000):
                   chunk = laspy.convert(chunk,file_version='1.2', point_format_id=2)

                    # WRITE TO FILE
                    file_path = os.path.join(path, filename)
                    header = laspy.LasHeader(point_format=2, version='1.2')
                    with laspy.open(source=facility_path, mode='w', header=header) as las_write:
                        las_write.write_points(chunk)

However, it raises this error:

\lib\site-packages\laspy\lib.py", line 318, in convert
    header = copy.deepcopy(source_las.header)
\lib\site-packages\laspy\point\record.py", line 230, in __getattr__
    raise AttributeError("{} is not a valid dimension".format(item)) from None
    AttributeError: header is not a valid dimension

Upvotes: 0

Views: 618

Answers (1)

Jälv
Jälv

Reputation: 61

laspy.convert expects an object of type LasData not just points and the chunk iterator returns a ScaleAwarePointRecord

To achieve conversion using chunk read/write you'd have to create a point record that serves as a buffer and use copy_fields_from.

Example:

with laspy.open(input_path, mode='r') as las_open:
    header = laspy.LasHeader(point_format=6, version='1.4')
    with laspy.open(output_path, header=header, mode="w") as las_write:

        buffer_chunk = laspy.PackedPointRecord.zeros(point_count=chunk_size, point_format=header.point_format)

        for input_chunk in las_open.chunk_iterator(chunk_size):
            output_chunk = buffer_chunk[:len(input_chunk)]
            output_chunk.copy_fields_from(input_chunk)
            las_write.write_points(output_chunk)

Upvotes: 0

Related Questions