У меня есть большой список ограничивающих рамок, как я могу рассчитать дубликаты?

0

У меня есть список ограничивающих ящиков, мне было интересно, как я могу рассчитать, какие из них были избыточными/дублирующими.

Причина в том, что у меня есть 2 миллиона из них, которые я отправляю в API, и я хочу знать, какие из них перекрываются, поэтому я могу уменьшить их, поэтому каждая ячейка покрывает только уникальную область земли, поэтому никакие две ограничивающие коробки не покрывают одну и ту же часть геопространства.

Как бы я вычислил его так, чтобы эти ограничивающие прямоугольники были покрыты собственным уникальным пространством гео-земли?

Я пишу эту программу в C++.

Теги:
algorithm
geolocation
theory

2 ответа

1
Лучший ответ

Я думаю, что эта задача сложнее, чем вы думаете.

Вам нужно будет разбить существующие ящики, пока не будет перекрываться, а затем удалите ящики, полностью содержащиеся в другом.

Вместо того, чтобы дать вам решение, я рекомендую проверить, можете ли вы жить:

1) удалите коробки, которые полностью содержатся в другой коробке.
2) оставлять (partly-) перекрывающиеся коробки, как они есть.

Для 2 миллионов вам нужен пространственный индекс (QuadTree), чтобы получить список всех ящиков рядом с одним ящиком.

Если вам нужно избегать перекрытий, то вы должны продолжать думать, что должно быть результатом?
A) Объединение перекрывающихся прямоугольников, которые не являются теперь прямоугольником, а многоугольником.
или B) Результат должен быть прямоугольником.

  • 0
    Да, это очень сложно, одно решение, которое я придумал, состоит в том, что эти ограничивающие рамки фактически рассчитаны из точки геолокации, которая находится в центре их. Таким образом, я мог бы тренироваться в радиусе от этой центральной точки, которая заполняет как можно большую часть поля. Если какие-либо другие центральные точки находятся в этом радиусе, тогда я удаляю их и связанные с ними прямоугольники, тогда я просто полагаюсь на потенциально небольшое количество перекрытий, чтобы не иметь значения или не повлиять на результаты неблагоприятно, что, как вы уже упомянули, делает выше. :)
  • 0
    Это звучит хорошо, вы часто можете сэкономить много денег, если вы идете простым, но достаточным путем.
0

Вы можете проверить, находится ли X% вершин коробки внутри другого поля, чтобы найти, перекрывается ли он, но я полагаю, что это не оптимальное решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню