Аналитика
http://www.geosystema.net/forum/

Универсальный скрипт контроля карт (поиска ошибок)
http://www.geosystema.net/forum/viewtopic.php?f=1&t=2352
Страница 2 из 2

Автор:  kol_s [ 16 мар 2013 19:55 ]
Заголовок сообщения:  Re: Универсальный скрипт контроля карт (поиска ошибок)

Дякую!

Автор:  paul [ 18 мар 2013 09:18 ]
Заголовок сообщения:  Re: Универсальный скрипт контроля карт (поиска ошибок)

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

Автор:  voha [ 26 сен 2013 20:53 ]
Заголовок сообщения:  Re: Универсальный скрипт контроля карт (поиска ошибок)

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

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

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

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

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

Автор:  voha [ 10 май 2016 07:36 ]
Заголовок сообщения:  Re: Универсальный скрипт контроля карт (поиска ошибок)

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

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

Автор:  13vp [ 10 май 2016 13:34 ]
Заголовок сообщения:  Re: Универсальный скрипт контроля карт (поиска ошибок)

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

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


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

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

Автор:  Dmitry_Zolotar [ 10 май 2016 14:05 ]
Заголовок сообщения:  Re: Универсальный скрипт контроля карт (поиска ошибок)

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

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

Функція @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

Автор:  voha [ 10 май 2016 15:47 ]
Заголовок сообщения:  Re: Универсальный скрипт контроля карт (поиска ошибок)

Dmitry_Zolotar писал(а):
...Функція @Map.Object[N].Node PointNumber [Layer] повертає номер об'єкта-пікета, на якому розташована точка PointNumber об'єкта N...
13vp писал(а):
...Вирізати точки з шарів і перевірити на парність точок. Де кількість точок буде не парна - там і помилка.
Тільки треба заданий шар почерзі перевіряти з шарами 2,3,...,n
Дякую.

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

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

Страница 2 из 2 Часовой пояс: UTC + 2 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/