图片缩略图

lasdata

version 1.7.0.0 (80.2 KB) by Teemu Kumpumaki
从LAS文件中打开LiDAR点数据。金宝app支持1.4版本。
4.9
18评级

30下载

更新2016年9月18日

查看版本历史记录

查看许可协议

一个在Matlab中读和写LAS文件的小工具。还包括有限的转换能力,并可以通过直接编辑变量对联盟数据结构进行修改/修复。据说可以读取LAS的所有版本到1.4版本。和往常一样,这个工具是为单个项目制作的,对它进行的测试非常轻。如果您提供了laszip可执行文件,也可以打开LASZ压缩文件(注意:它只是自动解压缩文件,没有其他)。
更新说明:
有能力创建空对象('createemptyobj'构造函数参数)与空头(你需要查找las规范的值和数据类型)。
使用构造函数参数('loadall')加载所有变量。注:未加载全波形激光雷达波形。使用getwaveforms实现这一点。

引用作为

Teemu Kumpumaki(2021)。lasdata(//www.tatmou.com/matlabcentral/fileexchange/48073-lasdata),MATLAB中央文件交换。恢复

意见及评分(57

丹尼尔喇嘛诺沃亚

你好,
我试图修改一个。las文件。实际上,我使用的是pointCloud对象,我想从pointCloud对象等生成一个.las。

用这个工具可以吗?

谢谢,
达尼

克里斯汀•沃克

你好,

我下载了这个,并在LAS文件上试用了它。当在唯一的参数上传递LAS文件时,我立即得到了错误:

c = lasdata(“lasfun.las”);
无法识别的函数或变量'file'。

lasdata/readheader中的错误(第1717行)
错误([文件'不是LAS文件'))

lastdata /las_read错误(第1621行)
obj =瑞(obj, fid);

lastdata错误(第91行)
obj.las_read(文件名);
你知道这是怎么回事吗?看起来函数中的变量“file”在使用之前没有定义。

谢谢,
克丽丝

艾哈迈德Abdelwahab

这听起来有点基础,但我不能将文件转换为工具箱文件(.mltbx)…??我不知道是否有一种方法使用它,因为每次我加载后,它是空的工具箱转换。

榭IZQUIERDO

我正在使用你的最后数据工具,我有问题,你读的颜色是uint16。我想知道如果使用你的代码,我可以读取颜色值uint 8(或doble)是我的限制0-255....如果我把给定的结果改为uint8,尽管最大值是255,我的结果是254…任何想法?

穆罕默德·莫基耶德

您好,我有一个激光雷达的强度图像,已经导入到matlab。问题是我们想如何创建一个特定的编码,让matlab检测图像中的特定强度。

杰里米·梅特卡夫

查看最新数据与一些新的LAS 1.4数据与相关的波形数据保存为单独的WDP文件。我试图绘制波形,但我不太确定如何lastdata将关联wdp文件时,调用任何getwaveform函数。

安娜·保尔森

嗨,蒂姆,

非常感谢非常有用的代码!我一直在USGS激光雷达数据集上使用它(例如:https://www.sciencebase.gov/catalog/item/5a8024ebe4b00f54eb2a6fcd),它工作得非常好!

您能解释一下FlattleTriangleArray组件功能是什么以及应该如何使用它吗?例如,如果我有x、y和z数组,我是否需要对每个数组应用此函数,然后再次运行plot_xyz?或者我必须使用另一个MATLAB函数来绘制它?或者我可以在强度数组上运行它,然后绘制强度?

谢谢!

Genping赵

嗨,蒂姆,

我是全波形激光雷达数据处理新手。我不知道如何使用你提供的getwaveforms函数。我正在处理。las 1.3数据文件,点记录格式是4,有一个额外的。wdp文件与。las文件和相同的名称,在其中,我认为它的波形文件。你能告诉我如何加载这个文件和如何得到波形吗?我赶时间,身边没人能帮上忙。希望收到你的来信。

最好的问候,
阴平不变

大梦音

你好,蒂姆,

还是我,回到2018年1月1日的问题。

我的.las数据文件在头端和点数据偏移之间都有两个额外的字节,尽管它们在版本1.2中。当我使用“write_las”函数将数据写入一个新文件时,函数将固定这2个字节。这是很好的。以前当我试图添加数据到ArcMap中的Dataset时,有一个错误说文件是无效的。现在我知道为什么了…(是的,这是一个很长的假期…)

这是由于“lasdata.m”中的两个小错误造成的,其中.las文件被打开,但从未关闭。

同样的错误发生在以下三个函数中:
obj.write_gps_time ();
obj.write_color ();
obj.write_point_wave_info ();
在这三个函数中,首先打开文件。然后检查点数据格式,并在“返回”之前不关闭文件。我把“fopen(…)”句子换成了“if…”,问题就解决了。

最好的
大蒙

船底座B

danesh danesh

mithu马克斯

Teemu Kumpumaki

嗨Dameng,
警告所表示的两个字节偏移差通常来自旧的点数据记录标记,在LAS 1.0中使用。
你最后的文件公开了吗,让我看看哪里出了问题?
否则,如果没有任何额外的信息,我只能给出一些调试说明。
你可以通过首先只读取报头(没有loadall)来纠正报头中的一些错误,然后进行纠正,例如指向数据偏移,然后使用函数加载pointdata。
如果文件的读/写工作,您可以通过检查点数据是否在之前/之后是好的来检查数据之间的差异。还要检查导入的头文件是否存在差异。
如果点数据被破坏,通常可以通过绘制部分数据或检查坐标范围是否有效来轻松查看。而断点数据通常是由于报头中的点格式错误或点数据偏移错误造成的。

Teemu

大梦音

你好,蒂姆,
谢谢你这个伟大的工具!
到目前为止,我确实有一个关于写las文件的问题。我所做的是:
-----------------------------
> > = lasdata(“。拉斯维加斯', 'loadall'); % reading las file
ans =

445 447

警告:文件位置与点数据不匹配,继续使用头位置读取。
在lastdata /las_read中(第1661行)
在lastdata(第75行)中

> > write_las (a,“output.las”);
---------------------
编写过程很顺利,但当我尝试将新文件output.las添加到ArcMap中的las数据集中时,出现了一个错误,表示该文件无效。。。你知道是什么导致了这个错误吗?输入和输出las文件均为1.2版

谢谢你!
大蒙

双梁

嗨,Teemu,
感谢这个奇妙的工具!你可以展示一些关于如何写LAS文件的示例吗?我将LAS文件加载到matlab并修改point_source_code,但我在将它们导出到NEW LAS文件时卡住了。再次感谢!

马提亚Haubrich

嗨,我认为点数据记录格式2有一个错误,因为这种格式允许RGB颜色,但你跳过了read_color类型。此外,你可以使用256进行缩放,这样你就可以直接得到0到255之间的RGB值。

11日潘德

谢谢你!优秀的工作。

Aldino Rizaldy

YW王

萨尔瓦多烛光

Teemu,

谢谢你提供了这个很棒的工具。它工作完美且高效。

是否有增加坐标参数解码的计划?即使它只是来自proj4部分的未排序字符串,或者epsg ID(这两者都是嵌入的),这对工具来说也是一个巨大的改进。

萨尔

Teemu Kumpumaki

嗨,伊莱亚斯,

使用的坐标系应定义测量单位。不幸的是,坐标系字段未被lasdata工具解码,但您可以在其他工具中打开las文件以检查使用的坐标系。如果las文件中未指定坐标系,则测量单位的唯一来源是数据生成器。

Teemu

禹城

尤努斯Egi

xyz的测量单位是多少?

伊莱亚斯喀山

Teemu Kumpumaki

嗨,卡米洛,

抱歉,您的信息在邮件泛滥中丢失了。我修复了一个las 1.0格式特定的错误,它错过了特殊处理,在这个1.0版本需要在变量记录和点数据之前有特定的签名。

不幸的是,我没有太多的时间来调试文件句柄是打开的。似乎所有地方的每一次开放都要关闭。在被发现之前仍然很烦人。

Teemu

Teemu Kumpumaki

你好,约瑟夫,

如果不查看文件,很难说问题出在哪里,但是您可以通过查看前四个字节来检查文件,因为如果它是las文件,明文应该读为“LASF”。

也许在某个时候,你的文件已经用zip压缩,文件扩展名是错误的?

约瑟夫

我觉得答案可能很明显,但我没看到。

你知道为什么我在加载我的LAS文件时得到这个错误吗?

c = lasdata (' 102163404406 w500.las ');
未定义的函数或变量'file'。

lastdata /readheader错误(第1712行)
错误([文件'不是LAS文件'))

lastdata /las_read错误(第1616行)
obj =瑞(obj, fid);

lastdata错误(第91行)
obj.las_read(文件名);

欢呼,

卡米洛•Ressl

伟大的工具!
两个小注释:我认为一些write子函数在“返回”到调用函数之前需要一个“fclose(fid);”。目前我总是需要一个"fclose all"后调用write_las()。

我还注意到,FugroViewer目前不能将写入的文件识别为las文件。lastools的Las2las修理那个。这两个文件之间的FC在头文件中显示了一些差异(我无法解释)。

感谢这个工具!

Teemu Kumpumaki

嗨俄梅珥,
我还没有使用存储了颜色信息的las文件进行测试,但是您应该能够通过调用:dataobject = lasdata('filename.las','loadall')读取las文件中的所有内容:

还可以调用dataobject.get_color()来读取颜色信息。

如果您的las文件中没有颜色数据,您可以从las pointformat和las specification文件中检查。

嗨,蒂姆,

我们试图读取我们的las数据,它必须为每个点有xyz和rgb字段。但是,我们还没有成功读取rgb部分,得到的rgb字段是空数组。你能帮我们一下吗?

提前谢谢。

Teemu Kumpumaki

嗨,塔纳,

1)点的顺序与最后一个文件中存储的点的顺序相同。这意味着这些点可以按照文件创建者放置的任何顺序排列。对于x y和z,每个点存储在不同的向量中,元素的顺序是相同的。如果你想要xyz矩阵你可以调用yourlasobject。get_xyz()

2)你可以试着用'loadall'参数从las文件加载所有变量。或者使用get_intensity()函数来读取强度变量。注意,不是所有的扫描器/处理软件都创建/存储由las文件表示的所有数据。

塔纳德斯穆克

需要确认一些事情:
x/y/z坐标在各自的数组中是如何表示的?它是按(升序/降序)排列的吗,与它们的物理位置无关?第一个索引代表云中的哪个点?
2] 如果强度矩阵为空,是否有其他选项获取该数据,比如在数据采集之前更改扫描仪参数?
我是相当新的LAS文件和MATLAB,所以任何帮助感谢。

Teemu Kumpumaki

嗨Akslay,

很抱歉,我无法调试这个问题,因为行号与最新版本不匹配。上次数据的版本。你在用吗?

如果你没有在参数上定义新的目标版本,它应该使用头设置进行编写。当然,对你来说它并没有发挥应有的作用。

阿卡什谢蒂

我注释掉了第1475-1480行,它似乎工作得很好。我使用的是版本1.2的LAS文件。

阿卡什谢蒂

嗨,蒂姆!

我希望使用这个工具读取LAS文件,向它添加额外的点,然后写入新的LAS文件。你认为用这个工具可以做到吗?

目前我正在测试写作部分,出现如下错误:

>> data = lastdata ('WT_latlon.las');
>>数据z=0;
> > write_las(数据,“test.las”);
使用lastdata /write_las出错(第1475行)
输入参数不足。

写LAS文件的正确语法是什么?

谢谢你!

Teemu Kumpumaki

嗨,林,
抱歉延迟。修正了分类变量读取错误。
如果你不想读取波形,你需要使用getwaveforms(ids)类方法分别读取它们。其中ids数组包含要获取的点号。

读取所有波形数据会很快填满RAM,需要很长时间,所以不能立即读取。

W.T.Lin

你好
谢谢你的快速回复。我尝试了更新的代码,得到了如下错误消息:

试图访问offsettable(10);索引越界,因为numel(offsettable)=9。

lasdata/read_分类错误(第626行)
抵消= offsettable (obj.header.point_data_format + 1) + obj.header.offset_to_point_data;

lastdata错误(第78行)
obj.read_classification ();

同样,我注释了第78行并运行了相同的代码,结果如下:

x (3859133 x1双):
y (3859133 x1双):
z (3859133 x1双):
强度(3859133 x1 uint16):
位(3859133 x1 uint8):
bits2 (3859133 x1 uint8):
分类:[]
user_data (3859133 x1 uint8):
scan_angle (3859133 x1 int16):
point_source_id: []
gps_时间:[3859133x1双精度]
红色:[]
格林:[]
蓝色:[]
近红外光谱:[]
extradata: []
Xt (3859133 x1单):
欧美(3859133 x1单):
Zt型(3859133 x1单):
wave_return_point (3859133 x1单):
wave_packet_descriptor (3859133 x1 uint8):
波形字节偏移量:[3859133x1 uint64]
wave_packet_size (3859133 x1 uint32):
头(1 x1结构):
variablerecords [1 x23结构):
extendedvariables: []
选择(3859133 x1逻辑):
wavedescriptors: []
文件名:'Hallingdal_Hovet_A - Scanner 1 - 151003_083008_Scanner_1_0 - originalpoints.las'

波形信息似乎没有被输出。你能让我检查一下结果吗?再次感谢!

Teemu Kumpumaki

嗨,林,

我修复了'loadall'命令中的两个错误。如果这解决了您的问题,请您报告。

W.T.Lin

嗨,蒂姆,

谢谢分享!
我正在进行LAS 1.4数据波形(.wdp)的研究。我使用的代码和相应的结果(和错误)如下:
1.没有对上次数据进行修改。m代码:obj=lasdata('Hallingdal_Hovet_A.las','loadall')

错误消息:

使用lasdata/读取变量记录时出错(第1870行)
输入参数不足。

lastdata错误(第86行)
obj.read_variable_records ();

2.注释lastdata的第86行。m代码:
obj=lasdata('Hallingdal_Hovet_A.las','loadall')

结果包含部分信息:

x:[3334961x1双精度]
y (3334961 x1双):
z (3334961 x1双):
强度(3334961 x1 uint16):
位(3334961 x1 uint8):
bits2 (3334961 x1 uint8):
分类(3334961 x1 uint8):
user_data (3334961 x1 uint8):
扫描角度:[3334961x1 int16]
point_source_id: []
gps_time (3334961 x1双):
红色:[]
格林:[]
蓝色:[]
近红外光谱:[]
extradata: []
Xt (3334961 x1单):
欧美(3334961 x1单):
Zt型(3334961 x1单):
wave_return_point (3334961 x1单):
wave_packet_descriptor (3334961 x1 uint8):
wave_byte_offset (3334961 x1 uint64):
wave_packet_size (3334961 x1 uint32):
头(1 x1结构):
variablerecords [1 x23结构):
extendedvariables: []
选择(3334961 x1逻辑):
wavedescriptors: []
文件名:“Hallingdal_Hovet_A-扫描仪1-151003_082034_扫描仪1_0-原始点.las”

似乎波形相关的信息还没有很好的导出,你能给我一些修改代码或lasdata.m的建议吗?

西巴

非常感谢您的帮助,非常感谢!

Teemu Kumpumaki

嗨西巴,

我对变量记录和扩展变量读写做了一些额外的修复。

顺便说一句。你的muestra las文件有点记录格式6和只有22字节每记录,而规格说最小记录大小是30字节。这个文件缺少gps时间吗?

西巴

你好

现在我在写数据的时候出错了。

>> datos_las = lasdata('prueba_las_1_4.las');

警告:发现的遗留点记录数目非零。
使用较大的非零
>在1751处的lasdata>lasdata.readheader中
在lasdata > lasdata。las_read在1606
在lasdata > lasdata。lasdata在91
警告:通过返回发现的遗产点数
非零。使用较大的非零
>在lasdata>lasdata.readheader的1761处
在lasdata > lasdata。las_read在1606
在lasdata > lasdata。lasdata在91

> > write_las (datos_las test.las);

使用lastdata /write_las出错(第1499行)
写扩展变量数据的错误:没有合适的方法,
属性,或为类lasdata保留的字段。

lasdata/write_扩展_变量错误(第1914行)
写入文件(fid, obj.extendedvariables (k) .reserved uint16);

lasdata/write_las中的错误(第1497行)
obj.write_extended_variables (fid);

西巴

嗨,蒂姆!

非常感谢。我使用新的matlab代码和错误信息消失。仍然显示警告信息

"警告:发现遗留的点记录数非零。
使用较大的非零
>在1751处的lasdata>lasdata.readheader中
在lasdata > lasdata。las_read在1606
在lasdata > lasdata。lasdata在91
警告:通过返回发现的遗产点数
非零。使用较大的非零
>在lasdata>lasdata.readheader的1761处
在lasdata > lasdata。las_read在1606
在lasdata > lasdata。最后数据在91 "

但我认为数据没有问题。如果您想进行一些测试以改进代码,那么我允许您使用两个.las文件(版本1.4)。

https://www.dropbox.com/s/as12f820b25rbm7/prueba_las_1_4.las?dl=0

https://www.dropbox.com/s/degij75jm4i2c5b/Muestra_1_4.las?dl=0

智利的问候!

Teemu Kumpumaki

你好
嗨西巴,

我试图修复扩展记录读取,但我没有任何las文件与扩展变量测试。似乎在变量名record_length_after_obj_header vs. record_length_after_header中有拼写错误。
如果您可以测试您的las文件,那就太好了。

西巴

这就跟你问声好!我得到一个错误时,试图从las文件版本1.4加载数据

> > data = lasdata(“las_file_1_4.las”);
警告:发现的遗留点记录数目非零。使用较大的非零
在lastdata /readheader中(第1751行)
在lastdata /las_read(第1606行)
在lastdata(第91行)中
警告:返回的旧点数为非零。使用较大的非零
在lastdata /readheader中(第1761行)
在lastdata /las_read(第1606行)
在lastdata(第91行)中
引用不存在的字段'record_length_after_header'。

lastdata /read_extended_variables错误(第1903行)
obj.extendedvariables (k)。=从文件中读数据(支撑材、obj.extendedvariables.record_length_after_header uint8);

lastdata /las_read错误(第1649行)
obj。extendedvariables = read_extended_variables (obj, fid);

lastdata错误(第91行)
obj.las_read(文件名);

任何帮助吗?

Yanuar Tri Aditya Nugraha

很好!将*.las文件导出到Matlab并仅提取XYZ可以节省大量时间。

Teemu Kumpumaki

写文件。

可以使用以下方法创建空las对象:
testobj = lasdata(“file.las”、“createemptyobj”)
然后你需要把细节写进标题。这实际上是一个相当烦人的任务。你需要为你的数据找到一个合适的版本和点格式,计算浮点到整数转换的比例因子,计算范围等等。在添加变量时,还需要检查正确的数据类型。
最简单的方法是使用现有的文件作为基础,然后修改数据和写入。这个工具对于任何快速的东西来说都太低级了…
在你有了所有必要的变量和头文件之后,调用:write_las('output.las');

菲利普Glira

工作好了!

虐待者

伟大的代码!谢谢。

光张

很好

威尔·史密斯

它对Matlab的新学习者很有帮助。

迪米特里瘟疫周

太好了。很好的面向对象的代码和使用。非常有效率,非常感谢Teemu。

珍妮弗

我改用了这个,这个奏效了:
http://www.tpingel.com/code/lasread/lasread.html

我没有发现上次的数据有什么问题。但它只给了我读者的x, y, z值。我没有装其他的。我会试着用你的写信器。

Teemu Kumpumaki

嗨,珍妮花,

你能给我更多的信息来解决这个问题吗?

obj = lasdata(“file.las”);
obj.get_intensity ();
obj.get_classification ();

这段代码应该已经从文件中加载了变量。

珍妮弗

仅提取las 1.4的x、y和z。没有强度或分类值。

Aslak Grinsted

谢谢你!非常感激。

MATLAB版本兼容性
创建R2012b
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!