提取.las文件中各点的位置及反射强度信息

import struct
import os

class OneZeroHeader(object):
    """
    1.0版本
    """

    def __init__(self):
        self.file_signature = None  # 文件签名
        self.reserved = None  # 预留字段
        self.guid_1 = None  # 项目ID1
        self.guid_2 = None  # 项目ID2
        self.guid_3 = None  # 项目ID3
        self.guid_4 = None  # 项目ID4
        self.version_major = None  # 大版本
        self.version_minor = None  # 小版本
        self.system_identifier = None  # 硬件信息
        self.generating_software = None  # 软件信息
        self.flight_date_julian = None  # 文件创建天数
        self.year = None  # 文件创建年份
        self.header_size = None  # 头文件大小
        self.offset_to_data = None  # 点数据记录起始位置
        self.number_of_variable_length_records = None  # 可变数据记录长度
        self.point_data_record_format = None  # 点数据记录格式
        self.point_data_record_length = None  # 点数据记录长度
        self.number_of_point_records = None  # 总共的点数量
        self.number_of_points_by_return = None  # 回波点数量
        self.x_scale_factor = None  # x比例因子
        self.y_scale_factor = None  # y比例因子
        self.z_scale_factor = None  # z比例因子
        self.x_offset = None  # x偏移量
        self.y_offset = None  # y偏移量
        self.z_offset = None  # z偏移量
        self.max_x = None  # x最大值
        self.min_x = None  # x最小值
        self.max_y = None  # y最大值
        self.min_y = None  # y最小值
        self.max_z = None  # z最大值
        self.min_z = None  # z最小值

    def read_header(self, f):
        """
        读取头
        :param f:
        :return:
        """
        f.seek(0)
        self.file_signature = f.read(4).decode("utf-8")
        self.reserved = struct.unpack('L', f.read(4))[0]
        self.guid_1 = struct.unpack('L', f.read(4))[0]
        self.guid_2 = struct.unpack('H', f.read(2))[0]
        self.guid_3 = struct.unpack('H', f.read(2))[0]
        self.guid_4 = struct.unpack('8s', f.read(8))[0].decode("utf-8")
        self.version_major = struct.unpack('B', f.read(1))[0]
        self.version_minor = struct.unpack('B', f.read(1))[0]
        self.system_identifier = struct.unpack('32s', f.read(32))[0].decode("utf-8")
        self.generating_software = struct.unpack('32s', f.read(32))[0].decode("utf-8")
        self.flight_date_julian = struct.unpack('H', f.read(2))[0]
        self.year = struct.unpack('H', f.read(2))[0]
        self.header_size = struct.unpack('H', f.read(2))[0]
        self.offset_to_data = struct.unpack('L', f.read(4))[0]
        self.number_of_variable_length_records = struct.unpack('L', f.read(4))[0]
        self.point_data_record_format = struct.unpack('B', f.read(1))[0]
        self.point_data_record_length = struct.unpack('H', f.read(2))[0]
        self.number_of_point_records = struct.unpack('L', f.read(4))[0]
        self.number_of_points_by_return = struct.unpack('5L', f.read(20))[0]
        self.x_scale_factor = struct.unpack('d', f.read(8))[0]
        self.y_scale_factor = struct.unpack('d', f.read(8))[0]
        self.z_scale_factor = struct.unpack('d', f.read(8))[0]
        self.x_offset = struct.unpack('d', f.read(8))[0]
        self.y_offset = struct.unpack('d', f.read(8))[0]
        self.z_offset = struct.unpack('d', f.read(8))[0]
        self.max_x = struct.unpack('d', f.read(8))[0]
        self.min_x = struct.unpack('d', f.read(8))[0]
        self.max_y = struct.unpack('d', f.read(8))[0]
        self.min_y = struct.unpack('d', f.read(8))[0]
        self.max_z = struct.unpack('d', f.read(8))[0]
        self.min_z = struct.unpack('d', f.read(8))[0]


class OneOneHeader(object):
    """
    1.1版本
    """

    def __init__(self):
        self.file_signature = None  # 文件签名
        self.file_source_id = None  # 文件ID
        self.reserved = None  # 预留字段
        self.project_id_1 = None  # 项目ID1
        self.project_id_2 = None  # 项目ID2
        self.project_id_3 = None  # 项目ID3
        self.project_id_4 = None  # 项目ID4
        self.version_major = None  # 大版本
        self.version_minor = None  # 小版本
        self.system_identifier = None  # 硬件信息
        self.generating_software = None  # 软件信息
        self.file_creation_day_of_year = None  # 文件创建天数
        self.file_creation_year = None  # 文件创建年份
        self.header_size = None  # 头文件大小
        self.offset_to_point_data = None  # 点数据记录起始位置
        self.number_of_variable_length_records = None  # 可变数据记录长度
        self.point_data_record_format = None  # 点数据记录格式
        self.point_data_record_length = None  # 点数据记录长度
        self.number_of_point_records = None  # 总共的点数量
        self.number_of_points_by_return = None  # 回波点数量
        self.x_scale_factor &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值