Аналитика

Цифровая фотограмметрия, картография и землеустройство
Текущее время: 19 мар 2024 05:06

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 1235 ]  На страницу Пред.  1 ... 78, 79, 80, 81, 82, 83  След.
Автор Сообщение
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 14 янв 2022 18:43 
Гуру
Гуру

Зарегистрирован:
14 окт 2010 16:40
Сообщения: 265
Доброго вечера. Можно ли с помощью функции @Thread распараллелить добавление объектов в текущую карту? Например есть N количество txt файлов с координатами и нужно соответственно их обработать и добавить объекты в карту.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 01 фев 2022 01:08 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Доброї пори доби.

Підкажіть, будь-ласка. Чому функція @Map.CreateLayout XCenter YCenter Width Height Scale DPI BitPerPixel BMPFileName створює растр з розрізненістю 96 dpi - не залежно від того, яке значення DPI вказано?

Підозрюю, що справа може бути в налаштуваннях/константах - усе перерив, жодної зачіпки.
Буду вдячний за відповідь.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 01 фев 2022 12:33 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2293
Откуда: Vinnytsia
Доброї пори!
Дивно, чому у Вас може працювати не так як треба.
Перевірьте на цьому скрипті, він створює два растри з різною роздільною здатністю на певну область (100мм*100мм навколо центру поміченого об'єкта активної карти в поточному масштабі).

$MinMax=@Map.Selected.GetMinMax
$MinMax=%Library.ReplaceComma $MinMax
$XMin=@StringPart 1 $MinMax
$XMax=@StringPart 4 $MinMax
$YMin=@StringPart 2 $MinMax
$YMax=@StringPart 5 $MinMax
$XCenter=($XMin+$XMax)/2
$YCenter=($YMin+$YMax)/2
$Width=100
$Height=100
$Scale=0
$BitPerPixel=24
$BMPFileName=D:\test300.bmp
@Map.CreateLayout $XCenter $YCenter $Width $Height $Scale 300 $BitPerPixel $BMPFileName
$BMPFileName=D:\test100.bmp
@Map.CreateLayout $XCenter $YCenter $Width $Height $Scale 100 $BitPerPixel $BMPFileName

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 01 фев 2022 14:32 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Dmitry_Zolotar писал(а):
...Перевірьте на цьому скрипті, він створює два растри з різною роздільною здатністю на певну область (100мм*100мм навколо центру поміченого об'єкта активної карти в поточному масштабі)...
На жаль, результат той самий
Вложение:
CreateLayout.png
CreateLayout.png [ 38.12 Кб | Просмотров: 6321 ]
Можливо грає роль драйвер принтера на замовчування (PDF-XChange Virtual Printer)? Однак пробував XPS на замовчування - те саме. Чи грає роль калібрування принтера?

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

Для блага справи, готовий надати доступ в режимі віддаленого керування (TeamViewer, AnyDesk).

P.S. Ну все. Пробував на чистій установці Digitals, на іншому компі. Отже - справа тільки в функції.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 01 фев 2022 15:31 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2293
Откуда: Vinnytsia
Все вірно, BMP-файл створюється такий, що у його заголовку є лише розміри у пікселях по ширині та висоті та формат(кількість біт) пікселя. Test300 має одні розміриу пікселях, Test100 - інші, а вже програма переглядач визначає розміри в сантиметрах використовуючи роздільну здатність екрану (96 dpi)

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 01 фев 2022 16:28 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Dmitry_Zolotar писал(а):
Все вірно, BMP-файл створюється такий, що у його заголовку є лише розміри у пікселях по ширині та висоті та формат(кількість біт) пікселя. Test300 має одні розміриу пікселях, Test100 - інші, а вже програма переглядач визначає розміри в сантиметрах використовуючи роздільну здатність екрану (96 dpi)
Отже. Щоб отримати фрагмент карти для вставки в документ Word розміром 10х10 см при масштабі відображення 100%, необхідно давати функції 96 dpi.

Для результату по аналогії з функцією FileSaveAsJPEG (Експорт у | JPG), треба мати ще й розмір пікселя. Останній визначається з масштабу? Чи варто чекати розробки такої функції?

Дякую за оперативну відповідь.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 01 фев 2022 16:41 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2293
Откуда: Vinnytsia
Знайшли можливість писати в заголовок BMP роздільну здатність, оновіть програму та спробуйте ще раз @CreateLayout
P.S. Word/Excel раніше некоректно відображав розміри вставлених зображень, оріентуйтесь краще на щось інше, IrfanView наприклад

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 01 фев 2022 17:04 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Dmitry_Zolotar писал(а):
Знайшли можливість писати в заголовок BMP роздільну здатність, оновіть програму та спробуйте ще раз @CreateLayout
P.S. Word/Excel раніше некоректно відображав розміри вставлених зображень, оріентуйтесь краще на щось інше, IrfanView наприклад
Так. У мене VBA процедура застосовує специфічне "калібрування принтера".

Чемно дякую за оперативну підтримку. Тепер з BMP - те що треба. Однак варто перевірити решту форматів. JPG - спричиняє помилку звертання до пам'яті.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 31 мар 2022 07:43 
Эксперт
Эксперт

Зарегистрирован:
09 дек 2015 12:30
Сообщения: 96
Откуда: Закарпатська область
Доброго дня!
Слава Україні!!!
Можливо не на часі, але працювати за можливості потрібно.
Тому можливо хтось із Гуру Digitals мені допоможе.
Суть проблеми: при використанні функції @Map.IntersectionWithLayer не коректно опрацьовуються об'єкти-складні полігони, у підсумку площа об'єкта пересічення вираховується невірно.
У моєму випадку площа об'єкта пересічення становить 56,3550, а має бути 54,5962.

Фрагмент скрипта яким я користуюсь.
Код:
$N90008N=@Map.Layers.FindByID ID90008
@if $N90008N>0 then @Goto %Yes90008
@if $N90008N=0 then @Map.Layers.Add 90008 1 Залишок по обробітку
@Map.Layers.SetAttributes ID90008 0 0 255 20 1 16777215 0 Arial 80 0 -16777208
@Map.Layers.Polygon ID90008 1
%Yes90008
;----------------------------------------------------------
;----------------------------------------------------------
$RestrictLayerID=ID90005
@Map.DeselectAll
@Dialog.WaitBox Виберiть контури для аналiзу
$ObjectList=@Map.Selected.List
@Map.DeselectAll
@Text[1].Text=$ObjectList
@Text[2].Clear
$Count=@Text[1].Count
@While $Count>0 %LoopObjectList
;---------------------------------------------------------------------
$ObjectID=@Text[1].Line[$Count]
$ObjArea=@Map.Object[$ObjectID].Parameter[0]
;---------------------------------------------------------------------
$RestrictObj=@Map.IntersectionWithLayer $ObjectID $RestrictLayerID
@If $RestrictObj=0 Then @Goto %SkipObjectList
;---------------------------------------------------------------------
;---------------------------------------------------------------------
;Додано мною для виправлення помилки, але всеодно не коректно працює
;функція IntersectionWithLayer при обробітку великої кількості обєктів
;@Map.DeselectAll
;@Map.Object[$RestrictObj].LayerID ID90008
;Операции с объектами.Разделить
;@ExecuteMenu spbSplit
;@Map.DeselectAll
;@Map.SelectLayer ID90008
;Операции с объектами.Сложный полигон
;@ExecuteMenu spbCombine
;$RestrictObj=@Map.SelectedObject
;---------------------------------------------------------------------
;---------------------------------------------------------------------
$ObjRestArea=@Map.Object[$RestrictObj].Parameter[0]
@Map.DeleteObject $RestrictObj
@Text[2].Add Об'єкт $ObjectID, площа $ObjArea (пересiчення з шаром $RestrictLayerID складає $ObjRestArea)
%SkipObjectList
$Count=$Count-1
%LoopObjectList
$Count=@Text[2].Count
@If $Count=0 Then @Break Спiвпадань з шаром $RestrictLayerID не знайдено
$Buffer=@Text[2].Text
@Dialog.Message $Buffer


Частково вихід знайшов, якщо застосувати в цьому коді таку маніпуляцію
Код:
;Додано мною для виправлення помилки, але всеодно не коректно працює функція IntersectionWithLayer при обробітку великої кількості об'єктів
;@Map.DeselectAll
;@Map.Object[$RestrictObj].LayerID ID90008
;Операции с объектами.Разделить
;@ExecuteMenu spbSplit
;@Map.DeselectAll
;@Map.SelectLayer ID90008
;Операции с объектами.Сложный полигон
;@ExecuteMenu spbCombine
;$RestrictObj=@Map.SelectedObject
;---------------------------------------------------------------------

Але якщо опрацьовувати велику кількість об'єктів складнішим скриптом, з певним набором циклів. То трапляються випадки, що функція @Map.IntersectionWithLayer у результаті своєї роботи повертає результат $RestrictObj=0, хоча там 100% є пересічення.
Допоможіть будь-ласка розібратись з цією проблемою. Файл приклад додаю.


Вложения:
Test.dmf [42.02 Кб]
Скачиваний: 172
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 31 мар 2022 12:30 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2293
Откуда: Vinnytsia
Якщо об'єкт-перетин не потрібен потім, то використайте функцію PAR
Нижче скрипт, який оновлює у прикладі вміст параметрів 259 і 260, для карт з невеликою кількістю об'єктів можна функцію PAR вписати в параметр, тоді й скрипт не потрібен. В прикладі додано ще й допоміжний 258-й параметр.
Код:
$TempPar=ID7006411
$FieldLayerID=70005
$FieldPar1=ID7006412
$FieldPar2=ID7006413
$ParcelLayerID=90005
$FL=@Map.Layers.FindByID $FieldLayerID
@if $FL<1 then @Break Не знайдено шар "Ділянка"
$PL=@Map.Layers.FindByID $ParcelLayerID
@if $PL<1 then @Break Не знайдено шар "Масив"
$I=0
$MC=@Map.Count
%LoopObject1
$I=$I+1
$L=@Map.Object[$I].Layer
@if $L<>$FL then @Goto %Continue1
$Val=@Map.Object[$I].CalculateFormula PAR($PL,$TempPar)
$Val=%Library.ReplaceComma $Val
$Val=@Calc trunc($Val*10000+0.5)/10000
$Area=@Map.Object[$I].Parameter[0]
$Area=%Library.ReplaceComma $Area
$V2=$Area-$Val
@Map.Object[$I].Parameter[$FieldPar1] $Val
@Map.Object[$I].Parameter[$FieldPar2] $V2
@Map.RefreshObject $I
%Continue1
@if $I<$MC then @Goto %LoopObject1
@Dialog.Message All done!!!


Вложения:
Test_ParFunc.dmf [38.99 Кб]
Скачиваний: 182

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 31 мар 2022 13:27 
Эксперт
Эксперт

Зарегистрирован:
09 дек 2015 12:30
Сообщения: 96
Откуда: Закарпатська область
Dmitry_Zolotar писал(а):
Якщо об'єкт-перетин не потрібен потім, то використайте функцію PAR
Нижче скрипт, який оновлює у прикладі вміст параметрів 259 і 260, для карт з невеликою кількістю об'єктів можна функцію PAR вписати в параметр, тоді й скрипт не потрібен. В прикладі додано ще й допоміжний 258-й параметр.
Код:
$TempPar=ID7006411
$FieldLayerID=70005
$FieldPar1=ID7006412
$FieldPar2=ID7006413
$ParcelLayerID=90005
$FL=@Map.Layers.FindByID $FieldLayerID
@if $FL<1 then @Break Не знайдено шар "Ділянка"
$PL=@Map.Layers.FindByID $ParcelLayerID
@if $PL<1 then @Break Не знайдено шар "Масив"
$I=0
$MC=@Map.Count
%LoopObject1
$I=$I+1
$L=@Map.Object[$I].Layer
@if $L<>$FL then @Goto %Continue1
$Val=@Map.Object[$I].CalculateFormula PAR($PL,$TempPar)
$Val=%Library.ReplaceComma $Val
$Val=@Calc trunc($Val*10000+0.5)/10000
$Area=@Map.Object[$I].Parameter[0]
$Area=%Library.ReplaceComma $Area
$V2=$Area-$Val
@Map.Object[$I].Parameter[$FieldPar1] $Val
@Map.Object[$I].Parameter[$FieldPar2] $V2
@Map.RefreshObject $I
%Continue1
@if $I<$MC then @Goto %LoopObject1
@Dialog.Message All done!!!

Велике дякую! :D Буду пробувати вмонтувати в мій скрипт! :wink:


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 13 апр 2022 11:00 
Специалист
Специалист

Зарегистрирован:
19 ноя 2018 13:26
Сообщения: 45
Всім доброго дня!
Підкажіть будь ласка чи є можливість створення параметра для точкових об'єктів який би вказував кількість дотичних лінійних об'єктів до них (наприклад опора і лінії які її належать).


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 14 апр 2022 14:17 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2293
Откуда: Vinnytsia
Denys Sanitskyi писал(а):
Всім доброго дня!
Підкажіть будь ласка чи є можливість створення параметра для точкових об'єктів який би вказував кількість дотичних лінійних об'єктів до них (наприклад опора і лінії які її належать).

Код:
;шар лінійних об'єктів
$LineLayer=1
;шар точкових об'єктів
$PointLayer=2
;номер параметру кількості дотичних об'єктів
$CountParam=1
$MC=@Map.Count
$I=0
%LoopObject1
$I=$I+1
$L=@Map.Object[$I].Layer
@if $L<>$PointLayer then @Goto %Continue1
$XYZ=@Map.Object[$I].Point[1]
$C=0
$J=0
%LoopObject2
$J=$J+1
$L=@Map.Object[$J].Layer
@if $L<>$LineLayer then @Goto %Continue2
$IP=@Map.Object[$J].IndexOfPoint $XYZ
@if $IP>0 then $C=$C+1
%Continue2
@if $J<$MC then @Goto %LoopObject2
@Map.Object[$I].Parameter[$CountParam] $C
@Map.RefreshObject $I
%Continue1
@if $I<$MC then @Goto %LoopObject1


Вложения:
TestLC.dmf [1.16 Кб]
Скачиваний: 167

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 15 апр 2022 08:18 
Специалист
Специалист

Зарегистрирован:
19 ноя 2018 13:26
Сообщения: 45
ВЕЛИКЕ дякую!

Підкажіть будь ласка що не так із таким скриптом, не можу зрозуміти чому він не виконується для деякої частини об'єктів

$CountSel=@Map.SelCount
@If $CountSel=0 then @Break Позначте лінійні об'єкти.
$SelObj=0
@Progress.Start $CountSel Виконання
%StartSelObj
$SelObj=@Map.NextSelected $SelObj
@If $SelObj=0 then @Goto %EndProc
@Progress.StepBy
$CntP=@Map.Object[$SelObj].Count
@If $CntP<>2 then @Goto %StartSelObj
$P1=@Map.Object[$SelObj].Point[1]
$P2=@Map.Object[$SelObj].Point[2]
$ObjP1=@Map.PointObject 0 $P1
@If $ObjP1=0 then @Goto %FindObjP2
$P7038=@Map.Object[$ObjP1].Parameter[ID7024]
@Map.Object[$SelObj].Parameter[ID7038]=$P7038
%FindObjP2
$ObjP2=@Map.PointObject 0 $P2
@If $ObjP2=0 then @Goto %StartSelObj
$P7038=@Map.Object[$ObjP2].Parameter[ID7024]
@Map.Object[$SelObj].Parameter[ID7038]=$P7038
@Goto %StartSelObj
%EndProc
@Progress.Stop
@Dialog.Message Виконано


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Все про скрипти
СообщениеДобавлено: 16 апр 2022 09:50 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Denys Sanitskyi писал(а):
Підкажіть будь ласка що не так із таким скриптом, не можу зрозуміти чому він не виконується для деякої частини об'єктів...
Зі скриптом все норм. Здається причина - в карті. Додайте запис лог-файла у скрипт: @OpenLog першим рядком скрипта і (наприклад) @CloseLog D:\Log.txt останнім рядком. Далі продивіться лог-файл у текстовому редакторі: знайдіть фрагмент SelObj=N, в якому N - номер лінійного об'єкта, по якому скрипт не спрацював.


Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1235 ]  На страницу Пред.  1 ... 78, 79, 80, 81, 82, 83  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 22


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB