问题标签 [laspy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python-3.x - 如何获取 LIDAR 块的唯一“点源 ID”?
我正在尝试使用 laspy 获取有关出现在 LIDAR 数据块中的独特航线的信息。
我已经尝试为整个块运行 lasInfo 模块,但我得到的只是一个最小和最大 point_source_ID 值,而不是我需要的单个飞行路线列表。
这是我迄今为止尝试过的:
不幸的是,整个过程相当缓慢,并且使用更大的数据集,我得到一个堆栈溢出错误,最终永远无法进入“写入文件”部分。
python - 尽管有足够的 RAM,但 numpy.append 中的 MemoryError
我一直在尝试将用 laspy 读取的点云的点列表附加到另一个点列表中,基本上是合并两个点云。合并多个点云时,我一直将所有点附加到同一个 np.ndarray 以便将其保存回一个 laspy 文件。现在,只要我要合并的所有点云的总大小超过 350 MB,我就会得到一个MemoryError
.
我尝试使用不同的方法来编写点云文件,这样我就不必一次将所有点读入内存,但是失败了,因为 laspy 在编写点云文件时真的很奇怪,这里是我发现了一些事情:
laspy.File.points
具有以下格式:
- 的变量类型
laspy.File.points
是numpy.ndarray
- 的形状
laspy.File.points
是(<numberOfRows>,)
=> 一维数组,即使它每行有 12 个值(?) - 行具有类型
numpy.void
- 为了编写一个
laspy.File
您需要在写入模式下创建一个新文件,从现有文件复制标题并将 File.points 设置为与上述类型完全相同的 numpy 数组。设置点一次后,不能再设置,也就是说设置点时需要知道最终的行数。 - 您可以使用
laspy.File.set_x(<arrayOfXValues>)
(和类似方法)更改行的值,长度必须与laspy.File.points
现在我的电脑有 16 GB RAM,当我开始合并时,其中大约 10 GB 是空闲的。使用psutils
我得到我的已用和可用内存,而且我永远不会低于 9 GB 的可用内存。使用psutil.Process(os.getpid()).memory_info().rss
我得到这个进程的已用内存,它永远不会超过 650 MB。
合并时,我读取第一个文件,然后遍历其他文件,逐个读取它们并调用numpy.append(combinedPoints, otherPointcloudPoints)
将所有点堆叠在一起。然而,MemoryError
当上面列出的条件为真时,这会抛出一个 。
这是将多个点云合并到一个新点云的代码(这一切都发生在一个类PointCloudFileIO
中,self.file
是一个实例laspy.File
)。util.inMB
计算从字节到兆字节的大小。
对于我拥有的几乎所有用例,这都很好。它将所有提供的点云合并到新文件中的新点云中。然而,当生成的点云有点太大时,尽管内存比需要的多,我得到一个MemoryError
.
这是我使用这些点云启动程序时的日志(下载 .laz 文件),您需要先使用 laszip 解压缩 .laz 文件,然后它们才能与 laspy 一起使用(至少在使用 Windows 时):
如果有人知道造成这种情况的原因,我们将不胜感激。
python - 在写入 laspy 文件时定义新维度
在 python 中保存 laspy 文件 (.las) 时,如何将数据添加到自定义维度?
好的,更多细节:我阅读了一个标准的 .las 文件,其属性为 X、Y、Z、I。然后我做了一些计算,并希望将结果保存为具有属性 X、Y、Z、I 和附加新维度“my_dim”的 .las 文件。只要我知道新维度的名称,定义和添加数据就没有问题:
但是,我想将保存过程封装在一个自己的函数中,并提供额外的维度作为参数extra_dims
(作为字典列表,比如[{"name": "my_dim", data_type: 5, ...}]
。现在,我仍然可以根据参数定义新维度,但无法添加数据。这是片段:
对于添加数据f[dim["name"]] = ...
不起作用(f.dim["name"]
显然也不行),我只得到
有谁知道如何解决这个问题,即将数据添加到名称“隐藏”在参数中的属性?
python - 迭代单个字节,然后将其保存到文件中而不改变内容
我有一个从 API 返回的字节字符串并存储在response.content
对于小内容,我可以使用以下代码毫无问题地将其保存到文件中
但是对于较大的文件,它会导致内存错误,所以我尝试不要一次读取所有内容,通过使用此代码
但是上面的方法似乎替换了内容,因为它不再与另一个库兼容(在我的Laspy尝试读取保存的文件时,laspy.util.LaspyException: Invalid format: h0.0
出现错误)
我该怎么做?
python - 如何在 python 中正确处理 3D 点云数据?
我是这个论坛的新手,所以这将是我有史以来的第一个问题(已经使用该论坛好几年了:D)。
我的问题是什么: 我现在在一家公司工作,我们希望自动化流程,例如在分类的 3d 点云数据(如墙壁、屋顶等)中查找最低和/或最高点/线。所以我有一个分类点云,我不想自己画出墙壁或屋顶或任何东西的最低点和最高点的线,但要弄清楚 python 是如何为我完成这项工作的!
我想知道的: 首先,我想知道使用 python 处理点云数据的最佳和正确方法是什么?我通过简单的谷歌搜索提出了几个想法(例如 laspy、open3d ......),但我很困惑,哪一个可能是我完成任务所需的库,或者我应该真正开始努力的地方学习处理某个包..
所以,我很感谢您的回答和建议(也许存在一个我还没有找到的类似条目?)。
谢谢马克斯
python - 从 numpy 读取并保存为 las 文件
我想以 .las 格式保存一些文件,我找到了这段代码:
这可以正常工作但这是针对仅具有XYZ值的数据,如何为具有 XYZ 标签值的数据编写此内容???...我的源数据集是 *.txt 格式。
python - 在 Python 中从 3D 点云中将边缘提取为 3D 线(例如 .dwg 或 .shp 特征)
在浏览了这个论坛和一些论文并在如何正确检测和提取点云中的边缘方面经历了几个星期之后,我必须提出这个问题:
1)我已经拥有的:
我的数据: 3D 点云,例如房屋、墙壁或街道旁的路边——任何情况。
到目前为止我的尝试:我遇到了许多 Python 库(open3d、PyntCloud、laspy),我能够通过所有这些库计算特征值,然后从中进行一种曲率/边缘检测,但它没有像我预期的那样工作- 我的点云似乎太嘈杂/波浪状,因此例如太多或太少的点被检测为边缘,甚至没有检测到应该是边缘的边缘。
我还尝试了 3D 中的霍夫变换,但这需要几个小时才能处理更大的点云。(我的通常在 100.000-300.000 点的范围内)
2)最后我想拥有什么:
仅包含底线和顶线(根据高程)的 .dwg 或 .shp 要素,以便我可以将该要素加载到 ArcMap 或 QGIS 中,并将例如墙壁或房屋的底部和顶部作为 3D线特征。
那么,有人知道如何正确实现这一目标吗?
python - 根据数组中定义的关系更改点云 ID
我是 Python 的新用户。
我正在尝试将 ID 更改为点云中的点。我的点云已经有了一个分类,所以每个点都有不同的 ID。我有一个将这些 ID 与新 ID 相关联的数组,例如:
我可以通过这种方式从点云中读取 ID:
old_ID = myfile.intensity
(带 laspy)(在我的文件中,ID 像强度值一样保存,但这不是问题)。
我不知道如何通过数组关系更改 ID 值。