From 6721be7ee7584e28962d379ed7b6ca3dd1c9d08b Mon Sep 17 00:00:00 2001 From: vng Date: Thu, 2 Feb 2017 19:50:34 +0300 Subject: [PATCH] [geo-index][covering] Fixed cells covering. Use more predictive criteria. --- geometry/covering_utils.hpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/geometry/covering_utils.hpp b/geometry/covering_utils.hpp index 24556eead2..a2dbfb8df2 100644 --- a/geometry/covering_utils.hpp +++ b/geometry/covering_utils.hpp @@ -101,16 +101,20 @@ void CoverObject(IntersectF const & intersect, uint64_t cellPenaltyArea, CellIdC uint64_t subdivArea = 0; for (size_t i = 0; i < subdiv.size(); ++i) - subdivArea += my::sq(uint64_t(1 << (CellIdT::DEPTH_LEVELS - 1 - subdiv[i].Level()))); + subdivArea += my::sq(uint64_t(1 << (cellDepth - 1 - subdiv[i].Level()))); ASSERT(!subdiv.empty(), (cellPenaltyArea, out, cell)); - if (subdiv.empty() || cellPenaltyArea * (int(subdiv.size()) - 1) >= cellArea - subdivArea) + // This criteria is more clear for me. Let's divide if we can save more than cellPenaltyArea. + if (subdiv.size() > 1 && cellPenaltyArea >= cellArea - subdivArea) + { out.push_back(cell); + } else + { for (size_t i = 0; i < subdiv.size(); ++i) out.push_back(subdiv[i]); + } } - } // namespace covering