MCPcopy Create free account
hub / github.com/LAStools/LAStools / merge_intervals

Method merge_intervals

LASzip/src/lasinterval.cpp:185–298  ·  view source on GitHub ↗

merge adjacent intervals with small gaps in cells to reduce total interval number to maximum

Source from the content-addressed store, hash-verified

183
184// merge adjacent intervals with small gaps in cells to reduce total interval number to maximum
185void LASinterval::merge_intervals(U32 maximum_intervals)
186{
187 U32 diff = 0;
188 LASintervalCell* cell;
189 LASintervalCell* delete_cell;
190
191 // each cell has minimum one interval
192
193 if (maximum_intervals < get_number_cells())
194 {
195 maximum_intervals = 0;
196 }
197 else
198 {
199 maximum_intervals -= get_number_cells();
200 }
201
202 // order intervals by smallest gap
203
204 my_cell_map map;
205 my_cell_hash::iterator hash_element = ((my_cell_hash*)cells)->begin();
206 while (hash_element != ((my_cell_hash*)cells)->end())
207 {
208 cell = (*hash_element).second;
209 while (cell->next)
210 {
211 diff = cell->next->start - cell->end - 1;
212 map.insert(my_cell_map::value_type(diff, cell));
213 cell = cell->next;
214 }
215 hash_element++;
216 }
217
218 // maybe nothing to do
219 if (map.size() <= maximum_intervals)
220 {
221 if (map.size() == 0)
222 {
223 LASMessage(LAS_VERBOSE, "maximum_intervals: %u number of interval gaps: 0 ", maximum_intervals);
224 }
225 else
226 {
227 diff = (*(map.begin())).first;
228 LASMessage(LAS_VERBOSE,"maximum_intervals: %u number of interval gaps: %u next largest interval gap %u", maximum_intervals, (U32)map.size(), diff);
229 }
230 return;
231 }
232
233 my_cell_map::iterator map_element;
234 U32 size = (U32)map.size();
235
236 while (size > maximum_intervals)
237 {
238 map_element = map.begin();
239 diff = (*map_element).first;
240 cell = (*map_element).second;
241 map.erase(map_element);
242 if ((cell->start == 1) && (cell->end == 0)) // the (start == 1 && end == 0) signals that the cell is to be deleted

Callers

nothing calls this directly

Calls 5

LASMessageFunction · 0.85
beginMethod · 0.45
endMethod · 0.45
insertMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected