예제 #1
0
 def save(self, output_file, class_file=''):
     if output_file.endswith('.txt'):
         if (not class_file and self.c.any()):
             np.savetxt(
                 output_file,
                 np.stack([self.x, self.y, self.z, self.i, self.r, self.c],
                          axis=1),
                 fmt='%.2f,%.2f,%.2f,%d,%d,%d')
         else:
             np.savetxt(output_file,
                        np.stack([self.x, self.y, self.z, self.i, self.r],
                                 axis=1),
                        fmt='%.2f,%.2f,%.2f,%d,%d')
         if class_file:
             self.save_classifications_txt(class_file)
     elif output_file.endswith('.las') or output_file.endswith('.laz'):
         lfile = LasFile(output_file,
                         mode='w',
                         header=LasHeader(x_scale=0.01,
                                          y_scale=0.01,
                                          z_scale=0.01))
         lfile.X = self.x / 0.01
         lfile.Y = self.y / 0.01
         lfile.Z = self.z / 0.01
         lfile.Intensity = self.i
         lfile.flag_byte = self.r
         lfile.Classification = self.c
         lfile.close()
     else:
         raise ValueError('Unknown file type extension: ' + output_file)
예제 #2
0
def save_las(xyzc, header, path):
    # header = Header()
    outfile = File(path, mode="w", header=header)
    outfile.X = xyzc[:, 0]
    outfile.Y = xyzc[:, 1]
    outfile.Z = xyzc[:, 2]
    outfile.Classification = xyzc[:, 3].astype(np.uint8)
    outfile.close()
예제 #3
0
파일: las_io.py 프로젝트: and-viceversa/ODM
def write_cloud(header,
                point_cloud,
                output_point_cloud_path,
                write_extra_dimensions=False):
    (h, scale, offset, evlrs, vlrs) = header

    # Open output file
    output_las_file = File(output_point_cloud_path,
                           mode='w',
                           header=h,
                           evlrs=evlrs,
                           vlrs=vlrs)

    if write_extra_dimensions:
        # Create new dimensions
        for name, dimension in point_cloud.extra_dimensions_metadata.items():
            output_las_file.define_new_dimension(
                name=name,
                data_type=dimension.get_las_type(),
                description="Dimension added by Ground Extend")

        # Assign dimension values
        for dimension_name, values in point_cloud.extra_dimensions.items():
            setattr(output_las_file, dimension_name, values)

    # Adapt points to scale and offset
    [x_scale, y_scale, z_scale] = scale
    [x_offset, y_offset, z_offset] = offset
    [x, y] = np.hsplit(point_cloud.xy, 2)
    output_las_file.X = (x.ravel() - x_offset) / x_scale
    output_las_file.Y = (y.ravel() - y_offset) / y_scale
    output_las_file.Z = (point_cloud.z - z_offset) / z_scale

    # Set color
    [red, green, blue] = np.hsplit(point_cloud.rgb, 3)
    output_las_file.red = red.ravel()
    output_las_file.green = green.ravel()
    output_las_file.blue = blue.ravel()

    # Set classification
    output_las_file.Classification = point_cloud.classification.astype(
        np.uint8)

    # Set header
    output_las_file.header.scale = scale
    output_las_file.header.offset = offset

    # Close files
    output_las_file.close()