На главную страницу

Логические операции с полигонами

Под логическими операциями понимаются операции, подобные операциям над битами (байтами) в булевой алгебре. Это операции И (AND или Intersection), ИЛИ (OR или Union), НЕ (NOT или Difference), ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR). Результаты логических операций с полигонами показывают следующие рисунки.

Имеются два полигона: звезда и круг. Здесь subject - полигон, относительно которого проводится логическая операция, clip - второй полигон, участвующий в логической операции.

Применим к этим полигонам логическую операцию И. Зелёным цветом показан результат логической операции. Таким образом, в результат войдут области, принадлежащие одновременно обоим полигонам.

Применим к полигонам логическую операцию ИЛИ. Видно, что в результат вошли области, принадлежащие любому из полигонов.

Применим к полигонам логическую операцию НЕ. Результат - области, принадлежащие первому полигону, но не принадлежащие второму. Здесь важно, какой из полигонов имеет статус subject, а какой - clip.

Применим к полигонам логическую операцию ИСКЛЮЧАЮЩЕЕ ИЛИ. Результат - области, принадлежащие только одному из полигонов. Если полигоны не пересекаются, результат будет идентичен результату логической операции ИЛИ.

Кроме описанных логических операций в программе имеется ещё одна операция Group. Она идентична операции ИЛИ, но с некоторыми отличиями: если полигоны пересекаются, результатом операции ИЛИ является один новый полигон, а результатом операции Group являются по-прежнему два полигона, но объединённые в мультиполигон. Если полигоны не пересекаются, результаты обеих операций будут одинаковы. Также следует учитывать, что при всех логических операциях, кроме Group, происходит округление координат вершин полигонов, из-за чего полученные новые полигоны будут иметь вершины, не совсем совпадающие с вершинами исходных полигонов. В случае же операции Group координаты вершин никаких изменений не претерпевают, поэтому операция Group выполняется быстрее, чем ИЛИ.

Результаты логических операций могут быть использованы для Операций с выделенной областью, то есть для загрузки, копирования, удаления, экспорта и пр. Кроме того, результаты могут быть сохранены в базе меток для последующего использования.

В логических операциях может участвовать любое количество полигонов. Нужно лишь учитывать, что логическая операция с каждым последующим полигоном из списка проводится не над результатом предыдущей операции, а над первым в списке полигоном (subject).

Для проведения логических операций с полигонами следует прежде всего добавить в список участвующие полигоны. Это можно сделать четырьмя способами:

Щёлкнуть на нужном полигоне левой кнопкой мыши, зажав клавишу Ctrl.

Щёлкнуть на нужном полигоне правой кнопкой мыши и в контекстном меню выбрать Добавить к Слиянию полигонов.

В Менеджере меток выделить один или (используя Ctrl или Shift) несколько полигонов, щёлкнуть правой кнопкой мыши, в контекстном меню выбрать Добавить к Слиянию полигонов.

В Менеджере меток выделить Категорию меток, щёлкнуть правой кнопкой мыши, в контекстном меню выбрать Добавить к Слиянию полигонов. В данном случае добавлены будут только видимые полигоны.

Если несколько полигонов накладываются друг на друга в точке щелчка мышью, то все они будут добавлены в список. «Лишние» полигоны можно либо удалить из списка средствами рассматриваемой панели, либо предварительно отключить в окне Управление метками.

С левой стороны экрана откроется панель Слияние полигонов (если она ещё не открыта). Панель можно растягивать по горизонтали, а также делать постоянно видимой или убирать с экрана через меню Вид→Панели.

Первому в списке полигону автоматически присваивается статус subject.

Остальным полигонам в списке присваивается статус clip.

В круглых скобках указывается, одиночный это полигон (Single), или мультиполигон (Multi).

Панель Слияние полигонов имеет несколько кнопок плюс выпадающий список. Рассмотрим назначение этих органов управления. Начнём слева направо.

Изменить порядок следования полигонов в списке, а, значит, и их статусы, можно кнопками стрелка вверх и стрелка вниз. Первый по списку полигон всегда получает статус subject.

Кнопка с красным знаком минус позволяет удалить выделенный полигон из списка.

Кнопка с большим красным крестом полностью очищает список полигонов.

Выпадающий список содержит все доступные логические операции с полигонами.

Кнопка с зелёной «галкой» служит для подтверждения выбранных параметров и применения логической операции. После этого на экране появится результат выбранной логической операции.

Следующая кнопка служит для вызова окна Операции с выделенной областью.

Кнопка с изображением дискеты сохраняет результат в базе меток.

В окне сообщения о результате логической операции указывается общее количество созданных полигонов и «дырок». Если в результате логической операции получилось более одного полигона, то в базе меток они будут сохранены как мультиполигон.

Практическое применение

Покажем на примерах, как применять логические операции с полигонами.

Допустим, что нас интересуют снимки нескольких местностей, не соприкасающихся друг с другом. Чтобы отслеживать обновления снимков, покрывающих эти местности, раньше приходилось скачивать каждую из них отдельно. Теперь же можно объединить полигоны, описывающие все нужные местности, в мультиполигон и работать с ним (скачивать, копировать, экспортировать и т. д.) Это позволит проводить нужные действия, лишь один раз запустив процесс. Для объединения нескольких полигонов в мультиполигон следует использовать логическую операцию Group.

Допустим, что нас интересуют снимки, покрывающие только одну область, например, Рязанскую. Часто снимки попадают на две, а то и на три соседних области. Раньше приходилось отрисовывать границу снимка, проходящую по границе области, вручную. Теперь можно взять границу области, вставить её в список полигонов как subject, а в качестве clip взять границу(ы) снимка(ов) и применить логическую операцию И. Пример применения показан на рисунке выше.

Допустим, что внутри полигона, описывающего Рязанскую область, есть снимок, который нужно оставить нетронутым, а всю остальную область - перезакачать. Раньше для этого пришлось бы вручную рисовать несколько полигонов. А теперь можно вставить в список границу области как subject, а полигон, описывающий нужный снимок - как clip, и применить логическую операцию НЕ.

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