python - 将索引附加到 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 文件中,我真的很茫然。
任何帮助深表感谢!
解决方案
有几种方法可以做到这一点。
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()
推荐阅读
- hibernate - 多次成功请求后jdbc连接中断
- python - 运行列表列表中的元素总和
- sockets - 运行 MPI 时,有没有办法先执行顺序代码,然后运行并行代码
- r - 针对 NULL 和其他东西测试变量
- javascript - javascript 如何从 Promise 中保留变量?
- r - 带有 dplyr 的 for 循环汇总返回与 group_by 不同的结果
- authentication - 具有端点身份验证的 Prometheus blackbox-exporter?
- python - NaN 导致 sklearn 模型无法运行
- node.js - 客户端未收到多播消息
- r - 如何从 MODISTools 中的超时错误中恢复