(entries: &[RTreeEntry], min_fill: usize)
| 160 | } |
| 161 | |
| 162 | fn choose_best_split_leaf(entries: &[RTreeEntry], min_fill: usize) -> usize { |
| 163 | let mut best_k = min_fill; |
| 164 | let mut best_overlap = f64::INFINITY; |
| 165 | let mut best_area = f64::INFINITY; |
| 166 | for k in min_fill..=(entries.len() - min_fill) { |
| 167 | let left = entries[..k] |
| 168 | .iter() |
| 169 | .fold(entries[0].bbox, |a, e| a.union(&e.bbox)); |
| 170 | let right = entries[k..] |
| 171 | .iter() |
| 172 | .fold(entries[k].bbox, |a, e| a.union(&e.bbox)); |
| 173 | let overlap = left.overlap_area(&right); |
| 174 | let area = left.area() + right.area(); |
| 175 | if overlap < best_overlap || (overlap == best_overlap && area < best_area) { |
| 176 | best_overlap = overlap; |
| 177 | best_area = area; |
| 178 | best_k = k; |
| 179 | } |
| 180 | } |
| 181 | best_k |
| 182 | } |
| 183 | |
| 184 | fn choose_best_split_internal(children: &[ChildRef], min_fill: usize) -> usize { |
| 185 | let mut best_k = min_fill; |
no test coverage detected