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

Все про скрипти
http://geosystema.net/forum/viewtopic.php?f=1&t=2809
Страница 53 из 83

Автор:  Руслан Пархуць [ 28 дек 2016 12:38 ]
Заголовок сообщения:  Re: Все про скрипти

voha писал(а):
Та ж сама задача - розділити збірний полігональний об'єкт на не збірні, однак об'єкт збірно-складний (комплексний полігон - бублик з частиною полігона в дірці від бублика).
Саму iдею я Вам дав, треба було трохи доробити
http://www.geosystema.net/forum/viewtopic.php?f=1&t=2539&p=38459#38459

voha писал(а):
2) просити розробників допрацювати функцію @Map.SplitMultiPolygon N,....
1. Вдосконалити ф-цiю @Map.SplitMultiPolygon N, результатом якої був би список новостворених об'єктiв
2. Додати нову для отримання типу елементу @Map.Object[N].Type 1-точка, 2-лiнiйний елемент, 3-складний полiгон i т.д.

Автор:  voha [ 28 дек 2016 16:37 ]
Заголовок сообщения:  Re: Все про скрипти

Руслан Пархуць писал(а):
voha писал(а):
Та ж сама задача - розділити збірний полігональний об'єкт на не збірні, однак об'єкт збірно-складний (комплексний полігон - бублик з частиною полігона в дірці від бублика).
Саму iдею я Вам дав, треба було трохи доробити
http://www.geosystema.net/forum/viewtopic.php?f=1&t=2539&p=38459#38459

voha писал(а):
2) просити розробників допрацювати функцію @Map.SplitMultiPolygon N,....
1. Вдосконалити ф-цiю @Map.SplitMultiPolygon N, результатом якої був би список новостворених об'єктiв
2. Додати нову для отримання типу елементу @Map.Object[N].Type 1-точка, 2-лiнiйний елемент, 3-складний полiгон i т.д.
Чемно дякую.
Однак мені траплялися складні полігони, в координатах яких спочатку йшов блок координат внутрішнього елемента, а потім - через розрив, блок координат зовнішнього елемента. Біс його знає, як такі неправильно складені складні полігони збирались. Зібрати своїми руками мені їх не вдається. Якраз мається на меті перезібрати усі складні полігони, щоб "неправильних" не було.
Як в такому випадку, після розділення функцією spbSplit, номери об'єктів: спочатку зовнішній, потім внутрішній, чи в порядку розміщення блоків координат?

Список номерів об'єктів після @Map.SplitMultiPolygon N - всі номери, більші за @Map.Count, застосованої до розділення.

Автор:  Руслан Пархуць [ 28 дек 2016 17:09 ]
Заголовок сообщения:  Re: Все про скрипти

Нема за що... ;)
voha писал(а):
Це неправильно складений складний полігон.
... це вже iнше питання, приклад для аналiзу i що хочете отримати.
На малюнку "неправильний" полiгон, контури 5,6 мають бути в 2, чи 1 полiгонi, чи 5 в 1-ому а 6 в 2-ому, чи ....


Руслан Пархуць писал(а):
Список номерів об'єктів після @Map.SplitMultiPolygon N - всі номери, більші за @Map.Count, застосованої до розділення.
Створюються новi, вiдповiдно i к-сть збiльшується (був один "складний" - стало декiлька "простих").

Вложения:
01.jpg
01.jpg [ 11.08 Кб | Просмотров: 9196 ]

Автор:  voha [ 29 дек 2016 00:05 ]
Заголовок сообщения:  Re: Все про скрипти

Руслан Пархуць писал(а):
1. Вдосконалити ф-цiю @Map.SplitMultiPolygon N, результатом якої був би список новостворених об'єктiв
Список номерів новостворених об'єктів (після @Map.SplitMultiPolygon N) - всі номери, більші за @Map.Count, застосованої до розділення.
Руслан Пархуць писал(а):
2. Додати нову для отримання типу елементу @Map.Object[N].Type 1-точка, 2-лiнiйний елемент, 3-складний полiгон i т.д.
Вроді як, вирішено вже тут, крім того є @Map.Layers.Polygon Number [0/1], @Map.Object[N].Closed, хоча повністю підтримую прохання.
Руслан Пархуць писал(а):
... це вже iнше питання, приклад для аналiзу i що хочете отримати.
На малюнку "неправильний" полiгон, контури 5,6 мають бути в 2, чи 1 полiгонi, чи 5 в 1-ому а 6 в 2-ому, чи ....
Ще раз дякую пану Руслану за варіант в "розборі польотів". Насправді, накладка полігонів, от де інше питання, а моє - самий раз:

