На рисунке представлено пересечение двух полигонов застройки. Как видно из рисунков, рассмотреть ошибку можно только при большом увеличении, обнаружить подобный случай довольно сложно, даже приблизив карту на максимум.
То же самое можно сказать и об атрибутивной информации каждого объекта – проверить правильность заполнения нужных параметров каждого достаточно трудоемкий процесс. Особенно, если учесть тот факт, что в большинстве случаев, на карте число объектов превышает сотню, а то и тысячу штук!
Например, проверить корректное заполнение всех нужных параметров для всех зданий на карте довольно долгий процесс, чтобы делать его вручную. Да и сам факт ручной проверки подразумевает влияние человеческого фактора, что обязательно приведет к ошибкам в ошибках и усложнит процесс сбора и редактирования.
Конечно, можно задать поиск незаполненных параметров через команды, присваиваемые редактируемым кнопкам на авторской панели инструментов. Но это тоже занимает довольно много времени.
Поэтому возникает необходимость поиска решения данной задачи программными средствами Digitals. Обновленная версия модуля «Карта/контроль» позволяет решать эту проблему достаточно просто и эффективно. В основе проверки лежит скрипт, содержащий запросы с условиями, выполнение которых классифицируется как ошибка. Результаты записываются в log-файл.
Данная обновленная версия модуля «карта/контроль» работает для версии Ged.exe 10 марта 2009 г и позже.
2. Написать сценарий проверки и сохранить его с расширением *.mcs в созданной папке.
Редактировать скрипт можно как в любом текстовом редакторе, так и в самом модуле проверки.
3. В окне «Настройки» на главной странице прописать константу ControlScript=
В случае, если в папке Control хранятся несколько файлов сценариев, то данной конcтанте присвоить название нужного скрипта.
4. Запустить «Карта/контроль» и подождать некоторое время, которое понадобится для выполнения всех проверок.
На пункте 2 остановимся подробнее.
Сценарий проверки состоит из набора условий, выполнение которых определяется как ошибка. Условия описываются следующими математическими операциями сравнения и равенства:
; = - Равно
; > - Больше
; < - Меньше
; / - Кратно
; \ - Не кратно
; <> - Не равно
; >= - Больше или равно
; <= - Меньше или равно
Для условия можно использовать следующие обозначения:
; F - Рамка (Frame)
; P - Любой точечный объект (Point)
; L - Любой линейный объект (Line)
; A - Любой пощадной объект (Area)
; O - Любой прочий объект: таблицы, изображения... (Other)
; S - Этот же объект (Self)
; N - Объект того же слоя
; * - все объекты на карте.
Кроме того, проверка может выполняться над каждым слоем в отдельности, если используются объекты разных слоев, то нужные слои указываются в условии через запятую. Обращение к объектам происходит по ID слоя.
Тело запроса выглядит следующим образом:
[Топологическое отношение]
Проверяемый объект: объект, с которым производится проверка; описание найденного несоответствия
В случае, для проверки параметров объектов условие соответствия выбранным значениям параметров пишется после блока описания проверяемых объектов. Т.е. запрос будет таким:
[Parameters]
Проверяемый объект: номер параметра условие; описание полученного несоответствия
Если для задания условия часто используется определенная группа слоев, то этой группе слоев можно присвоить переменную и в дальнейшем обращаться именно к ней.
Например, группа «дороги» может содержать несколько слоев – «проезжая часть с покрытием», «проезжая часть без покрытия», «тротуары без покрытия», «тротуары с покрытием» и т.д:
$дороги=61342000, 61341000, 61344000, 61343000
где 61342000, 61341000, 61344000, 61343000 – ID слоев.
Тогда вместо ID слоев в теле запроса запишем обозначающую их переменную. Например, запрос на выборку всех объектов, принадлежащим к «дорожным слоям» и которые примыкают к объектам класса «здание» без узловой точки будет выглядеть следующим образом:
[join]
$дороги: здания; объекты слоя %L1 не примыкают к объектам слоя «здания»
где %L1 - название проверяемого слоя; %L2 – название слоя, с которым производится проверка.
К ошибке приводит пересечение объектов, принадлежащих указанным в условии слоям. Пересекаться могут как линейные, так и полигональные объекты. Также можно найти пересечение объектов, принадлежащих одному слою. (Последнее замечание относится ко всем проверяемым условиям).
Например, на рисунке показано пересечение здания (белым, ID слоя - 44200000) с границей бортового камня (черным цветом, ID слоя – 613500000). Чтобы обнаружить такую ситуацию, нужно написать следующий запрос:
[intersect] ошибка пересечения
44200000: 613500000; объект %L1 пересекается с объектом %L2
В результате выполнения данного запроса будут выявлены все подобные ошибки.
Кроме ошибок геометрии можно проверять расположение подписей на карте и значения параметров объектов.
Например, если в условии проверки написать следующее:
[Parameters]
L:-8<2;
то в результате данного запроса будет выведены ошибки по тем линейным объектом, которые состоят из 1 точки, т.е. число точек в каждом объекте меньше двух.
Такую же проверку можно сделать и для поиска ошибочных линейных объектов в полигональных слоях. Например, здания, ясно, что данный слой будет содержать только полигоны.
[Parameters]
44200000:-8<3; объект %L1 имеет менее 3 точек
Для случая, когда главным является корректное заполнение параметра определенной информацией, данное условие может принять следующий вид
[Parameters]
44200000: 100=; добавить количество этажей для данного здания
где 100 – это номер параметра, содержащего количество этажей, а 44200000 – ID слоя «здания». Таким образом, в результате проверки будут найдены те здания, у которых не заполнен этот параметр.
Также можно отсеять объекты, площадь которых меньше заданной. Условие будет выглядеть следующим образом
[Parameters]
A: 0<10; площадь объекта %L1 меньше 10 кв.м
Данная проверка покажет все площадные объекты, площадь которых 10 кв м в масштабе карты.