SAS.Wiki

Веб-картография и навигация

Инструменты пользователя

Инструменты сайта


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

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

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

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

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

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

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

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

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

Кроме описанных логических операций в программе имеется ещё одна операция Group. Визуально она идентична операции ИЛИ, но есть значительные отличия.

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

Если полигоны не пересекаются, результаты операций ИЛИ и Group будут одинаковы.

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

В случае операции Group координаты вершин никаких изменений не претерпевают, поэтому операция Group выполняется быстрее, чем ИЛИ. В результате операции Group дырки не образуются.

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

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

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

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

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

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

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

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

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

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

  • Изменить порядок следования полигонов в списке, а, значит, и их статусы, можно кнопками стрелка вверх и стрелка вниз. Первый по списку полигон всегда получает статус subject.
  • Кнопка с красным знаком минус позволяет удалить выделенный полигон из списка.
  • Кнопка с большим красным крестом полностью очищает список полигонов.
  • Выпадающий список содержит все доступные логические операции с полигонами.
  • Кнопка с зелёной «галкой» служит для подтверждения выбранных параметров и применения логической операции. После этого на экране появится результат выбранной логической операции.
  • Следующая кнопка служит для вызова окна Операции с выделенной областью.
  • Кнопка с изображением дискеты сохраняет результат в базе меток.

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

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

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

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

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

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

Перевод этой страницы: