Аналитика http://www.geosystema.net/forum/ |
|
Все про скрипти http://www.geosystema.net/forum/viewtopic.php?f=1&t=2809 |
Страница 52 из 83 |
Автор: | voha [ 14 дек 2016 14:16 ] |
Заголовок сообщения: | Re: Все про скрипти |
Winter писал(а): Чомусь вибирає 30 ділянок і зависає Так прибрали ж $I=$I+1 у тілі циклу (той що перший). Цикл натикається на кадномер якого немає серед значень параметра ID106 і йде на мітку %Messege, звідти - на %Start, безкінечний цикл. Перший тра повернути, а викинути другий. Однак, щоб читати ще й перший рядок списку:;Список з кад номерами $I=0 |
Автор: | Руслан Пархуць [ 14 дек 2016 15:11 ] |
Заголовок сообщения: | Re: Все про скрипти |
Скрипт не мiй, але iндекс повинен збiльшуватися правильно, якщо забрати другий I=I+1 |
Автор: | voha [ 14 дек 2016 15:23 ] |
Заголовок сообщения: | Re: Все про скрипти |
Руслан Пархуць писал(а): Скрипт не мiй, але iндекс повинен збiльшуватися правильно, якщо забрати другий I=I+1 Вибачте, будь-ласка. З вашого дозволу. Я тут трохи повправлявся - не маю натхнення свою роботу робити Код: $Demo=@DemoMode Тут легше розібратись, тому що в тексті скрипта із циклу немає виходу по-за самого циклу: тільки за умови, що лічильник більший як кількість рядків.
@If $Demo=1 then @Break Неможливо зберегти in4.|Програма в демо-режимі $FileExist=@Dialog.OpenFile *.txt *.txt @If $FileExist= then @Break Не вказано текстового файлу зі списком кадномерів $CountI=@Text.Load $FileExist @Map.BeginUpdate @Map.DeselectAll $I=0 %Start $I=$I+1 @IF $I>$CountI then @Goto %EndText ;працюєм з рядком списку $CN=@Text.Line[$I] $S=@Map.FindFirstByParameters 1|ID106=$CN @If $S=0 then @Text[1].Add $CN @If $S=0 then @Goto %Start ;;використовуємо внутрішнє ім'я функції, яка російською звучить Файл | Извлечь участок в In4 ;;раптом хтось ще працює українською @ExecuteMenu FileExtracttoIn4 @Map.SaveToFile @FileClose @Goto %Start %EndText $CountErr=@Text[1].Count @If $CountErr<>0 then $Text1=@Text[1].Text @If $CountErr=0 then $Text=Всі ділянки in4 збережені зі списку $FileExist else $Text=Вказані ділянки зі списку $FileExist не збережені, їх немає в карті:|$Text1 @Map.EndUpdate RefreshAlways @Dialog.Message $Text |
Автор: | Winter [ 14 дек 2016 16:02 ] |
Заголовок сообщения: | Re: Все про скрипти |
Дякую, скрипт працює |
Автор: | Winter [ 14 дек 2016 16:06 ] |
Заголовок сообщения: | Re: Все про скрипти |
Попередній скрипт працює викинувши другий $I=$I+1 та замінивши ;Список з кад номерами $I=0 Дякую) |
Автор: | Руслан Пархуць [ 18 дек 2016 02:26 ] |
Заголовок сообщения: | Re: Все про скрипти |
voha писал(а): ...Може є сенс додати скриптову функцію перерахунку координат точки? http://www.geosystema.net/forum/viewtopic.php?f=1&t=2539&start=120#38432
|
Автор: | voha [ 18 дек 2016 11:25 ] |
Заголовок сообщения: | Re: Все про скрипти |
Руслан Пархуць писал(а): voha писал(а): ...Може є сенс додати скриптову функцію перерахунку координат точки? http://www.geosystema.net/forum/viewtopic.php?f=1&t=2539&start=120#38432 |
Автор: | voha [ 19 дек 2016 07:55 ] |
Заголовок сообщения: | Re: Все про скрипти |
Руслан Пархуць писал(а): voha писал(а): ...Може є сенс додати скриптову функцію перерахунку координат точки? http://www.geosystema.net/forum/viewtopic.php?f=1&t=2539&start=120#38432- біліотеки несамодостатні, і треба cc3290mt.dll; - за наявності cc3290mt.dll виклик функції Transfer вибиває Digitals повністю. Підозрюю, що функція в dll може бути: Function _pj_transform(src,dst:PProjPJ;point_count:TLong;point_offset:Integer; x,y,z:PDoubleArray):Integer;cdecl;external 'PROJ.DLL' тобто, не PAnsiChar Якщо так, то це не вихід, а виклик функції - мертвий? |
Автор: | Руслан Пархуць [ 19 дек 2016 20:11 ] |
Заголовок сообщения: | Re: Все про скрипти |
voha писал(а): Чи працює в когось виклик функції Transfer з бібліотеки GeoGed .Перепрошую, забув перевiрити. Тепер має працювати (завантажте новi файли).
|
Автор: | voha [ 20 дек 2016 11:12 ] |
Заголовок сообщения: | Re: Все про скрипти |
Руслан Пархуць писал(а): voha писал(а): Чи працює в когось виклик функції Transfer з бібліотеки GeoGed .Перепрошую, забув перевiрити. Тепер має працювати (завантажте новi файли). |
Автор: | Руслан Пархуць [ 20 дек 2016 12:55 ] |
Заголовок сообщения: | Re: Все про скрипти |
voha писал(а): Якби додати функцію, яка просто повертала би перераховані координати Функцiя Transfer i повертає перерахованi координати, що i видно в скриптi $Str=@DLLExec GeoGed\GeoGed.Transfer '$source' '$target' '$PntList'$Res=@StringPart 1,$str - к-сть оброблених точок (якщо невiдємне значення, iнакше IД помилки i сама помилка) $PntCnt=$Res $PntList=@Calc Replace(Delete("$Str",1,Pos(",","$Str")),",",";") Список точок, роздiлених ";" $Pnt=@StringPart $PntCnt;$PntList - координати точки масиву $PntList ... або (щойно побачив, що є зайвi перетворення) $PntList=@Calc Delete("$Str",1,Pos(",","$Str")) Список точок, роздiлених "," $Pnt=@StringPart $PntCnt,$PntList - координати точки масиву $PntList (X Y Z) тобто закоментувавши стрiчуку @Map.Object[$Obj].Point[$PntCnt] $Pnt не буде трансформування об'єктiв, а дальше - Ваша фантазiя |
Автор: | voha [ 20 дек 2016 13:30 ] |
Заголовок сообщения: | Re: Все про скрипти |
Руслан Пархуць писал(а): ... закоментувавши стрiчуку @Map.Object[$Obj].Point[$PntCnt] $Pnt не буде трансформування об'єктiв, а дальше - Ваша фантазiя Вибачте, я прошльопав - у скрипті. Хороша робота. Дякую.
|
Автор: | voha [ 27 дек 2016 16:54 ] |
Заголовок сообщения: | Re: Все про скрипти |
Всім доброго дня. Є в мене така задача - розділити збірний полігональний об'єкт на не збірні. Немає проблем: функція @Map.SplitMultiPolygon N "Разбивает составной полигон на отдельные полигоны, сохраняя внутренние". Та ж сама задача - розділити збірний полігональний об'єкт на не збірні, однак об'єкт збірно-складний (комплексний полігон - бублик з частиною полігона в дірці від бублика). Функція не справляється з таким комплексом, відокремлюючи лише полігон№1 від складного №2&№3. Очевидно функція сприймає полігон №2&№3 як складний. Вложение: KomplexPolig.JPG [ 5.7 Кб | Просмотров: 9095 ] Вирішення можливе двома шляхами: 1) зробити самому на тимчасовій карті - після розділення функцією @Map.SplitMultiPolygon N перебрати всі полігони, утворені функцією spbSplit (Операції з об'єктами.Розділити), застосованої до об'єктів, що мають розрив у коодинатах; - зібрати полігони заново, перебравши їх в порядку зростання їхньої площі з оцінкою кількості перетинів горизонтального правого променя від центроїда, координати якого визначені функцією @Map.Object[N].Centroid (якщо кількість перетинів не парна - полігон, якщо парна - дірка в полігоні); 2) просити розробників допрацювати функцію @Map.SplitMultiPolygon N, на предмет розділення збірно-складних полігонів на прості та/або складні. Бачте як: якщо самому (методом трасування променів), то перетини порахувати можна й без тимчасової карти, а от отримати площі чи координати центроїда - ніяк. Щоб без тимчасової карти, треба мати ще й функціональні скрипти: - обчислення площі полігону за координатами поворотних точок межі; - визначення координат центроїда за координатами точок межі полігона. Складно |
Автор: | Руслан Пархуць [ 27 дек 2016 22:03 ] |
Заголовок сообщения: | Re: Все про скрипти |
voha писал(а): Всім доброго дня. Є в мене така задача - розділити збірний полігональний об'єкт на не збірні. Може так? (не зрозумiв, що потрiбно отримати в кiнцевому результатi) http://www.geosystema.net/forum/viewtopic.php?f=1&t=2539&p=38459#38459 |
Автор: | voha [ 28 дек 2016 08:55 ] |
Заголовок сообщения: | Re: Все про скрипти |
Руслан Пархуць писал(а): Може так? (не зрозумiв, що потрiбно отримати в кiнцевому результатi) http://www.geosystema.net/forum/viewtopic.php?f=1&t=2539&p=38459#38459 Вложение: KomplexPolig.JPG [ 38.31 Кб | Просмотров: 9072 ] Я описав, як можна зробити в скрипті самому, але тільки через тимчасову карту. Однак може статися як раніше - з функцією @Calc Replace. |
Страница 52 из 83 | Часовой пояс: UTC + 2 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |