Универсальный скрипт контроля карт (поиска ошибок)

Универсальный скрипт контроля карт (поиска ошибок)

В Digitals уже довольно давно существует система контроля карт (Карта|Контроль…), выполняющая проверку карты для поиска ошибок геометрии и параметров.

Проверка выполняется при помощи настраиваемых сценариев (файлы *.mcs в папке \Digitals\Control), в которых описываются топологические отношения между объектами разных слоев. Поскольку создание полноценного сценария контроля для топографической карты, это довольно сложная задача, то контроль карт используют немногие. Хотелось бы сделать систему контроля доступной для большинства пользователей.

Представляем вашему вниманию универсальный вариант сценария контроля, который проверяет наиболее типовые ошибки и мало зависим от применяемого классификатора. Сценарий решает задачу проверки топологической целостности файлов In4, XML, а также топоосновы для ГИС. Например, находит наиболее частую проблему, возникающую при сохранении в ArcGis Shape - точечные объекты в линейных слоях или незамкнутые полигоны в площадных. Также ошибкой считается примыкание к линии без узловой точки.

Загрузить универсальный скрипт контроля карт >>>
[size=85]Правая кнопка мыши, а затем Сохранить объект как в папку \Digitals\Control

Также желательно удалить из папки \Digitals\Control все остальные файлы *.mcs
если только вы не создавали собственных сценариев контроля
[/size]
Желательно также обновить программу Ged.exe.

Приветствуются предложения и пожелания тех, кто имеет опыт создания сценариев контроля.

Прошу пробачення за нав’язливість, але чому б не використати функцію [Overlay] Перекриття (Рис3) - взятий з демофайла Control.dmf. Тобто в Control.dmf приклад є, а самої функції - немає.

[Intersect] Ошибки пересечения объектов ловить тільки перетин (рис1).
[Overlay] Перекриття - функція мала б ловити помилки часткового перекриття (рис2).
Питання раніше вже піднімалось Сценарії контроля якості карти

1 Вподобання

Після перевірки програма показує, що об’єкт має довжину лінії менше 5 см. Але я перевірив - насправді немає такої довжини.

В файлі Control.mcs є такий запис:

Прикріпляю файл з об’єктом:
5 sm.dmf (19.5 KB)

В цьому файлі дійсно немає лінії меньше 5см, але й помилку таку не показує. Може це вже виправленний файл.

Завантажив свій же файл - і в мене показує цю помилку.

Скорее всего, проблема в вашем старом Ged.exe. Первые версии контроля не умели работать с параметрами-массивами, такими как Длины линий.

Дякую.
Зараз у мене дійсно стара версія - від 16.01.2011.

Поддержую! + хотелось бы проверку на повтор слоя :bulb:
Например: случайно в одном обьекте скопированы две In4 Ділянка, что влечет за собой неправильный подсчет общей площади!

.bmp (2.13 MB)

Карта>Проверка>Одинаковые

Ой)) спс!!! Лучше бы перенесли в Правка - Пометить… почему то не сообразил посмотреть в Карте* :frowning:

Скажіть, можливо за допоногою дігітала знайти ділянки які перетинаються між собою, і задать параметр “допустимо максимальна площа перетину між ділянками 1 м.кв.”

Вже можна виловлювати помилки часткового перекриття полігонів без функції сценарія контроля [Overlay]

Доступна скриптова функція @Map.Object[N].OverlayList [Layer] - Функция возвращает список номеров объектов-полигонов (полилинии, точки игнорируются) карты, пересечение с которыми текущего объекта имеет ненулевую площадь… . Є внутрішнє ім’я команди кнопки spbIntersect те-ж [ Операції з об’єктами.Перетин ]. Реально перебрати об’єкти-полігони в циклі скрипта, застосувавши для кожного @Map.Object[N].OverlayList [Layer], далі в циклі перебрати об’єкти що мають перекриття зі створенням проміжного полігону (spbIntersect), оцінки площі проміжного полігону, відміною створення полігону. Залежно від площі проміжного полігону - записуєм в окремий текстовий блок номера об’єктів з перекриттям. Все це в одному скрипті.

:open_mouth:

Поясніть будь ласка “на пальцях” якщо це можливо, що за чим треба зробить, вмене є певна база населеного пунтку в форматі ін4, мені потрібно

Майже готовий скрипт. Але: скрипт має зупинятись, позначивши два об’єкти з накладанням - для виправлення, чи скрипт має дати звіт з номерами об’єктів що накладаються :question:

Скрипт наявності накладок полігонів

Дякую!

Очень полезный скрипт. Спасибо большое за проделанную работу.

Прохання до розробників, допомогти у вирішенні наступних питань.

  1. Не можу підібрати функцію сценарію контролю, що повертала-б помилку при частковому накладанні лінійного об’єкта на межу полігона (треба виловити лінійні об’єкти, дві або більше точки підряд якого, співпадають з двома або більше точками підряд полігонального об’єкта).
    Якби функція [Share 2] (выдаст ошибку только в случае двух или более совпадающих точек) контролювала співпадання двох і більше точок підряд, а не двох і більше точок загалом по об’єкту :question:

  2. Не вистачає можливості контролювати наявність не примикання об’єктів. Наприклад, той самий струмок, одна з кінцевих точок якого має співпадати з будь-якою точкою іншого об’єкта (струмок, річка, озеро і т.д.). Але ж друга кінцева точка (фактичний початок струмка) може й не примикати до будь-яких інших об’єктів.
    Якби мати функцію, подібну [Not Join], яку можна було-б роз’яснити так: помилка виникає тоді, коли жодна з кінцевих точок об’єкта не співпадає з будь-якою точкою іншого об’єкта.

Я дочитувався до кожного слова роз’язнення функцій у файлі Control.doc, але за три дні розбору смислу роз’яснень, так і не знайшов для себе відповіді як вирішити поставлені задачі. Погано, коли немає однозначності у забезпеченні контролю, але до однозначності треба прагнути шляхом розробки функцій, яких не вистачає для контролю.

Може краще писати скрипт такого контролю? Але тоді не вистачає скриптової функції @Map.Object[L].Point[Ln].NodePoints, яка б повертала список: номер об’єкта A точка якого An співпадає з точкою Ln об’єкта L, і номер точки An об’єкта A.

Підкажіть будь-ласка. Чи можливо у сценарії контролю виловити точки полігонів у шарі-1, які не лежать у вузлі з точкою шарів-2,3,…,n?

Простіше так: знайти точки межі ділянки, в яких немає точки суміжника.

Можна зробити так:

Вирізати точки з шарів і перевірити на парність точок. Де кількість точок буде не парна - там і помилка.
Тільки треба заданий шар почерзі перевіряти з шарами 2,3,…,n