转换函数似乎只有在执行laspy.read()时才能工作。但是,块迭代器的全部要点是不需要一次读取完整的文件。这就是我认为laspy.convert()的一个例子将与块迭代器一起工作的方式。
# 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)但是,它会引发此错误:
\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发布于 2022-07-22 10:50:51
laspy.convert需要一个LasData类型的对象,而不仅仅是点,块迭代器返回一个ScaleAwarePointRecord
要实现使用块读/写的转换,您必须创建一个用作缓冲区的点记录,并使用copy_fields_from。
示例:
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)https://stackoverflow.com/questions/73029246
复制相似问题