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)
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()
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()