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

Функція @Map.Object[N].Node PointNumber [Layer] повертає номер об’єкта-пікета, на якому розташована точка PointNumber об’єкта N. Необов’язковий параметр Layer задає шар пікетів для пошуку, якщо не задан, то функція шукає в усіх шарах, тип яких пікет або одиночний символ.

На прикладі Ін4-шарів
ID20000 - ділянка
ID50000 - суміжник
ID51000 - тимчасові пікети

$AM=@ActivateMap @if $AM=0 then @Break @Text[1].Clear @Map.DeselectAll @Map.Layers.Add 51000 4 Тестові пікети @Map.Parameters.Add 51001 5 Назва пікета @Map.Layers.SetValidParameters ID51000 ID51001 @Map.SelectLayer ID50000 @Map.AddNodes ID51000 1 @Map.DeselectAll @Map.SelectLayer ID20000 $SC=@Map.SelCount $MC=@Map.Count $I=0 %LoopObject $I=$I+1 $Sel=@Map.Object[$I].Selected @if $Sel=0 then @Goto %NextObject $PC=@Map.Object[$I].Count $J=0 %LoopPoint $J=$J+1 $XYZ=@Map.Object[$I].Point[$J] $XYZS=%Library.ReplaceComma $XYZ $XYZS=@DequoteText $XYZS @if $XYZS=-2684354.56 -2684354.56 0 then @Goto %NextPoint $NodeObj=@Map.Object[$I].Node $J ID51000 @if $NodeObj<>0 then @Goto %NextPoint @Text[1].Add Об'єкт $I: точка $J не суміщена з суміжником %NextPoint @if $J<$PC then @Goto %LoopPoint %NextObject @if $I<$MC then @Goto %LoopObject $TC=@Text[1].Count ;@if $TC=0 then @Break $S=@Text[1].Text @Dialog.Message $S

Дякую.

Два вирішення:

  • перебирати в циклі кожну точку кожної межі ділянки, при чому для кожної точки:
  1. задавати пошук рядка в текстовому блоці (@Text[N].IndexOf FindStr), який містить координати всіх точок всіх об’єктів суміжників; або
  2. знаходити тимчасовий точковий об’єкт (@Map.Object[N].Node PointNumber [Layer]).
    Треба пробувати, що працюватиме швидше. Ділянок може бути зо 200-300. Точок ділянок 2-4 тис.

Хотілось, правда, щоб була функція подібна
[Not Share] - Ошибки отсутствия общей границы
“Ошибка возникает в том случае, если объект не имеет совпадающих точек ни с одним объектом из заданного слоя (слоев)”, яка звучала б як “Ошибка возникает в том случае, если объект имеет точки несовпадающие ни с одним объектом из заданного слоя (слоев)”.

Доброго дня.

Пробував застосовувати функції сценарію контролю, розроблені 22.10.18:

[Overlay] Ошибки наложения полигонов
A,70008:N ; Наложение полигонов %L1 и %L2 (площадь %V кв.м.)

[Gap] Ошибки зазора между полигонами
A,70008:N ; Зазор между полигонами %L1 и %L2 (площадь %V кв.м.)

В функции Gap через пробел можно задать максимальную площадь зазора в кв.м, который считается ошибкой, а в Overlay - минимальную площадь перекрытия, например [Overlay 0.01].

Відтепер легко знайти в карті перекриття полігонів вказаних шарів, а застосувавши функцію [Overlay] без вказування мінімальної площі - знайти усі перекриття :smiley: . Однак, щоб знайти всі зазори між полігонами вказаних шарів, виявляється мало застосувати функцію [Gap], обов’язково вказавши максимальну площу, менше якої зазор буде вважатись помилкою :frowning:

Нижче наведені випадки, коли Gap знаходить:

  • “зазор” між двома позначеними полігональними об’єктами, які мають декілька фрагментів спільної межі по лінії (мал.1), хоча є полігон 13 (жовтим кольором);
  • “зазор” у межах внутрішнього полігона складного (комплексного) полігонального об’єкта (мал.2), хоча є полігон 13 (жовтим кольором);
  • “зазор” між двома позначеними полігональними об’єктами, які мають спільну межу лише в одній-єдиній точці.[attachment=0]Gap.PNG[/attachment]Отже, щоб знайти всі зазори між полігональними об’єктами карти треба:
  1. запустити функцію [Gap] сценарію контроля;
  2. створити точкові об’єкти за координатами з текстового лог-файла;
  3. запустити функцію [Not Inside] іншого сценарію контроля, яка запише в лог-файл координати точкових об’єктів, що не знаходяться всередині контура полігональних об’єктів;
  4. видалити точкові об’єкти.
    В текстовому лог-файлі отримаємо координати центроїдів справжніх зазорів.

В мене питання до розробників: чи не можна в алгоритм роботи функції [Gap] включити таку перевірку (Not Inside) :question: Тоді Gap буде знаходити справжні зазори.

Скиньте нам dmf з проблемними полігонами на help@vingeo.com

[quote=“Sergey Oleynik”]

Скиньте нам dmf з проблемними полігонами на help@vingeo.com. Тут, мабуть так: якщо для карт землевпорядкування справжній алгоритм принциповий - то нехай так. Просто у лісових картах правила: полігон лісництва повністю заповнений полігонами кварталів, полігони кварталів - полігонами виділів; будь-яка поворотна точка полігона виділу має лежати на поворотній точці іншого полігона виділу або на поворотній точці полігона лісництва.

Доброго дня, шановні Розробники.

Можна питання?
В збиранні Digitals за 12.02.19 сценарій контролю записує в log-файл рядок:
12 17:7 458 5554087,89 3268896,72 Накладка полігонів

В збиранні Digitals за 14.03.19 той самий сценарій контролю записує в log-файл рядок:
12:0A06ED40 17:7 458:0DD21120 5554087,89 3268896,72 Накладка полігонів

Скрипт запускає сценарій контролю @RunControlScript Filename [/HIDE] і вичитує по рядкам номери об’єктів з log-файла.
Розумію, що 0A06ED4 в десятковому вигляді 10514132, ця інформація може бути корисною?
Тепер парсити рядок log-файла треба ще по символу “:”?

Наперед дякую за відповідь.

Ці дані потрібні для форми логу, але в файлі вони дійсно зайві.

Прибрали.

Возможно ли в сценарии проводить поиск ошибок параметров.
Например необходимо найти объекты в которых не заполнены определенные параметры (т.е. пустые поля) из списка или справочника. Имеется виду параметр “Стан”, который в соответствии с классификатором имеет 17 определенных значений. Возможен ли поиск ошибок если у объекта значение этого параметра не заполнено или отличается от предусмотренного списком/справочником.
Второй вопрос при формировании лог-файла с ошибками, если возможность чтобы в строке с ошибкой указывался IDномер объекта?

Во вложении архив со скриптом контроля, списком значений и примером.