Попытка собрать полноценную "топологию" после экспорта в GIS "сырого" векторного материала заведомо обречена на провал (конечно, речь не идёт о проекте, состоящем из пары листов с несколькими несвязанными слоями) ...
Если GIS используется как Географическая Информационная Система, а не как вьювер для просмотра векторных данных, требования к последним становятся весьма жесткими. Можно ли найти кратчайший маршрут, если дороги не связаны в общую сеть? Крошечные "недоводы" и пересечения не видны на экране, но их могут быть сотни на несколько тысяч участков дороги...
В сколько-нибудь масштабном проекте приступать к векторизации можно только после детального выяснения топологических отношений между векторными слоями. Обязательно учитывайте при работе требования конечной системы и желаемую форму представления итогового материала! Необходимо четко понимать, с материалами какого рода вы имеете дело. Например, результатом оцифровки земельных участков, как правило, должны быть полигоны, имеющие строго общие границы. В точках пересечения дорог обычно формируются узлы и т.д.
В Easy Trace процесс построения топологической модели лежит на трёх китах:
- Настройка топологических правил взаимоотношения векторных слоёв;
- Подготовка инструкции для операторов (обязательно включающей порядок оцифровки объектов!!!);
- Применения набора тестов проверки топологических взаимоотношений и проверка полигонального покрытия;
- Коррекция топологии - автоматическое совмещение вершин и "дотягивание" висящих концов линий;
- Оптимизация топологии - удаление лишних вершин без нарушения топологической связности и геометрии мелких объектов;
- Поиск изломов - поиск специфических ошибок на полилиниях;
- Сборка полигонов - генерация полигонального покрытия на основе линий границ;
- Проверка полигонов - поиск топологических нарушений в полигональном покрытии;

