将索引附加到 laspy 文件 (.las)

appending an index to laspy file (.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 文件添加任何东西。

非常感谢任何帮助!

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

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

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

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

或者如果您需要存储大于 255 的值/您需要一个单独的字段,您可以定义一个新维度 (see laspy's doc on how to add extra dimensions)。 你的代码应该接近于这样的东西

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()