24 static constexpr int TYPE = 129;
27 uint16_t record_length;
28 char agency_signature[4];
30 uint16_t product_subid;
32 uint8_t noaa_specific_compression;
34 NOAALRITHeader(uint8_t *data)
37 record_length = data[1] << 8 | data[2];
38 std::memcpy(agency_signature, &data[3], 4);
39 product_id = data[7] << 8 | data[8];
40 product_subid = data[9] << 8 | data[10];
41 parameter = data[11] << 8 | data[12];
42 noaa_specific_compression = data[13];
46 struct RiceCompressionHeader
48 static constexpr int TYPE = 131;
51 uint16_t record_length;
53 uint8_t pixels_per_block;
54 uint8_t scanlines_per_packet;
56 RiceCompressionHeader(uint8_t *data)
59 record_length = data[1] << 8 | data[2];
60 flags = data[3] << 8 | data[4];
61 pixels_per_block = data[5];
62 scanlines_per_packet = data[6];
66 struct AncillaryTextRecord
68 static constexpr int TYPE = 6;
71 uint16_t record_length;
72 std::string ancillary_text;
74 std::map<std::string, std::string> meta;
76 AncillaryTextRecord(uint8_t *data)
79 record_length = data[1] << 8 | data[2];
80 ancillary_text.insert(ancillary_text.end(), &data[3], &data[record_length]);
84 std::vector<std::string> fields = splitString(ancillary_text,
';');
86 for (std::string &field : fields)
88 std::vector<std::string> values = splitString(field,
'=');
89 if (values.size() == 2)
91 values[0] = values[0].substr(0, values[0].find_last_not_of(
' ') + 1);
92 values[1] = values[1].substr(values[1].find_first_not_of(
' '));
93 meta.insert({values[0], values[1]});
99 struct AnnotationRecord
101 static constexpr int TYPE = 4;
104 uint16_t record_length;
105 std::string annotation_text;
107 AnnotationRecord(uint8_t *data)
110 record_length = data[1] << 8 | data[2];
111 annotation_text.insert(annotation_text.end(), &data[3], &data[record_length]);
115 struct SegmentIdentificationHeader
117 static constexpr int TYPE = 128;
120 uint16_t record_length;
121 uint16_t image_identifier;
122 uint16_t segment_sequence_number;
123 uint16_t start_column_of_segment;
124 uint16_t start_line_of_segment;
125 uint16_t max_segment;
129 SegmentIdentificationHeader(uint8_t *data)
132 record_length = data[1] << 8 | data[2];
133 image_identifier = data[3] << 8 | data[4];
134 segment_sequence_number = data[5] << 8 | data[6];
135 start_column_of_segment = data[7] << 8 | data[8];
136 start_line_of_segment = data[9] << 8 | data[10];
137 max_segment = data[11] << 8 | data[12];
138 max_column = data[13] << 8 | data[14];
139 max_row = data[15] << 8 | data[16];