如何使用liblas获取las point的“data”字段中存储的内容?

2024-04-18 10:23:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是多脉冲激光雷达数据,这些数据沿飞行路径内的多条线收集点。我正在尝试确定las文件中各个行的名称和数量。我在python中使用liblas模块。在

我找到了this documentation,它解释了las文件中存储的不同字段。它在页面底部提到了一个数据字段(get_data和set_data)。在

标头中的“点数据格式”和“点数据记录长度”为该“数据”字段留出了空间。我的头文件说我为数据字段预留了28个字节,数据字段中存储了28个值。第19个值(至少在来自两个不同传感器的两个数据集中)指的是行号。我在单脉冲数据中有一个值,在多脉冲数据中有4个值。在

我想知道是否有一个标准来存储这个字段中的内容,或者它是否是专有的。在

另外,为了得到每个扫描行的名称,我写了以下代码:

import liblas
from liblas import file as lasfile

# Get parameters
las_file = r"E:\Testing\00101.las"

f = lasfile.File(las_file, mode='r')

line_list = []
counter = 0
for p in f:
    line_num = p.data[18]
    if line_num not in line_list:
        line_list.append(line_num)
    counter += 1
print line_list

它会导致以下错误:

^{pr2}$

有没有人知道更多关于las点/标题中存储的行号的信息?有人能解释一下这个错误吗?在我得到错误之前,它似乎分配了将近2gb的ram。我在WinXP上,所以我猜这是内存错误,但我不明白为什么访问这个“数据”字段占用内存。非常感谢任何帮助。在


Tags: 文件数据名称data错误line脉冲num
1条回答
网友
1楼 · 发布于 2024-04-18 10:23:11

我并不假装是这方面的专家,但我对地理信息系统的数据很感兴趣,所以这引起了我的兴趣。我在我的fedora19系统上安装了liblas及其依赖项,并使用了liblas附带的示例数据文件。在

在使用你的代码时,我也遇到了同样的问题,看着我所有的记忆都被吞噬了。我不知道为什么会发生这种情况——也许是不必要的引用挂在周围,阻止垃圾收集器像我们希望的那样工作。这可能是可以修复的,但我不会尝试。在

我确实注意到了liblas模块的一些有趣的特性,并决定尝试它们。我相信你能得到你想要的数据。在

打开文件后,查看头中的XML描述。在

h = f.get_header()
print(h.get_xml())

很难看到(随意玩儿xml.dom.minidom或者lxml.etree),但在我的示例文件中,它显示了点数据的字节布局(我的也有28个字节)。在我的例子中,偏移量18是分配给点源ID的一个短(2个字节)。您应该能够用p.data[18:19]p.get_data()[18:19]p.point_source_id、或{}来检索这个值。不幸的是,data引用耗尽了内存,p.point_source_id有一个bug(bug修复请求提交给开发人员)。如果我们改变你的代码使用最后一个访问方法,一切似乎都很好。因此,请在for循环中尝试以下操作:

^{pr2}$

请注意

counter == h.get_count()

如果你想设置唯一的ID值。。。在

line_set = set(p.get_point_source_id() for p in f)

希望您的数据值也可用作p.get_point_source_id()。请在评论中告诉我它是如何为你工作的。干杯!在

相关问题 更多 >