У меня есть список ограничивающих ящиков, мне было интересно, как я могу рассчитать, какие из них были избыточными/дублирующими.
Причина в том, что у меня есть 2 миллиона из них, которые я отправляю в API, и я хочу знать, какие из них перекрываются, поэтому я могу уменьшить их, поэтому каждая ячейка покрывает только уникальную область земли, поэтому никакие две ограничивающие коробки не покрывают одну и ту же часть геопространства.
Как бы я вычислил его так, чтобы эти ограничивающие прямоугольники были покрыты собственным уникальным пространством гео-земли?
Я пишу эту программу в C++.
Я думаю, что эта задача сложнее, чем вы думаете.
Вам нужно будет разбить существующие ящики, пока не будет перекрываться, а затем удалите ящики, полностью содержащиеся в другом.
Вместо того, чтобы дать вам решение, я рекомендую проверить, можете ли вы жить:
1) удалите коробки, которые полностью содержатся в другой коробке.
2) оставлять (partly-) перекрывающиеся коробки, как они есть.
Для 2 миллионов вам нужен пространственный индекс (QuadTree), чтобы получить список всех ящиков рядом с одним ящиком.
Если вам нужно избегать перекрытий, то вы должны продолжать думать, что должно быть результатом?
A) Объединение перекрывающихся прямоугольников, которые не являются теперь прямоугольником, а многоугольником.
или B) Результат должен быть прямоугольником.
Вы можете проверить, находится ли X% вершин коробки внутри другого поля, чтобы найти, перекрывается ли он, но я полагаю, что это не оптимальное решение.