首页 > 解决方案 > 将索引附加到 laspy 文件 (.las)

问题描述

我有两个文件,一个是 esri shapefile (.shp),另一个是点云 (.las)。

使用 laspy 和 shapefile 模块,我设法找到 .las 文件的哪些点属于 shapefile 的特定多边形。我现在想做的是添加一个索引号,以便在两个数据集之间进行识别。因此,例如,落在多边形 231 内的所有点都应该得到数字 231。

问题是,到目前为止,在编写 .las 文件时,我还无法将任何内容附加到点列表中。我正在尝试执行的代码如下:

outFile1 = laspy.file.File("laswrite2.las", mode = "w",header = inFile.header)
outFile1.points = truepoints
outFile1.points.append(indexfromshp)
outFile1.close()

我现在得到的错误是:AttributeError:'numpy.ndarray'对象没有属性'append'。我已经尝试了多种方法,包括 np.append ,但是对于如何将任何内容添加到 las 文件中,我真的很茫然。

任何帮助深表感谢!

标签: pythonfileshapefilelaspy

解决方案


有几种方法可以做到这一点。

las文件有分类字段,你可以在这个字段中存储索引

las_file = laspy.file.File("las.las", mode="rw")
las_file.classification = indexfromshp

但是,如果 Las 文件的版本 <= 1.2,则分类字段只能存储 [0, 35] 范围内的值,但您可以使用可以保存 [0, 255] 范围内的值的 'user_data' 字段。

或者,如果您需要存储高于 255 的值/您需要一个单独的字段,您可以定义一个新维度(请参阅 laspy 的文档,了解如何添加额外维度)。你的代码应该接近这样的东西

outFile1 = laspy.file.File("laswrite2.las", mode = "w",header = inFile.header)
# copy fields
for dimension in inFile.point_format:
    dat = inFile.reader.get_dimension(dimension.name)
    outFile1.writer.set_dimension(dimension.name, dat)

outFile1.define_new_dimension(
    name="index_from_shape",
    data_type=7, # uint64_t
    description = "Index of corresponding polygon from shape file"
 )
outFile1.index_from_shape = indexfromshp
outFile1.close()

推荐阅读