使用 ENVI PointCloud API 在 IDL 中访问 3-D 点云数据
13168 给这篇文章评分:
暂无评分
使用 ENVI PointCloud API 在 IDL 中访问 3-D 点云数据
匿名作者 2015年11月5日,星期四
以下是一个使用 ENVI 5.3 中包含的新 PointCloud API 的示例。该 API 可以方便地访问以 LAS 格式存储的 3-D 数据。数据和元数据可以通过 IDL 访问。新的 API 不仅包含读取和写入 LAS 格式 3-D 点云数据的功能(其功能远不止于此)。获取读取访问权限有两种根本不同的方式。第一种方法是简单地按照点在 LAS 文件中的存储顺序读取点。这通常是 LiDAR 传感器收集点的顺序,但点云数据也可能来自其他来源。访问点云数据的第二种方法是创建一个 ENVIPointCloud 项目,这意味着点将根据空间瓦片进行空间排序,以便可以基于空间查询方法快速索引。排序过程在最初需要一点时间,但一旦完成,就可以基于空间查询方法快速检索点。
第一个示例展示如何使用简单的、非排序的 API 调用访问点云数据。
ENVI> nv = envi(/current)
ENVI> pc=nv.QueryPointCloud('C:\Users\borsholm\Downloads\Lincoln.laz')
ENVI> print,pc
ENVIPOINTCLOUDQUERY <717772>
DATA_RANGE = 692204.97, 4519668.7, 340.79242, 695331.36, 4522642.4, 485.24673
NPOINTS = 9278073
SPATIALREF = !NULL
URI = 'C:\Users\borsholm\Downloads\Lincoln.laz'
ENVI> pc.metadata
ENVIPOINTCLOUDMETADATA <718218>
File Creation Day = 0
File Creation Year = 0
File Source ID = 0
Generating Software = 'Lidar Explorer by ProLogic, Inc.'
Global Encoding = 0
Max X = 695331.36
Max Y = 4522642.4
Max Z = 485.24673
Min X = 692204.97
Min Y = 4519668.7
Min Z = 340.79242
Number Of Point Records = 9278073
Number Of Variable Length = 3
Point Data Format = 0
Point Data Record Length = 20
Project ID GUID Data 1 = 0
Project ID GUID Data 2 = 0
Project ID GUID Data 3 = 0
Project ID GUID Data 4 = 0, 0, 0, 0, 0, 0, ...
System Identifier = ''
Version Major = 1
Version Minor = 0
X Scale Factor = 1.4558386e-006
X Offset = 692204.97
Y Scale Factor = 1.3847266e-006
Y Offset = 4519668.7
Z Scale Factor = 6.7266782e-008
Z Offset = 340.79242
ENVI> pts=pc.GetPointsInRange(0,pc.npoints,intensity=i)
ENVI> help,pts,i
PTS DOUBLE = Array[3, 9278073]
I UINT = Array[9278073]
ENVI> pc.Close
以上展示了如何获取与文件关联的元数据,以及如何以 3xN 数组的形式返回点,顺序与它们在文件中存储的原始顺序一致。
第二个示例展示了如何在新建项目中对点进行空间排序,并访问给定矩形区域内的点。
ENVI> pc = nv.OpenPointCloud('C:\Users\borsholm\Downloads\Lincoln.laz')
ENVI> pts = pc.GetPointsInRect(694000, 4520000, 695000, 4521000)
ENVI> help,pts
PTS DOUBLE = Array[3, 1000002]
ENVI> pc.Close