1.数据读取
使用liblas中的file类读取las文件,可以生成las文件的迭代器。
from liblas import file
f = file.File('file.las', mode='r')
for p in f:
print('X,Y,Z='+str(p.x)+','+str(p.y)+','+str(p.z))
2.文件版本和格式
LAS文件格式,提供了3种不同的文件格式(1.0,1.1和1.2)和4种不同的点格式(0,1,2,3)。
点格式版本和属性
dataformat_id | Time | Color |
---|---|---|
0 | ||
1 | X | |
2 | X | |
3 | X | X |
无论哪种数据格式都具有的属性
dataformat_id |
---|
x |
y |
z |
intensity |
return_number |
number_of_returns |
scan_direction |
flightline_edge |
classification |
scan_angle |
user_data |
3.头部(Header)
获取las文件的头部信息
from liblas import file
f = file.File('LiForest.las', mode='r')
header = f.header
print('主版本号:' + str(header.major_version))
print('副版本号:' + str(header.minor_version))
print('最小值:%f,%f,%f' % (header.min[0],header.min[1],header.min[2]))
print('最大值:%f,%f,%f' % (header.max[0],header.max[1],header.max[2]))
print('比例:%f,%f,%f' % (header.scale[0],header.scale[1],header.scale[2]))
print('偏移量:%f,%f,%f' % (header.offset[0],header.offset[1],header.offset[2]))
print('点云数量:%d' % (header.point_records_count))
点云坐标计算
x = (x_int * x_scale) + x_offset
y = (y_int * y_scale) + y_offset
z = (z_int * z_scale) + z_offset
4.点对象(Point)
from liblas import file
f = file.File('LiForest.las', mode='r')
point = f[0]
print('X=%f,Y=%f,Z=%f' % (point.x,point.y,point.z))
print('scan_angle=%f' % point.scan_angle)
print('scan_direction=%f' % point.scan_direction)
print('return_number=%f' % point.return_number)
print('number_of_returns=%f' % point.number_of_returns)
print('flightline_edge=%f' % point.flightline_edge)
print('classification=%f' % point.classification)
print('time=%s' % str(point.time))
print('intensity=%f' % point.intensity)
print('red=%f' % point.color.red)
print('green=%f' % point.color.green)
print('blue=%f' % point.color.blue)
5.写文件(Writing)
要新建一个las文件,首先需要有一个头信息。头对象会有一些默认值,但是设置dataformat_id和version_minor是十分重要的。
import liblas
from liblas import file
from liblas import header
las_header = header.Header()
las_header.dataformat_id = 1
las_header.minor_version = 1
f = file.File('new.las', mode='w', header=las_header)
pt = liblas.point.Point()
pt.x = 118.0
pt.y = 32.0
pt.z = 12.0
f.write(pt)
f.close()