Команда Топологические правила
Создание набора топологических правил позволяет переложить контроль за из выполнением на инструменты трассировки. То есть, правила построения векторных данных будут автоматически соблюдаться в процессе векторизации.
Поскольку контроль за соблюдением топологических правил выполняется, начиная с первых шагов векторизации, настройка правил отнесена к этапу создания проекта. Она выполняется в окне Топологические правила меню Проект.
Созданный набор правил управляет поведением Топологического редактора и инструментов - трассировщиков во время векторизации. Правила определяют взаимоотношения линий конкретного слоя с линиями группы других слоёв. Возможны три варианта взаимоотношений - игнорировать линию, создать общую вершину или создать узел.
Построение топологии при ручной векторизации
Фактически, построение конкретной топологической модели векторных данных сводится к набору операций называемых привязками и копированием границ. Причём привязываться друг к другу точечные и линейные объекты могут в любых комбинациях. В Easy Trace Pro управление привязками унифицировано для всех инструментов. Оно сводится к трём возможным вариантам:
- принудительно образовать общую вершину;
- принудительно образовать узел;
- следовать правилам взаимодействия слоёв, заданным в окне Топологические правила меню Проект.
Возможен и четвёртый вариант - игнорировать объект. В этом случае формируемая вершина или точка вставки окажутся там, куда указывает курсор. Но этот случай вряд ли можно отнести к пристыковкам ...
Построение полигональных покрытий целиком и полностью основано на копировании границ. Вот только из-за автоматизации пользователь этого может и не заметить...
Привязка векторных объектов
Управление способом привязки выполняется клавишами-модификаторами SHIFT, CTRL и кнопкой - Автопривязка строки параметров инструмента (там, где эта кнопка есть). Привязка может выполнятся либо в момент указания точки вставки (для точечных объектов), либо в момент создания очередной вершины полилинии. Аналогично, привязка выполняется при перемещении точек вставки объектов либо вершин полилиний редактором.
SHIFT
Клавиша принудительно привязывает объект с образованием общей вершины. Удерживая клавишу SHIFT нажатой, укажите левой клавишей «мыши» место пристыковки объекта. Возможные варианты:
- точка к точке - простое совмещение точек вставки объектов;
- точка к линии - образование новой вершины на линии (линиях) в точке вставки;
- линия к точке - точная пристыковка вершины линии к точке вставки;
- линия к линии - образование общей вершины на всех линиях лежащих в указанной точке.
CTRL
Клавиша принудительно образует узел в месте пристыковки полилинии (или точки к полилинии). Удерживая клавишу CTRL, укажите левой клавишей «мыши» место пристыковки. Возможные варианты:
- точка к точке - простое совмещение точек вставки объектов;
- точка к линии - образование узла на линии (линиях) в точке вставки;
- линия к точке - образование узла на линии в точке вставки точечного объекта;
- линия к линии - образование узла на всех линиях лежащих в указанной точке.
Автопривязка
Опция Автопривязка расположена на панелях параметров инструментов создания точечных объектов. Это точка, вствка блока, окружность и текст. Активированная опция автоматически формирует общую вершину или узел в зависимости от топологических правил, заданных для данного проекта. Действие опции модифицируется при нажатии клавиш SHIFT и CTRL.
При нажатии клавиш-модификаторов SHIFT и CTRL в строке подсказки появляется соответствующее сообщение и изменяется форма курсора текущего инструмента.
Еще один способ формирования узла в заданной точке (например, при отрисовке отрезков линий электропередач между опорами) это использование команды Завершить и начать трассировщиков. Команда может быть выбрана из дополнительного меню, выпадающего при нажатии на правую клавишу «мыши» на рабочем поле экрана. Выполнение команды прерывает текущую трассируемую линию и начинает новую в той же точке.
Копирование участков полилиний
В ряде случаев бывает необходимо добиться точного совпадения некоторых участков двух и более полилиний. Пример - изображение откоса вдоль границы дороги. Возможна и ситуация, требующая полного совпадения линейных объектов, находящихся на разных слоях. Это можно сделать следующими инструментами:
Копирование участка полилинии
Выбрав из дополнительном меню трассировщика команду Копировать участок , укажите начальную и конечную точки на копируемой полилинии. При копировании участка замкнутой полилинии автоматически выбирается кратчайший из двух путей между указанными точками. Если требуется скопировать более длинную дугу, укажите на ней промежуточные точки;
Дублирование полилинии
Если необходимо получить полную копию объекта на другом слое, его следует выделить редактором и выполнить команду Продублировать из дополнительного меню редактора.
Построение полигонов
Еще одна сильная сторона Easy Trace Pro - это простые, в чём-то даже элегантные, способы построения полигональных покрытий. Прежде всего они опираются на функцию Автозамыкание, но не менее важны и два других приёма: Резка и Склейка полигонов...
Автозамыкание полигонов
В чём суть этого процесса? Возьмём простейший пример - клетку в центре шахматной доски. Она имеет общие границы с ВОСЕМЬЮ соседними клетками (включая расположенные по диагонали). Для построения границ такой клетки достаточно "пройтись" по примыкающим к ней участкам границ четырёх клеток-соседей. Именно так и поступают инструменты - трассировщики в режиме Автозамыкание.
Для включения режима надо нажать кнопку на строке параметров трассировщика. Естественно, что автозамыкание выполняется только при трассировке полигональных слоёв проекта.
То, что слой будет содержать полигоны определяется флагом (красный ромб) перед именем слоя в списке слоёв проекта. Например, вот так: . Иначе опция Автозамыкание будет недоступна!
Если начало и конец проложенной трассировщиком полилинии пристыкованы к другим полилиниям и включён режим Автозамыкание, трассировщик пытается замкнуть полилинию. То есть построить полигон, отыскав замыкающий путь от начала к концу полилинии, используя границы других полигонов или полилинии.
Если некий участок уже ограничен со всех сторон линейными объектами (например, частный участок - заборами), достаточно указать трассировщиком на ДВЕ СОСЕДНИЕ точки любой из полилиний - заборов. Всё остальное трассировщик сделает сам...
При поиске пути для замыкания полигона трассировщик не делает различий между границами других полигонов или линейными объектами. Зачастую, при "распутывании" полигональной "мозаики" бывает удобным ставить временные перемычки, помогающие замкнуть трассируемый полигон.
Резка полигонов
Если при замыкании полигона вы прихватили и соседний полигон, не следует нажимать UNDO и выполнять операцию заново. Гораздо экономнее отрезать от полигона-захватчика лишнее. И выполняется это, как ни странно, тем же самым трассировщиком! Если начальную точку поставить на границе полигона и пересечь его по линии раздела то (разумеется, при включённой опции Автозамыкание) ... полигон разделится надвое!
Произойдёт то же самое автозамыкание по границе исходного полигона и, кроме того, новый полигон будет автоматически "вычтен" из исходного.
Замыкание полигона всегда выполняется по самому кратчайшему пути. И векторный слой, на котором окажется этот полигон - это текущий слой трассировщика. Так что если большой полигон прихватил несколько мелких полигонов с "чужого" слоя, смените текущий слой и "режьте" на здоровье!
Несколько иначе выглядит "вырезание" полигонов - "островов". Здесь уже используется Редактор. Процесс выглядит так - выбираем больший полигон, переходим в Режим резки
и указываем на полигон-остров. Всё. Запомнить просто: из полигона А вычитаем полигон Б.
Склейка полигонов
Иногда полигон замыкается по некой "лишней" пересекающей полигон линии и его приходится собирать из двух "половинок". Опять обращаемся к редактору . Выбираем первый полигон, переходим в Режим склейки
и указываем на второй полигон. Если полигоны лежали на разных слоях - будет принят слой полигона, указанного первым. Запомнить просто: к полигону А добавить полигон Б.
Правка границ полигонов
Хотя граница между полигонами - это, как минимум, две полилинии, редактируются она так же как и одна. Правда, вместо "обычного" редактора используется Топологически редактор. И команды остаются те же самые: LB(левая кнопка мыши) - добавить вершину, RB - удалить вершину. Кроме того, указав левой клавишей на существующую вершину, её можно перемещать.
Построение топологии при полуавтоматической векторизации
Всё сказанное в предыдущем разделе о ручной векторизации справедливо и для полуавтоматического режима. Разница заключается лишь в том, что прослеживание линий выполняется автоматически. Здесь есть одна тонкость: первую точку при построении следующего полигона удобно указывать на какой-либо из уже существующих границ. Следующая указанная на растре точка задаст направление прослеживания растровой линии.
Достигнув в процессе прослеживания векторной линии, трассировщик, подчиняясь заданным топологическим правилам, формирует вершину, узел или пытается искать продолжение для трассировки. В случае формирования узла - трассировка полилинии завершается.
Если включена опция Автозамыкание, при столкновении с векторными линиями трассировщик пытается замкнуть полигон. Если это удаётся - трассировка завершается.
К автоматическим операциям построения топологии можно отнести операцию сборки полигонов. В этом случае любое пересечение линий выбранных слоёв может породить общую вершину смежных полигонов. Например, для сборки полигональной "шахматной доски" достаточно создать рамку и перечеркнуть поле горизонтальными и вертикальными линиями.
При сборке полигонов исходные линии не изменяются, а полигоны заново создаются на другом (заданном) слое.
О проверке топологии
Утилита проверки топологической модели вызывается командой Проверка топологии из меню Утилиты. Она позволяет оценить корректность векторной структуры по целому ряду критериев оценки. Проверка основана на использовании набора тестов проверяющих выполнение некоторых условий. Тест топологии это просто сочетание набора слоёв с набором применяемых к ним критериев проверки.
Как правило, набор тестов и порядок их применения формируется наиболее опытным оператором-бригадиром. Тестам рекомендуется давать внятные названия («Дороги», «Реки» и т.п.). Оптимально, если подготовка тестов выполняется до раздачи проектов рядовым операторам. Например, во время выполнения пилотного проекта. В этом случае, единожды подготовленный набор тестов автоматически наследуется при создании проектов по прототипу или выделении подпроектов из полного проекта.
Если в ходе работы набор тестов был исправлен или расширен, его можно раздать операторам, используя команду утилиты Импортировать набор тестов из проекта.
В результате выполнения утилиты на слое _ERRORS_ создаётся набор специальных объектов - пометок ошибок. Пометки точно указывают на место возникновения и характер найденной ошибки. Для удобства перемещения по пометкам ошибок, редактор и некоторые другие инструменты имеют горячие клавиши: F - "перейти к следующей пометке" и V - "вернутся к предыдущей пометке". После перехода к пометке её можно удалить как любой другой векторный объект. После удаления пометки автоматически выделяется объект, связанный с найденной ошибкой.
Рекомендуем не откладывать проверку топологии до окончания всей работы над проектом, а проводить ее по-этапно в конце каждого сеанса векторизации. И ещё. Правила хорошего тона требуют ещё раз проверить "работу над ошибками" после её выполнения. Закон Мерфи гласит - "каждая последняя найденная ошибка является предпоследней". Не исключено, что правя одни ошибки, вы добавили другие...
Проверка топологической корректности полигонального покрытия выполняется утилитой Проверка полигонов. В качестве пометок ошибок в этом случае используются созданные утилитой полигоны в местах перекрытий и щелей в полигональном покрытии. Естественно, что эти полигоны тоже помещаются на слой _ERRORS_.
Тесты топологии
Окно утилиты Проверка топологии состоит из двух основных частей - списка векторных слоёв проекта и набора проверяемых правил. Сочетание конкретных слоёв с применяемыми к ним критериями проверки образует тест топологии. Созданному тесту можно присвоить имя и сохранить его для дальнейшего использования.
Таким образом, тест топологии — это именованный постоянный набор правил проверки, применяемый к постоянному набору слоев. Создавая тест, следует стремиться к полному исключению появления "фантомных" ошибок - то есть ситуаций, не являющихся ошибками. Лучше создать два простых теста, не помечающих "фантомные" ошибки, чем один сложный и полный, но прихватывающий лишнее. Практика показала, что операторы не склонны отделять "мух от супа" и просто перестают пользоваться таким тестом...
В случае расширения или внесения изменений в созданный набор тестов, его можно заново раздать операторам. Утилита позволяет импортировать тесты из другого проекта (следует помнить, что при этом существующие тесты будут утрачены).
Для создания нового теста топологии следует:
- Открыть окно утилиты Проверка топологии из меню Утилиты;
- Отметить слои и применяемые к ним правила;
- Нажать кнопку Добавить;
- Задать имя для созданного теста проверки в открывшемся окне и нажать кнопку OK.
Важно:
- при изменении существующего теста он запоминается без нажатия кнопки Добавить;
- давайте тестам уникальные имена — программа не выдает сообщения об изменении существующего теста;
- рекомендуем давать тестам понятные имена для упрощения их выбора операторами;
- кнопка Выполнить все служит для запуска всех имеющихся тестов при финальной проверки проекта.
Утилита Проверка топологии
Утилита предназначена для контроля корректности построенной топологической структуры по ряду критериев оценки.
Утилита проверяет корректность топологии по 7 критериям. Пять из семи критериев имеют уточняющие опции. При выполнении тестов помечаются следующие виды ошибок:
![]() |
Самопересечение полилинии. Пересекаются два сегмента одной полилинии. | ![]() |
Пересечение Крест - пересечение сегментов двух полилиний без образования вершины или узла в месте пересечения. |
![]() |
Пересечение Вершина - пересечение двух и более полилиний с образованием вершины там, где требуется образования узла. Для точечных объектов пометка генерируется в случае совпадения точки вставки объекта с вершиной полилинии, не являющейся узлом. | ![]() |
Висячий узел - конец незамкнутой полилинии, не совпадающий с вершиной ни одной другой полилинии или точкой вставки точечного объекта |
![]() |
Незамкнутая полилиния - полилиния, у которой начальная и конечная вершины не совпадают. | ![]() |
Частичное перекрытие - наложение сегментов двух полилиний. То есть, в этих полилиниях совпадают как минимум по две соседние точки. |
![]() |
Псевдо-узел - совпадение концов двух и только двух незамкнутых полилиний одного слоя. Для точечных объектов ошибка отмечается при совпадении точек вставки объектов, находящихся на одном слое. | ![]() |
Удвоение вершины - совпадение двух смежных вершин одной полилинии (проверка выполняется при поиске самопересечений). |
![]() |
Узел степени 3 и выше - совпадение концов трех и более незамкнутых полилиний, лежащих на одном слое. |
Дополнительные уточняющие опции критериев проверки служат для уменьшения числа возможных фантомных ошибок. Тест Самопересечение дополнен опцией Только пересечение Крест для исключения пометки перемычек связывающих "дырки" с наружной границей полигона. Это досадная особенность представления полигонов с отверстиями в Easy Trace Pro.
Критерии Крест и Вершина дополнены опцией В пределах одного слоя, для исключения обнаружения ошибок в местах пересечения с линиями, топологически не связанными с проверяемыми слоями. Например, бессмыслено помечать места пересечений дорог с линиями электропередач. Помимо этого критерий Крест имеет опцию Игнорировать перекрытия, позволяющую проводить предварительную проверку полигонального покрытия (общие границы допустимы, но другие пересечения - нет!).
Для критерия Висячие узлы доступна опция Пропускать одиночные, которую следует активизировать, если наличие одного висячего узла допустимо (пример - притоки рек).
Критерий Псевдо-узлы дополнен опцией При совпадении атрибутов. В этом случае место перехода асфальтовой дороги в грунтовую не будет помечено как ошибка (при условии, что атрибуты участков слоя Дороги введены правильно).
Критерий Узлы степени 3 и выше позволяет быстро пометить места "склеивания" изолиний после их автоматической векторизации.
Составление тестов и верификация данных
Для выполнения верификации необходим набор тестов топологии (материал должен быть предельно примитивен, если все ошибки можно выявить одним тестом!). Ну а если о тестах ещё никто не позаботился, придётся напрячь воображение самим. То есть отметить галочками необходимые слои и критерии проверки, дать тесту Гордое Имя и - вуаля, тест готов!
К сожалению, если поддаться искушению отметить побольше слоёв и критериев проверки (чтоб уж точно найти всё!) ничего, кроме разочарования вы не получите...
Выбрав проверяемый тематический слой, следует вспомнить требования, предъявляемые к его векторной модели в ТЗ. Как этот слой взаимодействует с другими слоями в местах пересечений, как атрибутируется, связаны ли с ним точечные объекты, ...
Пример. Требования к слою Дороги: слой Дороги образует узлы на всех перекрёстках, каждый отрезок дороги несёт атрибут, соответствующий типу покрытия, дороги связаны со слоем Сооружения (мосты, водопропускные трубы и т. д.) и слоем Границы населённых пунктов. Кроме того, объекты слоя Реки (реки, ручьи, каналы ...) должны образовывать общие вершины в местах пересечений со слоем Дороги.
Первое, что приходит в голову, это проверить сам слой Дороги на Самопересечения, Пересечения Крест и Пересечения Вершина. С первым критерием всё понятно, а любые виды пересечений недопустимы согласно требованию ТЗ - "образовывать узлы на всех перекрёстках".
Три из семи возможных критериев использованы, идём дальше. Висячие узлы - возможны для дорог идущих "в никуда", но не допустимы во всех остальных случаях. Применение критерия полезно, но неизбежно породит "фантомные" ошибки. Лучше добавить отдельный тест только с этим критерием, который следует выполнить 1-2 раза после всех проверок и правок.
Если фантомных пометок слишком много, то проход по ним можно выполнить только один раз. Для этого, после выполнения теста переходим на первую пометку и отмечаем её. Например, заключаем отметку в окружность на слое 0. Затем перемещаемся по пометкам и правим ошибки. Но удаляем только пометки связанные с реальными ошибками. Как только мы перейдём к пометке, отмеченной окружностью - все пометки будут просмотрены. Теперь, посмотрим в списке слоёв на число объектов на слое _ERRORS_ и запишем его. Выполним тест ещё раз. Если найденное тестом число ошибок совпадает с записанным - все реальные ошибки исправлены корректно.
Критерий Псевдо-узлы в нашем случае вполне применим. Дороги не должны без причины рваться на мелкие сегменты. Вот только ТЗ требует соответствия атрибутов сегментов дорог типу их покрытия. А дорог, плавно переходящих из асфальта в щёбёнку, а затем и просто в грунтовую у нас предостаточно... Так что псевдо-узлы должны быть созданы в местах смены покрытия дороги. Но! Атрибуты у соседних сегментов дороги будут разные. Поэтому, дополним критерий опцией - помечать ошибки только При совпадении атрибутов.
Перед выполнением этой проверки полезно убедится, что все полилинии слоя Дороги получили свои атрибуты. Для этого можно погасить все слои кроме слоя Дороги и включить Режим индикации отсутствия атрибутов на панели Режимы. Кнопка режима расположена в правом нижнем углу окна программы. Объекты, имеющие атрибуты будут отображены серым цветом, а без атрибутов - жёлтым.
Оставшиеся критерии Незамкнутая полилиния и Узел степени 3-и и выше для проверки неприменимы по вполне понятным причинам. Итак, первый тест составлен, даём ему имя и сохраняем.
Следующий шаг - контроль отношений слоя Дороги с взаимосвязанными слоями. Следует помнить, что утилита не делает различий между проверяемым слоем и взаимосвязанными слоями. Все отмеченные слои будут проверяться по всем критериям. Здесь надо быть очень внимательными, что бы не породить кучу фантомных ошибок!
Полилинии слоя Сооружения могут как пересекать полилинии слоя Дороги (водопропускные трубы, пешеходные эстакады) так и частично совпадать с ними на протяжении ряда сегментов (мосты). Гидрографические объекты, пересекая дороги, должны образовывать с ними общие вершины и могут частично совпадать со слоем Сооружения (водопропускные трубы).
Итак, отмечаем три слоя: Дороги, Сооружения и Реки. Выбираем критерий Пересечения Крест и уточняем его параметры. Снимаем отметку с опции В пределах одного слоя (ведь мы ищем пересечения между разными слоями!) и включаем опцию Игнорировать перекрытия (иначе будут отмечены все мосты, совпадающие с дорогами и водопропускные трубы с ручьями). Это всё, никакие другие критерии для этой группы слоёв использовать не нужно. Сохраняем второй тест.
Аналогично проверим правильное примыкание объектов слоя Дороги к Границам населённых пунктов (т.е. образование общей вершины). Отмечаем эти слои и опять выбираем критерий Пересечения Крест. Снимаем отметку с опции В пределах одного слоя и снимаем отметку с опции Игнорировать перекрытия - никаких перекрытий между этими слоями быть не может. Сохраняем третий тест.
Вот собственно и всё. Для слоя Дороги удалось составить четыре теста (включая тест на висящие узлы с неизбежными фантомными ошибками). Осталось только убедиться, что тесты отмечают именно те ошибки, которые мы хотим найти и, не ловят ничего лишнего.
Если какой-либо тест захватывает много фантомных ошибок, а исключить любой из критериев жалко, следует разбить тест как минимум на два. То есть уменьшить число совместно проверяемых слоёв и уточнить применяемые к ним критерии. То, что тестов может быть много, вовсе не страшно. Гораздо неприятнее нахождение тестами даже малого числа фантомных ошибок. Для запуска всех тестов одним нажатием служит кнопка Выполнить всё.
После выполнения теста (или всех тестов по команде Выполнить всё ) открывается окно, содержащее информацию о найденных ошибках. Закрыв окно, вы сразу попадаете в режим редактирования примитивов . Экран автоматически позиционируется на первую из найденных ошибок, а сама пометка выделяется (становится текущим объектом редактора). Если удалить пометку клавишей Del (или командой Удалить) - автоматически выделится объект, породивший ошибку.
Если запуск утилиты не первый, и с прошлого запуска проверки топологии остались пометки ошибок, появляется запрос на их удаление. Пометки ошибок являются векторными объектами специального типа. Они сохраняются в проекте между сеансами работы и должны быть удалены явным образом. Пометки ошибок не экспортируются.
Для перемещения по пометкам используются клавиши F (следующая ошибка) и V (предыдущая ошибка) или команды из дополнительного меню редакторов, и
соответственно.
Утилита Коррекция топологии
Одним из кардинальных отличий компьютера от человека является то, что первый не понимает слова "почти". Материал, кажущийся оператору идеальным, может иметь массу ошибок - "распадающиеся узлы", недоведённые линии, отсутствующие общие вершины. Компьютер не знает понятий "почти рядом"- точное совпадение координат вершин является обязательным условием при создании топологической модели.
Если при настройке топологических правил взаимосвязанным слоям задать условие "игнорировать друг друга" векторная модель просто "рассыплется". Впрочем, в пакете Easy Trace такие ситуации маловероятны. Гораздо чаще они могут возникнуть при использовании пакета для редактирования векторных данных, созданных "чужой" программой.
Ещё недавно одна из версий ArcView при просмотре полигонов "любила" их захватывать, а потом "забывала класть на место". В общем-то мелочь, незаметная глазу. Вот только полигональное покрытие быстро распадалось на тысячи несвязанных вершин. Ещё одна распространённая ситуация, требующая использование автоматической коррекции - это "доведение" материала после автоматической векторизации.
Сократить объем работ по коррекции таких материалов в разы (а то и в десятки раз!) призвана утилита Коррекция ошибок топологии. Её назначение - это "стягивание" узлов и общих вершин, попавших в зону заданного допуска. Кроме того, она может формировать общие вершины для "недотянутых" концов линий.
Принцип работы утилиты схож с проверкой топологии. Тот же набор слоёв, выбор условий и опций и возможность сохранения cозданного набора условий под некоторым именем. Но есть и кардинальные отличия. Все слои равны, но некоторые "равнее" других: слой может быть не просто выбран, а выбран для изменения (отмечен символом ) или выбран как опорный (отмечен символом
).
Со слоем, выбранным для изменений всё ясно - именно на этом слое (слоях) вершины могут быть перемещены или добавлены.
Опорный слой - это слой, существующие вершины которого не будут перемещаться, но будут учитываться при коррекции. То есть к ним могут быть притянуты вершины редактируемых слоёв. Не следует путать опорный слой с "замороженным". На опорном слое могут создаваться пропущенные вершины! Опорные слои рассматриваются в первую очередь. Они тот "магнит", который притягивает "заблудшие" вершины редактируемых слоёв.
Пример. Недотянутая до рамки (опорного слоя!) изолиния будет доведена до пересечения с рамкой и образует в этом месте общую вершину. При этом, отклонение рамки от прямой в месте пристыковки, конечно, произойдет (из-за конечной точности), но составит тысячные доли пикселя растра.
Опции
Прежде всего следует задать Дистанцию коррекции. Ясно, что стягивать соседние вершины, начиная с некого расстояния бессмысленно и даже опасно. Выбор дистанции выполняется в пикселях растра. Это позволяет соотнести дистанцию коррекции с толщиной растровых линий и величиной возможных ошибок векторизации. Если растра нет (редактируется чужой материал) дистанцию коррекции можно оценить с помощью инструмента Линейка.
Опция Только совмещать вершины запрещает создания новых вершин на ребрах полилиний любых слоёв - если она включена, то возможно только взаимное стягивание существующих вершин.
Опция Рассматривать только концы полилиний служит для подтягивания концов недоведённых полилиний. При её использовании, желательно отметить слои, к которым будет происходить подтягивание, как опорные. Опция сильно сокращает время выполнения коррекции.
Группа кнопок Рассматривать взаимодействие объектов позволяют выделить три варианта возможного взаимодействия слоёв:
- только в пределах слоя - каждый слой рассматривается независимо от других слоёв;
- только с разных слоёв - взаимоотношения объектов внутри одного слоя не рассматриваются;
- любых слоёв - любая пара объектов рассматривается независимо от принадлежности к слою;
Совмещение вершин нескольких полилиний | Создание вершины в месте пересечения или "недовода" двух и более полилиний |
Если в процессе работы у какой-либо полилинии число вершин превысит 8190, то линия не изменяются и дублируется на слой _CORRECTIONS_. По окончанию работы утилиты выдается соответствующее сообщение.
Утилита Оптимизация Топологии
Нередко пакет Easy Trace используется для коррекции материалов, уже находящихся в той или иной ГИС. Причины для этого могут быть самые разнообразные. Одна из них кроется в самой природе ручной оцифровки (а иногда просто нет другого выхода). Оператору проще поставить точку не целясь, а затем добавить ещё пару вершин, исправляя форму линии, чем точно определить положение точек перегиба ...
Как следствие, многократно завышается число вершин, необходимых для достоверной передачи формы линии. Материал перегружается лишними, бессмысленными данными, ухудшающими его качество; конечная ГИС становится раздражающе медлительной...
В случае собранного полигонального покрытия задача "облегчения" векторного материала становится нетривиальной. Любая вершина любой полилинии может быть общей. Удаление или перемещение такой вершины должно сопровождаться изменениями во всех связанных с ней объектах. Не менее сложно определить, какие именно вершины могут быть скорректированы, а какие действительно нужны для воспроизведения формы объекта...
Именно для решения этих задач и предназначена утилита Оптимизация топологической структуры. Она позволяет удалить лишние вершины полилиний заданных слоев, полностью сохраняя топологическую связность полигональных, линейных и точечных объектов.
Внимание! Если вы считаете, что оптимизация может испортить некоторые слои, которые тем не менее должны оставаться топологически связанными с другими слоями, просто "заморозьте" их.
Если же результаты оптимизации оказались неудовлетворительными - просто выполните UNDO и уточните задаваемые параметры...
Пример применения утилиты
Утилита Поиск изломов
Весьма специфической, но от этого не менее неприятной ошибкой является искажение формы полилинии в виде молниеобразных изломов. Такие искажения могут возникать при автоматической и полуавтоматической векторизации растров с сильной эрозией линий. Особенно в том случае, если используется трассировщик ломаных линий с малым значение параметра Точность аппроксимации.
![]() |
Излом полилинии - пометка, устанавливаемая утилитой в месте обнаружения излома |
Появления таких ошибок возможно и в случае автоматической векторизация цветных тематических слоёв топографических карт. В любом случае, для уменьшения вероятности их появления, перед векторизацией рекомендуется выполнить фильтрацию растра.
Поиск изломов основан на сочетании совпадения условия малой длины смежных сегментов полилинии с небольшим углом между ними.
Утилита Удаление пометок
Бывает, выполнение какого-либо теста всё же приводит к появлению большого числа фантомных ошибок. Наличие пометок таких ложных ошибок сильно затрудняет процесс проверки векторных данных. Оптимальный выход из такой ситуации, это доработка или разделение теста на два независимых - не порождающих пометку фантомных ошибок.
Однако, сама структура векторных данных может провоцировать появление таких ошибок. В этом случае, с помощью утилиты Удаление пометок ошибок, можно попытаться отсеять фантомные ошибки. Как правило, это удаётся, так как тесты топологии обычно состоят из нескольких слоёв и применяемых критериев проверки. Утилита, в свою очередь, позволяет выбрать один слой и конкретную пометку ошибки.
Утилита работает со всеми типами пометок, генерируемых операциями проверки, коррекции и сшивки векторных данных.
Утилита Сборка полигонов
Значительная доля векторной информации любого проекта, содержащего полигональное покрытие, продублирована. Прежде всего, это общие границы полигонов. Но границы возникают не сами по себе. Их появление зачастую обусловлено наличием некоторого линейного объекта разделившего полигоны. Это может быть линия дороги, забор, река или просто линия смены типа растительности или покрытия.
Если линия забора или реки имеет под собой реальный физический объект, то линии смены типа покрытия всего лишь намёк на границу смежных полигонов. Тем не менее, такие линии отражены на исходном материале и зачастую требуется их воспроизведение. Особенно при выводе материалов на печать.
Поскольку задать отображение только части контура полигона особым типом линии, мягко говоря, проблематично - такие линии специально наносятся на так называемый Косметический слой. То есть линии смены типа покрытия могут быть вполне равноправными векторными линиями.
Ну, а теперь самое интересное. Собрать полигоны по существующим линиям гораздо проще, чем выделить такие линии из существующих полигонов! Более того, если аккуратно отвекторизовать линии, разграничивающие полигоны, само покрытие можно собрать автоматически. Для этого может быть использована утилита Сборка полигонов.
При векторизации обязательно должен соблюдаться определённый порядок ввода объектов. Например, невозможно привязать линейную реку к отсутствующему полигону озера. Так что, если предполагается автоматическая сборка значительной части полигонального покрытия, то оно будет создаваться на основе смеси из полигонов и линейных объектов. К сожалению, новые полигоны будут созданы и поверх существующих. Впрочем, разыскать их можно автоматически утилитой Проверка полигонального покрытия. Удаление лишних полигонов и слияние смежных - операции тривиальные. Так, что доводка покрытия не займёт много времени...
Утилита Проверка полигонального покрытия
После сборки полигонального покрытия неизбежно возникает некоторое количество ошибок. Причины их возникновения могут быть самые разные, но самих ошибок существует только три вида. Это щели, перекрытия и "схлопнувшиеся" участки полигонов. Смысл двух первых видов ошибок понятен из их названия. Ошибки третьего вида выглядят как торчащие из полигонов "усы" . Как правило они возникают при ручном редактировании полигонального покрытия в момент перераспределения площадей между соседними полигонами.
Щели | Перекрытия | Другие ("усы") |
![]() |
![]() |
![]() |
Щели и перекрытия, напротив, могут возникнуть при ручном создании полигонов, если отключена опция Автозамыкание. Обычно это связано с неточным копированием границ соседних полигонов. Поэтому лучше копирование границ предоставить трассировщику. Если он отказывается замкнуть полигон (а такое иногда бывает) попробуйте сделать это по частям, указывая промежуточные замыкающие линии. Операция сбора полигона из частей тривиальна - укажите первую из них редактором
выберите команду
и укажите остальные. Возможно, потребуется удалить несколько лишних общих вершин на смежных границах. Делать это следует исключительно топологическим редактором
. Применение редактора примитивов
при создании покрытия - источник ошибок!
Как и другие утилиты проверки, эта утилита создаёт пометки ошибок. Однако это не специальные пометки, а обычные полигоны на слоё _ERRORS_. Их границы совпадают с границами щелей, перекрытий и "усов", найденных в полигональном покрытии.
Перемещение по пометкам выполняется клавишами F (следующая ошибка) и V (предыдущая ошибка) или командами из дополнительного меню редакторов и
соответственно. Удаление выделенных полигонов-пометок выполняется клавишей DEL.
Покрытие вовсе не обязательно должно быть собрано по всей площади проекта. Проверять можно и отдельные участки полигонального покрытия. Кроме того, утилита весьма ресурсоёмка. Время её работы квадратично растёт с увеличением числа полигонов. Поэтому, в случае сбора больших покрытий, настоятельно рекомендуется проверять и править отдельные проекты до их "сшивки".
Возможно, число полигонов в проектах и мощность вашего компьютера позволят выполнять проверку блоков из нескольких проектов за разумное время. Проверка полностью собранного покрытия может занять десятки часов!
Поскольку проверка покрытия требует просмотра всех рёбер всех полигонов, её можно сократить, выполнив Оптимизацию топологии.