Ви впевнені, що перебираючи створені функцією розділення на прості полігони в порядку зростання номерів цих об'єктів, ви перебираєте спочатку зовнішній, потім внутрішній :?: Ніхто не підтверджував, що функція spbSplit саме в такому порядку присвоює номера новоствореним об'єктам.

Як на мене, відкрито два питання:
1) якщо для складного полігона у властивостях (в списку точок) першими йдуть координати внутрішнього полігона, а після розриву - координати зовнішнього полігона, номер внутрішнього полігона, після розбивки складного на прості функцією spbSplit, буде менший ніж зовнішнього?
2) якщо при розділенні полігона прості полігони створюються в тому ж порядку, в якому їх координати описані в списку точок (у властивостях об'єкта), то запропонований спосіб розділення збірно-складних не годиться, тоді треба читати Алгоритм установления принадлежности точечного объекта внутренней области линейного замкнутого объекта.
Складно це, тому прошу розробників допрацювати функцію @Map.SplitMultiPolygon N, на предмет розділення збірно-складних полігонів на прості та/або складні, або хоча б дати відповідь на перше питання.

Автор:  Руслан Пархуць [ 29 дек 2016 16:53 ]
Заголовок сообщения:  Re: Все про скрипти

voha писал(а):
Руслан Пархуць писал(а):
1. Вдосконалити ф-цiю @Map.SplitMultiPolygon N, результатом якої був би список новостворених об'єктiв
Список номерів новостворених об'єктів (після @Map.SplitMultiPolygon N) - всі номери, більші за @Map.Count, застосованої до розділення.
... чи не легше працювати зразу з готовим списком, а не створювати декiлька змiнних, щоб його отримати?

voha писал(а):
читати Алгоритм установления принадлежности точечного объекта внутренней области линейного замкнутого объекта.
.... :) для цiєї задачi достатньо метод сортування (вищенаведений алгоритм трiшки для iншого, хiба що є бажання написати свою для формування i роботи з складними полiгонами), а щодо того, як створюється складний контур, думаю теж по такому принципу (сортування по площi), хоча можна i перепитати у розробникiв, чи ми "йдемо у правильному напрямку".
P.S. з сортуванням слiд використати функцiю @Map.SortByParameter 0 (для сортування площ).

Автор:  Rostyslav [ 18 янв 2017 22:11 ]
Заголовок сообщения:  Re: Все про скрипти

допоможіть розібратись , є n-точок з нумерацією 1,2,3,4,.....n потрібно скрипт щоб перейменувати за маскою приміром t100001,t100002,t100003,t100004,....t10000n
........
$count=@Map.SelCount
@Map.SelectLayer ID35
$n=1
%start
$s=@Map.Selected.ChangeParameter 73 $str-0000$n
@If $n<=$count then $s else @Break
$n=$n+1
@Goto %start
%end

Автор:  fendak [ 19 янв 2017 10:12 ]
Заголовок сообщения:  Re: Все про скрипти

@Map.SelectLayer ID35
$n=0
$Nzp=0
%start
$n=@Map.NextSelected $n
$Nzp=$Nzp+1
@if $n=0 then @Goto %end
$Res="$str-0000$Nzp"
$Res=@DequoteText $Res
@Map.Object[$n].Parameter[73] $Res
@Goto %start
%end

якщо у параметрі ваших точок вже є нумерація, тоді спочатку її треба витягувати з параметра точки, потім додавати префікс і записувати назад:

@Map.SelectLayer ID35
$n=0
%start
$n=@Map.NextSelected $n
@if $n=0 then @Goto %end
$Nzp=@Map.Object[$n].Parameter[73]
$Res="$str-0000$Nzp"
$Res=@DequoteText $Res
@Map.Object[$n].Parameter[73] $Res
@Goto %start
%end

Автор:  voha [ 24 янв 2017 11:34 ]
Заголовок сообщения:  Re: Все про скрипти

Руслан Пархуць писал(а):
P.S. з сортуванням слiд використати функцiю @Map.SortByParameter 0 (для сортування площ).
Продовжу, щодо розділення складно-збірних полігонів на прості та/або складні.
Функція @Map.SortByParameter 0 відсортує всі об'єкти в карті по площі, при цьому змінить плановість об'єктів залежно від номерів об'єктів. Це в карті буде "каша".
Сортувати треба список, де перше поле (через пробіл) - площа, а друге поле - номер об'єкта. Потім у циклі читати номера об'єктів із сортованого по першому полю списку. А це вже двомірний масив (з двома індексами). Немає, поки що в мові скриптів кілька-мірних масивів. Шкода.
Приходиться так:
1) для кожного з розділених полігонів
- запис номера N об'єкта в список-1;
- запис площі об'єкта в список-2;
- запис площі об'єкта в список-3.
2) для створених списків
- сортування за зростанням списку-3;
3) для кожного і-го рядка списку-3
- пошук n-го номера рядка списку-2 зі значенням і-го рядка списку-3
- отримання номера N полігону з n-го рядка списку-1;
- видалення n-го рядка зі списку-2 (раптом декілька полігонів мають однакову площу);
- запис номера N у список-4.
Во чого треба зробити, щоб виконати сортування списку номерів полігонів за зростанням площі полігонів :?

