Skip to content

Commit f61b891

Browse files
committed
metadata: add ProjectionID and Projection to root level (as copy), skip reading bounds if exporting metadata only, remove additional metada console log. #BUILD BETA
1 parent 9a5d79b commit f61b891

File tree

3 files changed

+29
-140
lines changed

3 files changed

+29
-140
lines changed

MainWindow.xaml.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ private static void ProcessAllFiles(System.Object importSettingsObject)
156156

157157
// get all file bounds, if in batch mode and RGB+INT+PACK
158158
// TODO: check what happens if its too high? over 128/256?
159-
if (importSettings.useAutoOffset == true && importSettings.importIntensity == true && importSettings.importRGB == true && importSettings.packColors == true)
159+
if (importSettings.useAutoOffset == true && importSettings.importIntensity == true && importSettings.importRGB == true && importSettings.packColors == true && importSettings.importMetadataOnly == false)
160160
{
161161
for (int i = 0, len = importSettings.maxFiles; i < len; i++)
162162
{
@@ -444,7 +444,7 @@ static void ParseFile(ImportSettings importSettings, int fileIndex)
444444
if (fileIndex == (importSettings.maxFiles - 1))
445445
{
446446
var jsonMeta = JsonSerializer.Serialize(lasHeaders, new JsonSerializerOptions() { WriteIndented = true });
447-
Log.WriteLine("MetaData: " + jsonMeta);
447+
//Log.WriteLine("MetaData: " + jsonMeta);
448448
// write metadata to file
449449
var jsonFile = Path.Combine(Path.GetDirectoryName(importSettings.outputFile), Path.GetFileNameWithoutExtension(importSettings.outputFile) + ".json");
450450
Log.WriteLine("Writing metadata to file: " + jsonFile);

Readers/LAZ.cs

+24-138
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,33 @@ LasHeader IReader.GetMetaData(ImportSettings importSettings, int fileIndex)
106106

107107
for (int k = 0; k < gk.NumberOfKeys; k++)
108108
{
109-
gk.KeyEntries.Add(new sKeyEntry
109+
var newEntry = new sKeyEntry
110110
{
111-
KeyID = g.pKey[k].wKeyID, // Defined key ID for each piece of GeoTIFF data. IDs contained in the GeoTIFF specification
111+
KeyID = g.pKey[k].wKeyID,
112112
KeyIDString = Enum.GetName(typeof(GeoTiffKeys), g.pKey[k].wKeyID),
113-
TIFFTagLocation = g.pKey[k].wTIFFTagLocation, // 0 =wValue_Offset field as an unsigned short, 34736 means the data is located at index wValue_Offset of the GeoDoubleParamsTag record, 34767 means the data is located at index wValue_Offset of the GeoAsciiParamsTag record
114-
Count = g.pKey[k].wCount, // Number of characters in string for values of GeoAsciiParamsTag, otherwise is 1
115-
Value_Offset = g.pKey[k].wValue_Offset, // Contents vary depending on value for wTIFFTagLocation above
113+
TIFFTagLocation = g.pKey[k].wTIFFTagLocation,
114+
Count = g.pKey[k].wCount,
115+
Value_Offset = g.pKey[k].wValue_Offset,
116116
Value_OffsetString = Enum.GetName(typeof(GeoTiffKeys), g.pKey[k].wValue_Offset)
117-
});
117+
};
118+
119+
if (newEntry.Value_Offset == 32618) // or id 3072?
120+
{
121+
h.ProjectionID = newEntry.Value_Offset;
122+
h.Projection = newEntry.Value_OffsetString;
123+
}
124+
125+
gk.KeyEntries.Add(newEntry);
126+
127+
//gk.KeyEntries.Add(new sKeyEntry
128+
//{
129+
// KeyID = g.pKey[k].wKeyID, // Defined key ID for each piece of GeoTIFF data. IDs contained in the GeoTIFF specification
130+
// KeyIDString = Enum.GetName(typeof(GeoTiffKeys), g.pKey[k].wKeyID),
131+
// TIFFTagLocation = g.pKey[k].wTIFFTagLocation, // 0 =wValue_Offset field as an unsigned short, 34736 means the data is located at index wValue_Offset of the GeoDoubleParamsTag record, 34767 means the data is located at index wValue_Offset of the GeoAsciiParamsTag record
132+
// Count = g.pKey[k].wCount, // Number of characters in string for values of GeoAsciiParamsTag, otherwise is 1
133+
// Value_Offset = g.pKey[k].wValue_Offset, // Contents vary depending on value for wTIFFTagLocation above
134+
// Value_OffsetString = Enum.GetName(typeof(GeoTiffKeys), g.pKey[k].wValue_Offset)
135+
//});
118136
}
119137
vlr.GeoKeys.Add(gk);
120138
}
@@ -129,138 +147,6 @@ LasHeader IReader.GetMetaData(ImportSettings importSettings, int fileIndex)
129147
h.VariableLengthRecords.Add(vlr);
130148
}
131149
}
132-
133-
//Console.WriteLine("user_data_after_header_size:" + lazReader.header.user_data_after_header_size);
134-
//Console.WriteLine("vlrs:" + lazReader.header.vlrs.Count);
135-
//for (int i = 0; i < lazReader.header.vlrs.Count; i++)
136-
//{
137-
// Console.WriteLine("vlrs[" + i + "].reserved:" + lazReader.header.vlrs[i].reserved);
138-
// //var useridstr = System.Text.Encoding.UTF8.GetString(lazReader.header.vlrs[i].user_id);
139-
// string useridstr = "";
140-
// for (int j = 0; j < lazReader.header.vlrs[i].user_id.Length; j++)
141-
// {
142-
// useridstr += (char)lazReader.header.vlrs[i].user_id[j];
143-
// //useridstr += lazReader.header.vlrs[i].user_id[j].ToString("X")+",";
144-
// }
145-
// Console.WriteLine("vlrs[" + i + "].user_id:" + useridstr);
146-
// Console.WriteLine("vlrs[" + i + "].record_id:" + lazReader.header.vlrs[i].record_id);
147-
// Console.WriteLine("vlrs[" + i + "].record_length_after_header:" + lazReader.header.vlrs[i].record_length_after_header);
148-
// Console.WriteLine("datalen: " + lazReader.header.vlrs[i].data.Length);
149-
150-
// if (lazReader.header.vlrs[i].record_id == 34735) // GeoKeyDirectoryTag
151-
// {
152-
// var g = ParseGeoKeysFromByteArray(lazReader.header.vlrs[i].data);
153-
// PrintGeoKeys(g);
154-
// }
155-
156-
// if (lazReader.header.vlrs[i].record_id == 34737) // GeoAsciiParamsTag
157-
// {
158-
// var g = System.Text.Encoding.UTF8.GetString(lazReader.header.vlrs[i].data);
159-
// Console.WriteLine("GeoAsciiParamsTag:" + g);
160-
// }
161-
162-
// //var descstr = System.Text.Encoding.UTF8.GetString(lazReader.header.vlrs[i].description);
163-
// string descstr = "";
164-
// for (int j = 0; j < lazReader.header.vlrs[i].description.Length; j++)
165-
// {
166-
// descstr += (char)lazReader.header.vlrs[i].description[j];
167-
// //descstr += lazReader.header.vlrs[i].description[j].ToString("X")+",";
168-
// }
169-
170-
// Console.WriteLine("vlrs[" + i + "].description:" + descstr);
171-
//}
172-
173-
// read data after header
174-
//var h = lazReader.get_header_pointer();
175-
//Console.WriteLine("header_size:" + h.header_size);
176-
//Console.WriteLine("offset_to_point_data:" + h.offset_to_point_data);
177-
178-
// read binary data after header manually
179-
//var data = new byte[h.header_size];
180-
//var ev = lazReader.read_evlrs();
181-
//Console.WriteLine("ev:"+ev);
182-
183-
//var file = importSettings.inputFiles[fileIndex];
184-
//int offset = h.header_size+54;
185-
186-
//var g = ReadGeoKeys(file, offset);
187-
//PrintGeoKeys(g);
188-
189-
//using (FileStream stream = new FileStream(file, FileMode.Open, FileAccess.Read))
190-
//{
191-
// stream.Seek(offset, SeekOrigin.Begin);
192-
193-
// using (BinaryReader reader = new BinaryReader(stream))
194-
// {
195-
// int data = reader.ReadInt32();
196-
// Console.WriteLine($"Read data: {data}");
197-
// }
198-
//}
199-
200-
//h.header_size
201-
//var ud = lazReader.header.user_data_after_header;
202-
//var udstr = "";
203-
//for (int i = 0; i < ud.Length; i++)
204-
//{
205-
// udstr += (char)ud[i];
206-
// //udstr += ud[i].ToString("X") + ",";
207-
//}
208-
209-
//Console.WriteLine(lazReader.header.point_data_format);
210-
//Console.WriteLine(lazReader.header.x_scale_factor);
211-
//Console.WriteLine(lazReader.header.y_scale_factor);
212-
//Console.WriteLine(lazReader.header.z_scale_factor);
213-
//Console.WriteLine(lazReader.header.x_offset);
214-
//Console.WriteLine(lazReader.header.y_offset);
215-
//Console.WriteLine(lazReader.header.z_offset);
216-
//Console.WriteLine(lazReader.header.max_x);
217-
//Console.WriteLine(lazReader.header.min_x);
218-
//Console.WriteLine(lazReader.header.max_y);
219-
//Console.WriteLine(lazReader.header.min_y);
220-
//Console.WriteLine(lazReader.header.max_z);
221-
//Console.WriteLine(lazReader.header.min_z);
222-
//Console.WriteLine(lazReader.header.start_of_waveform_data_packet_record);
223-
224-
//Console.WriteLine(lazReader.header.version_major);
225-
//Console.WriteLine(lazReader.header.version_minor);
226-
//Console.WriteLine("----------");
227-
//Console.WriteLine(lazReader.header.number_of_extended_variable_length_records);
228-
//Console.WriteLine(lazReader.header.number_of_variable_length_records);
229-
//Console.WriteLine(lazReader.header.start_of_first_extended_variable_length_record);
230-
231-
//var d = lazReader.header.number_of_extended_variable_length_records;
232-
//d = lazReader.header.version_major;
233-
//d = lazReader.header.version_minor;
234-
//var d2 = lazReader.header.system_identifier;
235-
//var d3 = lazReader.header.generating_software;
236-
//d = lazReader.header.file_creation_day;
237-
//d = lazReader.header.file_creation_year;
238-
//d = lazReader.header.header_size;
239-
//d = lazReader.header.;
240-
//d = lazReader.header.offset_to_point_data;
241-
//d = lazReader.header.number_of_variable_length_records;
242-
//d = lazReader.header.point_data_format;
243-
//d = lazReader.header.point_data_record_length;
244-
//d = lazReader.header.number_of_point_records;
245-
//d = lazReader.header.number_of_points_by_return;
246-
//d = lazReader.header.x_scale_factor;
247-
//d = lazReader.header.y_scale_factor;
248-
//d = lazReader.header.z_scale_factor;
249-
//d = lazReader.header.x_offset;
250-
//d = lazReader.header.y_offset;
251-
//d = lazReader.header.z_offset;
252-
//d = lazReader.header.max_x;
253-
//d = lazReader.header.min_x;
254-
//d = lazReader.header.max_y;
255-
//d = lazReader.header.min_y;
256-
//d = lazReader.header.max_z;
257-
//d = lazReader.header.min_z;
258-
//d = lazReader.header.start_of_waveform_data_packet_record;
259-
//d = lazReader.header.start_of_first_extended_variable_length_record;
260-
//d = lazReader.header.number_of_extended_variable_length_records;
261-
//d = lazReader.header.number_of_point_records;
262-
//d = lazReader.header.number_of_points_by_return;
263-
264150
return h;
265151
}
266152

Structs/Metadata/LasHeader.cs

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ public class LasHeader
88
{
99
public string FileName { get; set; }
1010
// v1.2
11+
public ushort ProjectionID { get; set; } // these are duplicate data from the VLR (just for convenience)
12+
public string Projection { get; set; }
13+
1114
public ushort FileSourceID { get; set; }
1215
public ushort GlobalEncoding { get; set; }
1316
public uint ProjectID_GUID_data1 { get; set; }

0 commit comments

Comments
 (0)