Exemple #1
0
    def test_vlr_defined_dimension_dtypes(self):
        """Testing v1.4 VLR defined dimension data types (LL API)"""
        from laspy.util import edim_fmt_dict, fmtLen, LEfmt,defaults,defaults_test

        for dfList in [defaults, defaults_test]:

            for i in range(1,31):
                print("...data format: "+ str(i))
                # Create a new header
                new_header = self.File1.header.copy()
                # Create new dimension
                dimname = "test_dimension_" + str(i)
                new_dimension = header.ExtraBytesStruct(
                    name = dimname, data_type = i) 
                # Collect bytes for new dimension specification 
                new_dim_raw = new_dimension.to_byte_string() 
                # Create a VLR defining our new dim
                new_VLR_rec = header.VLR(user_id = "LASF_Spec", record_id = 4,
                    description = "Testing Extra Bytes.",
                    VLR_body = (new_dim_raw))

                # Figure out how much we need to pad the point records
                new_dim_fmt = edim_fmt_dict[i]
                new_dim_num = new_dim_fmt[1]
                new_dim_bytelen = fmtLen[LEfmt[new_dim_fmt[0]]]
                new_total_bytes = new_dim_bytelen*new_dim_num 

                new_header.data_record_length += (new_total_bytes)

                File2 = File.File(self.output_tempfile, mode = "w", header = new_header, 
                    vlrs = [new_VLR_rec], evlrs = self.File1.header.evlrs)
    
                File2.X = self.File1.X
    
                dim_default = dfList[LEfmt[edim_fmt_dict[i][0]]]
                is_str = type(dim_default) == type(" ")
                if new_dim_num == 1:
                    new_dim_val = [dim_default]*len(self.File1)
                elif is_str:
                    new_dim_val = [dim_default*new_dim_num]*len(self.File1)
                else: 
                    new_dim_val = [[dim_default]*new_dim_num]*len(self.File1)

                File2._writer.set_dimension(dimname, new_dim_val)
                current_dim_val = File2._writer.get_dimension(dimname)

                if (is_str):
                    self.assertEqual([x.encode() for x in new_dim_val],
                            current_dim_val.tolist(), msg = "Problem with data format " + str(i))
                else:
                    self.assertEqual(current_dim_val.tolist(), new_dim_val,
                        msg = "Problem with data format " + str(i))
                
                File2.close(ignore_header_changes = True)
Exemple #2
0
    def test_vlr_defined_dimensions(self):
        """Testingi multiple v1.4 VLR defined dimensions (LL API)"""
        new_header = self.File1.header.copy()
        # Test basic numeric dimension
        new_dim_record1 = header.ExtraBytesStruct(name="test dimension 1234",
                                                  data_type=5)
        # Test string dimension (len 3)
        new_dim_record2 = header.ExtraBytesStruct(name="test dimension 5678",
                                                  data_type=22)
        # Test integer array dimension (len 3)
        new_dim_record3 = header.ExtraBytesStruct(name="test dimension 9",
                                                  data_type=26)
        new_VLR_rec = header.VLR(user_id="LASF_Spec",
                                 record_id=4,
                                 VLR_body=(new_dim_record1.to_byte_string() +
                                           new_dim_record2.to_byte_string() +
                                           new_dim_record3.to_byte_string()))
        new_header.data_record_length += (19)
        File2 = File.File(self.output_tempfile,
                          mode="w",
                          header=new_header,
                          vlrs=[new_VLR_rec],
                          evlrs=self.File1.header.evlrs)

        File2.X = self.File1.X

        File2._writer.set_dimension("test_dimension_1234",
                                    [4] * len(self.File1))
        File2._writer.set_dimension("test_dimension_5678",
                                    ["AAA"] * len(self.File1))
        File2._writer.set_dimension("test_dimension_9",
                                    [[1, 2, 3]] * len(self.File1))
        self.assertTrue(
            all(np.array([4] * len(self.File1)) == File2.test_dimension_1234))
        self.assertTrue(
            all(
                np.array([b"AAA"] *
                         len(self.File1)) == File2.test_dimension_5678))
        self.assertEqual(list(File2.test_dimension_9[100]), [1, 2, 3])
        File2.close(ignore_header_changes=True)