P.S. Я саме за сортування текстового списку, маю на увазі.

Автор:  voha [ 30 янв 2017 12:05 ]
Заголовок сообщения:  Re: Все про скрипти

Продовжу, щодо розділення складно-збірних полігонів на прості та/або складні. Спитаєте - для чого?
Вложение:
Demo.JPG
Demo.JPG [ 45.22 Кб | Просмотров: 9000 ]
Якщо батьківський - складно-збірний, то для внутрішнього збірного лінійного (коричневим кольором) і для внутрішнього полігонального (суцільно залитого фіолетовим кольором) не знайдено батьківського полігона функцією @Map.ParentObject Number [ParentLayer].
Зате, якщо батьківський збірно-складний, він легко визначається як батьківський для внутрішнього збірного лінійного чи внутрішнього полігонального.

Воно получається як: для перевірки вкладеності об'єктів у батьківський полігон, треба спочатку розбити складно збірний полігон на прості та/або складні полігони.

Автор:  klaid [ 31 янв 2017 09:11 ]
Заголовок сообщения:  Re: Все про скрипти

Доброго здоров'я всім.
Чи є вкогось скрипт який би шукав ділянки на ПКК по списку кад.номерів і вставляв їх контури на карту??? :D :D :D

Автор:  carnivoro [ 08 фев 2017 14:54 ]
Заголовок сообщения:  Re: Все про скрипти

С помощью какого скрипта можно найти элементы карты в слое ID1, площадь которых меньше 25 кв.м.?

Автор:  fendak [ 08 фев 2017 14:59 ]
Заголовок сообщения:  Re: Все про скрипти

@Map.SelectByParameters 2|-7=1|0<0,25

Автор:  carnivoro [ 08 фев 2017 15:07 ]
Заголовок сообщения:  Re: Все про скрипти

fendak писал(а):
@Map.SelectByParameters 2|-7=1|0<0,25

Благодарю. Сразу не получилось, но когда я исправил 0,25 на 25, то скрипт сработал. Спасибо!

Автор:  voha [ 16 фев 2017 20:31 ]
Заголовок сообщения:  Re: Все про скрипти

Щодо функції @Calc Replace(s,t,v,[1/0=ReplaceAll,[1/0=IgnoreCase]] )
Задача: треба було видалити лапки з рядка s. Непосильна задача для вказаної функції, оскільки в скрипті команда мала б виглядати як @Calc Replace("s",""","").
Довелось писати в Delphi: функція ReplaceCharInStr Str,Whot,Replace з бібліотеки Functions.dll - замінить фразу Whot рядка Str на фразу Replace. Для прикладу:
Код:
;Приклад роботи функції dll (ReplaceCharInStr Str,Whot,Replace - заміни фрази Whot рядка Str на фразу Replace
$StrLineText1=@DLLExec Functions.ReplaceCharInStr 2901 Філія_Крижопільський_"Райагроліс",",
$StrLineText1=@DLLExec Functions.ReplaceCharInStr $StrLineText1,_,
@Dialog.Message Замінено:|2901 Філія_Крижопільський_"Райагроліс"||на|$StrLineText1
Може комусь згодиться - файл з хмари в теку Digitals:

Functions.dll

Функція ExistFormForClassAndCaption FormClass/FormCaption, яка повертає: 0 - якщо вікно з класом форми FormClass і заголовком FormCaption не відображається на екрані; 1 - якщо вказане вікно відображається.
Приклад виклику функції зі скрипта:
Код:
$Res=@DLLExec Functions.ExistFormForClassAndCaption TFormTB/До лісових карт(c)
, де: TFormTB - клас форми вікна користувацької панелі інструментів Digitals; До лісових карт(c) - заголовок вікна (назва користувацької панелі інструментів).

Функція ChangeValueIniFile IniFile/Section/Key/Value встановлює значення Value ключа Key в секції Section файла ініціалізації з повним ім'ям (включаючи шлях та розширення) IniFile

Автор:  fendak [ 16 фев 2017 23:22 ]
Заголовок сообщения:  Re: Все про скрипти

Voha, ви, мабуть, забули, що є такий варіант:
$P=Філія_Крижопільський_"Райагроліс"
$SS=
$N=@StringPartCount " $P
$I=0
%Loop
$I=$I+1
$S1=@StringPart $I"$P
$SS=$SS$S1
@if $I<$N then @Goto %Loop
$P=$SS
@Dialog.Message $P

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