Функція @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
перебирати в циклі кожну точку кожної межі ділянки, при чому для кожної точки:
задавати пошук рядка в текстовому блоці (@Text[N].IndexOf FindStr), який містить координати всіх точок всіх об’єктів суміжників; або
знаходити тимчасовий точковий об’єкт (@Map.Object[N].Node PointNumber [Layer]).
Треба пробувати, що працюватиме швидше. Ділянок може бути зо 200-300. Точок ділянок 2-4 тис.
Хотілось, правда, щоб була функція подібна
[Not Share] - Ошибки отсутствия общей границы
“Ошибка возникает в том случае, если объект не имеет совпадающих точек ни с одним объектом из заданного слоя (слоев)”, яка звучала б як “Ошибка возникает в том случае, если объект имеет точки несовпадающие ни с одним объектом из заданного слоя (слоев)”.
[Gap] Ошибки зазора между полигонами
A,70008:N ; Зазор между полигонами %L1 и %L2 (площадь %V кв.м.)
В функции Gap через пробел можно задать максимальную площадь зазора в кв.м, который считается ошибкой, а в Overlay - минимальную площадь перекрытия, например [Overlay 0.01].
Відтепер легко знайти в карті перекриття полігонів вказаних шарів, а застосувавши функцію [Overlay] без вказування мінімальної площі - знайти усі перекриття . Однак, щоб знайти всі зазори між полігонами вказаних шарів, виявляється мало застосувати функцію [Gap], обов’язково вказавши максимальну площу, менше якої зазор буде вважатись помилкою
Нижче наведені випадки, коли Gap знаходить:
“зазор” між двома позначеними полігональними об’єктами, які мають декілька фрагментів спільної межі по лінії (мал.1), хоча є полігон 13 (жовтим кольором);
“зазор” у межах внутрішнього полігона складного (комплексного) полігонального об’єкта (мал.2), хоча є полігон 13 (жовтим кольором);
“зазор” між двома позначеними полігональними об’єктами, які мають спільну межу лише в одній-єдиній точці.[attachment=0]Gap.PNG[/attachment]Отже, щоб знайти всі зазори між полігональними об’єктами карти треба:
запустити функцію [Gap] сценарію контроля;
створити точкові об’єкти за координатами з текстового лог-файла;
запустити функцію [Not Inside] іншого сценарію контроля, яка запише в лог-файл координати точкових об’єктів, що не знаходяться всередині контура полігональних об’єктів;
В мене питання до розробників: чи не можна в алгоритм роботи функції [Gap] включити таку перевірку (Not Inside) Тоді Gap буде знаходити справжні зазори.
Скиньте нам 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номер объекта?