Универсальный скрипт контроля карт (поиска ошибок)
В Digitals уже довольно давно существует система контроля карт (Карта|Контроль…), выполняющая проверку карты для поиска ошибок геометрии и параметров.
Проверка выполняется при помощи настраиваемых сценариев (файлы *.mcs в папке \Digitals\Control), в которых описываются топологические отношения между объектами разных слоев. Поскольку создание полноценного сценария контроля для топографической карты, это довольно сложная задача, то контроль карт используют немногие. Хотелось бы сделать систему контроля доступной для большинства пользователей.
Представляем вашему вниманию универсальный вариант сценария контроля, который проверяет наиболее типовые ошибки и мало зависим от применяемого классификатора. Сценарий решает задачу проверки топологической целостности файлов In4, XML, а также топоосновы для ГИС. Например, находит наиболее частую проблему, возникающую при сохранении в ArcGis Shape - точечные объекты в линейных слоях или незамкнутые полигоны в площадных. Также ошибкой считается примыкание к линии без узловой точки.
Также желательно удалить из папки \Digitals\Control все остальные файлы *.mcs
если только вы не создавали собственных сценариев контроля
[/size]
Желательно также обновить программу Ged.exe.
Приветствуются предложения и пожелания тех, кто имеет опыт создания сценариев контроля.
Прошу пробачення за нав’язливість, але чому б не використати функцію [Overlay] Перекриття (Рис3) - взятий з демофайла Control.dmf. Тобто в Control.dmf приклад є, а самої функції - немає.
[Intersect] Ошибки пересечения объектов ловить тільки перетин (рис1). [Overlay] Перекриття - функція мала б ловити помилки часткового перекриття (рис2).
Питання раніше вже піднімалось Сценарії контроля якості карти
Поддержую! + хотелось бы проверку на повтор слоя
Например: случайно в одном обьекте скопированы две In4 Ділянка, что влечет за собой неправильный подсчет общей площади! .bmp (2.13 MB)
Скажіть, можливо за допоногою дігітала знайти ділянки які перетинаються між собою, і задать параметр “допустимо максимальна площа перетину між ділянками 1 м.кв.”
Вже можна виловлювати помилки часткового перекриття полігонів без функції сценарія контроля [Overlay]
Доступна скриптова функція @Map.Object[N].OverlayList [Layer] - Функция возвращает список номеров объектов-полигонов (полилинии, точки игнорируются) карты, пересечение с которыми текущего объекта имеет ненулевую площадь… . Є внутрішнє ім’я команди кнопки spbIntersect те-ж [ Операції з об’єктами.Перетин ]. Реально перебрати об’єкти-полігони в циклі скрипта, застосувавши для кожного @Map.Object[N].OverlayList [Layer], далі в циклі перебрати об’єкти що мають перекриття зі створенням проміжного полігону (spbIntersect), оцінки площі проміжного полігону, відміною створення полігону. Залежно від площі проміжного полігону - записуєм в окремий текстовий блок номера об’єктів з перекриттям. Все це в одному скрипті.
Майже готовий скрипт. Але: скрипт має зупинятись, позначивши два об’єкти з накладанням - для виправлення, чи скрипт має дати звіт з номерами об’єктів що накладаються
Прохання до розробників, допомогти у вирішенні наступних питань.
Не можу підібрати функцію сценарію контролю, що повертала-б помилку при частковому накладанні лінійного об’єкта на межу полігона (треба виловити лінійні об’єкти, дві або більше точки підряд якого, співпадають з двома або більше точками підряд полігонального об’єкта).
Якби функція [Share 2] (выдаст ошибку только в случае двух или более совпадающих точек) контролювала співпадання двох і більше точок підряд, а не двох і більше точок загалом по об’єкту
Не вистачає можливості контролювати наявність не примикання об’єктів. Наприклад, той самий струмок, одна з кінцевих точок якого має співпадати з будь-якою точкою іншого об’єкта (струмок, річка, озеро і т.д.). Але ж друга кінцева точка (фактичний початок струмка) може й не примикати до будь-яких інших об’єктів.
Якби мати функцію, подібну [Not Join], яку можна було-б роз’яснити так: помилка виникає тоді, коли жодна з кінцевих точок об’єкта не співпадає з будь-якою точкою іншого об’єкта.
Я дочитувався до кожного слова роз’язнення функцій у файлі Control.doc, але за три дні розбору смислу роз’яснень, так і не знайшов для себе відповіді як вирішити поставлені задачі. Погано, коли немає однозначності у забезпеченні контролю, але до однозначності треба прагнути шляхом розробки функцій, яких не вистачає для контролю.
Може краще писати скрипт такого контролю? Але тоді не вистачає скриптової функції@Map.Object[L].Point[Ln].NodePoints, яка б повертала список: номер об’єкта A точка якого An співпадає з точкою Ln об’єкта L, і номер точки An об’єкта A.
Вирізати точки з шарів і перевірити на парність точок. Де кількість точок буде не парна - там і помилка.
Тільки треба заданий шар почерзі перевіряти з шарами 2,3,…,n