Аналитика

Цифровая фотограмметрия, картография и землеустройство
Текущее время: 28 мар 2024 21:49

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




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 12 май 2020 15:24 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
22 сен 2007 16:09
Сообщения: 382
Откуда: м.Львiв
Denys Sanitskyi писал(а):
Руслан Пархуць писал(а):
Denys Sanitskyi писал(а):
Доброго дня! Підкажіть будь ласка, чи можливо за допомого скрипту пронумерувати об'єкти в порядку збільшення довжини ліній на яких вони лежать.
:) можна все (або майже все). Скиньте, який потрiбно отримати результат, бо з питання не зовсiм зрозумiло суть задачi.


https://drive.google.com/file/d/1z3CbKa ... sp=sharing

Тобто я виконую такі дії:
-створюю полілінію (вітку) від початку (ктп) в послідовності існуючої нумерації опор, потім за таким принципом наношу наступні;
-командою Правка - Добавить узлы - додаю на полілінії Опори;
-командою Инфо - Калькулятор - Последовательная нумерация - присвоюю почергово по вітках номера опорам, спочатку нумеруюючи опори на коротчих вітках.
Підкажіть, чи можливо автоматизувати скриптами процес нанесення опор і присвоєння їм номерів?


Спробуйте, чи все вiрно

_________________
Більшість хороших програмістів виконують свою роботу не тому, що очікують оплати або визнання, а тому, що отримують задоволення від програмування.


Последний раз редактировалось Руслан Пархуць 13 май 2020 17:34, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 12 май 2020 16:14 
Специалист
Специалист

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


https://drive.google.com/file/d/1z3CbKa ... sp=sharing

Тобто я виконую такі дії:
-створюю полілінію (вітку) від початку (ктп) в послідовності існуючої нумерації опор, потім за таким принципом наношу наступні;
-командою Правка - Добавить узлы - додаю на полілінії Опори;
-командою Инфо - Калькулятор - Последовательная нумерация - присвоюю почергово по вітках номера опорам, спочатку нумеруюючи опори на коротчих вітках.
Підкажіть, чи можливо автоматизувати скриптами процес нанесення опор і присвоєння їм номерів?


Спробуйте, чи все вiрно
Код:
; Форум (2 варiант)
$DEBUG=1
$Layer=ID11293
$Parameter=ID7024
@ExecuteMenu ViewShowAll
; точковi шари [3]ID [4]назва
@Text[1].Clear
@Text[2].Clear
; лiнiйнi шари [3]ID [4]назва
@Text[3].Clear
@Text[4].Clear
$LCount=@Map.Layers.Count
@While $LCount>0 %LoopLayer
$LParam=@Map.Layers.Get $LCount
$LType=@StringPart 2 $LParam
$LName=@Map.Layers.GetName $LCount
$LECount=@Map.Layers.ObjectCount $LCount
@If (($LType=3) Or ($LType=4)) And ($LECount>0) Then @Text[1].Add $LCount
@If (($LType=3) Or ($LType=4)) And ($LECount>0) Then @Text[2].Add $LName
;
@If ($LType=1) And ($LECount>0) Then @Text[3].Add $LCount
@If ($LType=1) And ($LECount>0) Then @Text[4].Add $LName
$LCount=$LCount-1
%LoopLayer
;
$Buf=@Text[2].Text
$SPoint=@Dialog.ListSelect Виберiть шар КТП|$Buf
@If $SPoint= Then @Break
$I=@Text[2].IndexOf $SPoint
$SID=@Text[1].Line[$I]
;
$Buf=@Text[4].Text
$SLine=@Dialog.ListSelect Виберiть шар напрямкiв лiнiй|$Buf
@If $SLine= Then @Break
$I=@Text[4].IndexOf $SLine
$RID=@Text[3].Line[$I]
;
@Map.DeselectAll
@Map.SelectLayer $SID
$Buf=@Map.Selected.List
@Text[1].Text=$Buf
@Map.Layers.SetState $SID 3
;
@Map.DeselectAll
@Map.SelectLayer $RID
@ExecuteMenu spbJoin
@Map.SelectLayer $RID
@ExecuteMenu spbSplit
@Map.SelectLayer $RID
@ExecuteMenu spbFragments
@Map.SelectLayer $RID
$Buf=@Map.Selected.List
@Text[3].Text=$Buf
@Map.Layers.SetState $SID 0
@Map.DeselectAll
;
; цикл по точках
$Index=1
@Text[10].Clear
@Text[11].Clear
$pCount=@Text[1].Count
@While $pCount>0 %LoopPoints
$PointObj=@Text[1].Line[$pCount]
$X=@Map.Object[$PointObj].Point[1].x
$Y=@Map.Object[$PointObj].Point[1].y
@Text[11].Add $X $Y
; цикл по лiнiях
%MainCycle
@Text[5].Clear
$lCount=@Text[3].Count
@While $lCount>0 %LoopLines
$LineObj=@Text[3].Line[$lCount]
$A=@Text[10].IndexOf $LineObj
@If $A>0 Then @Goto %SkipLines
;
$X1=@Map.Object[$LineObj].Point[1].x
$Y1=@Map.Object[$LineObj].Point[1].y
;
$PtCount=@Map.Object[$LineObj].Count
$X2=@Map.Object[$LineObj].Point[$PtCount].x
$Y2=@Map.Object[$LineObj].Point[$PtCount].y
;
@If (("$X1"<>"$X") Or ("$Y1"<>"$Y")) And (("$X2"<>"$X") Or ("$Y2"<>"$Y")) Then @Goto %SkipLines
@If "$X1"="$X" Then @Goto %NextStep
@Map.Object[$LineObj].Reverse
%NextStep
$Perim=@Map.Object[$LineObj].Parameter[-1]
$Perim=%Library.ReplaceComma $Perim
$Perim=$Perim/10000
$Perim=@RoundTo $Perim 6
@Text[5].Add $Perim $LineObj
;
%SkipLines
$lCount=$lCount-1
%LoopLines
; сортуємо i додаємо в загальний масив
@Text[5].Sort
$Count=@Text[5].Count
$I=1
@While $I<=$Count %LoopArray
$Line=@Text[5].Line[$I]
$Obj=@StringPart 2 $Line
@Text[10].Add $Obj
$I=$I+1
%LoopArray
;
$pCount=$pCount-1
%LoopPoints
;
$Buf=@Text[10].Text
$Count=@Text[10].Count
@If $Index>$Count Then @Goto %MarkPoints
$Obj=@Text[10].Line[$Index]
$PtCount=@Map.Object[$Obj].Count
$X=@Map.Object[$Obj].Point[$PtCount].x
$Y=@Map.Object[$Obj].Point[$PtCount].y
$Index=$Index+1
@Goto %MainCycle
;
%MarkPoints
$PointNumber=1
$Count=@Text[10].Count
$I=1
@While $I<=$Count %LoopMark
$Obj=@Text[10].Line[$I]
$PtCount=@Map.Object[$Obj].Count
$J=1
@While $J<=$PtCount %LoopMarkPoints
$X=@Map.Object[$Obj].Point[$J].x
$Y=@Map.Object[$Obj].Point[$J].y
$Index=@Text[11].IndexOf $X $Y
@If $Index>0 Then @Goto %SkipMarkPoints
@Text[11].Add $X $Y
$PointObj=@Map.AddObject 0|1|$Layer|1|0 $X $Y 0|1|$Layer|2|$Parameter $PointNumber|114 Проміжна з/б опора~7026:1
@Map.Object[$PointObj].CreateCaption $Parameter 0 0 1 0 3 0
@Map.RefreshObject $PointObj
$PointNumber=$PointNumber+1
%SkipMarkPoints
$J=$J+1
%LoopMarkPoints
$I=$I+1
%LoopMark


Дякую! Все майже супер! Є тільки два нюанси:
- чи можливо зробити так щоб скрипт виконувався тільки на позначених лініях чи біля позначених об'єктах типу КТП ( ID слоя 11120)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 12 май 2020 20:05 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
22 сен 2007 16:09
Сообщения: 382
Откуда: м.Львiв
Denys Sanitskyi писал(а):
Дякую! Все майже супер! Є тільки два нюанси:
- чи можливо зробити так щоб скрипт виконувався тільки на позначених лініях чи біля позначених об'єктах типу КТП ( ID слоя 11120)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.
Пiдкорегував попереднiй варiант для ручного вибору, коли є вiдмова в дiалозi вибору шару з лiнiями

_________________
Більшість хороших програмістів виконують свою роботу не тому, що очікують оплати або визнання, а тому, що отримують задоволення від програмування.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 13 май 2020 10:04 
Специалист
Специалист

Зарегистрирован:
19 ноя 2018 13:26
Сообщения: 45
Руслан Пархуць писал(а):
Denys Sanitskyi писал(а):
Дякую! Все майже супер! Є тільки два нюанси:
- чи можливо зробити так щоб скрипт виконувався тільки на позначених лініях чи біля позначених об'єктах типу КТП ( ID слоя 11120)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.
Пiдкорегував попереднiй варiант для ручного вибору, коли є вiдмова в дiалозi вибору шару з лiнiями


https://drive.google.com/file/d/1FWAEkC ... sp=sharing

Вибачаюсь за те що так часто Вас турбую, але в мене виникло ще декілька питань:
- можете поправити скрипт так щоб нумерація опор слідувала спочатку по вітці, а потім вже по наступній за довжиною вітці, тому що інколи є помилкові значення;
Трапляються стуації в яких на мою думку помилкові значення неминучі, допоможіть будь ласка із наступним скриптом, який би відповідав таким пунктам:
- можливість задавати порядок нумерації по вітках певним параметром вітки вручну (наприклад: порядковий номер вітки);
- можливість перенумеровувати вже існуючі опори на вітках.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 13 май 2020 17:31 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
22 сен 2007 16:09
Сообщения: 382
Откуда: м.Львiв
Denys Sanitskyi писал(а):
Руслан Пархуць писал(а):
Denys Sanitskyi писал(а):
Дякую! Все майже супер! Є тільки два нюанси:
- чи можливо зробити так щоб скрипт виконувався тільки на позначених лініях чи біля позначених об'єктах типу КТП ( ID слоя 11120)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.
Пiдкорегував попереднiй варiант для ручного вибору, коли є вiдмова в дiалозi вибору шару з лiнiями

Вибачаюсь за те що так часто Вас турбую, але в мене виникло ще декілька питань:
- можете поправити скрипт так щоб нумерація опор слідувала спочатку по вітці, а потім вже по наступній за довжиною вітці, тому що інколи є помилкові значення;
Трапляються стуації в яких на мою думку помилкові значення неминучі, допоможіть будь ласка із наступним скриптом, який би відповідав таким пунктам:
- можливість задавати порядок нумерації по вітках певним параметром вітки вручну (наприклад: порядковий номер вітки);
- можливість перенумеровувати вже існуючі опори на вітках.
Доброго дня. Зробив панель з наступними кнопками:
1. Автоматична нумерацiя опор (попереднiй скрипт)
2. Напiвавтоматична нумерацiя опор (новий скрипт, iнший пiдхiд)
3. Корегування значення параметру (для змiни нумерацiї опор чи iнших параметрiв: +10 - додати 10 до iснуючого значення, -10 - вiдповiдно, вiдняти)

P.S. Щоб не засмiчувати форум, пропозицiї i зауваження пишiть в ЛС. Попереднiй скрипт заберу з форуму, оскiльки вiн є в даному повiдомленнi.


Вложения:
energetics.tlb [24.99 Кб]
Скачиваний: 358
Logo.bmp
Logo.bmp [ 52.3 Кб | Просмотров: 8150 ]

_________________
Більшість хороших програмістів виконують свою роботу не тому, що очікують оплати або визнання, а тому, що отримують задоволення від програмування.


Последний раз редактировалось Руслан Пархуць 04 сен 2020 14:51, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 14 май 2020 08:40 
Специалист
Специалист

Зарегистрирован:
19 ноя 2018 13:26
Сообщения: 45
Руслан Пархуць писал(а):
Denys Sanitskyi писал(а):
Руслан Пархуць писал(а):
Denys Sanitskyi писал(а):
Дякую! Все майже супер! Є тільки два нюанси:
- чи можливо зробити так щоб скрипт виконувався тільки на позначених лініях чи біля позначених об'єктах типу КТП ( ID слоя 11120)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.
Пiдкорегував попереднiй варiант для ручного вибору, коли є вiдмова в дiалозi вибору шару з лiнiями

Вибачаюсь за те що так часто Вас турбую, але в мене виникло ще декілька питань:
- можете поправити скрипт так щоб нумерація опор слідувала спочатку по вітці, а потім вже по наступній за довжиною вітці, тому що інколи є помилкові значення;
Трапляються стуації в яких на мою думку помилкові значення неминучі, допоможіть будь ласка із наступним скриптом, який би відповідав таким пунктам:
- можливість задавати порядок нумерації по вітках певним параметром вітки вручну (наприклад: порядковий номер вітки);
- можливість перенумеровувати вже існуючі опори на вітках.
Доброго дня. Зробив панель з наступними кнопками:
1. Автоматична нумерацiя опор (попереднiй скрипт)
2. Напiвавтоматична нумерацiя опор (новий скрипт, iнший пiдхiд)
3. Корегування значення параметру (для змiни номерацiї опор чи iнших параметрiв: +10 - додати 10 до iснуючого значення, -10 - вiдповiдно, вiдняти)

P.S. Щоб не засмiчувати форум, пропозицiї i зауваження пишiть в ЛС. Попереднiй скрипт заберу з форуму, оскiльки вiн є в даному повiдомленнi.


Дякую! Ця панель просто супер!!!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 03 сен 2020 19:11 
Специалист
Специалист

Зарегистрирован:
19 ноя 2018 13:26
Сообщения: 45
Доброго дня! Виникло в мене таке питання щодо груп об'єктів на карті, чи можливо за допомогою скриптів створювати ці групи опираючись на один спільний параметр для об'єктів?


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 04 сен 2020 22:03 
Гуру
Гуру

Зарегистрирован:
05 апр 2012 10:20
Сообщения: 797
Откуда: Львівська область
Denys Sanitskyi писал(а):
Доброго дня! Виникло в мене таке питання щодо груп об'єктів на карті, чи можливо за допомогою скриптів створювати ці групи опираючись на один спільний параметр для об'єктів?

Доброго дня!
Думаю, що можливо. Тільки трохи не ясно, що ви конкретно на увазі.
Наприклад, ось так можна спершу виділити об'єкти на карті за значенням певного параметра і потім додати їх у вказану групу

@Map.SelectByParameters 1|0=0
@Map.Selected.AddToGroup GroupName

В даному випадку в групу GroupName буде додано усі об'єкти, площа (параметр 0) яких дорівнює 0.

Можна зробити цикл, який зразу створить багато груп залежно від значення потрібного параметру.

_________________
додатково про скрипти Digitals на www.digitals.at.ua


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 06 сен 2020 22:16 
Специалист
Специалист

Зарегистрирован:
19 ноя 2018 13:26
Сообщения: 45
Супер! Це саме те що мене цікавило. Вибачаюсь за свою наглість, але чи не могли б Ви допомогти мені із даним циклом щодо створення груп?


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 07 сен 2020 10:36 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
Код:
;перевірка відкритої карти
$AM=@ActivateMap
@if $AM=0 then @Break
;пошук параметра по айді
$ParamID=1
$Param=@Map.Parameters.FindByID $ParamID
@if $Param=0 then @Break
;у циклі по всім об'єктам перевіряємо значення параметра
;будуємо список усіх значень цього параметра
$MC=@Map.Count
$I=0
%LoopObj
$I=$I+1
$IsDel=@Map.Object[$I].Deleted
@if $IsDel=1 then @Goto %IgnoreEmpty
$Val=@Map.Object[$I].Parameter[$Param]
@if $Val= then @Goto %IgnoreEmpty
@Text[1].Add $Val
%IgnoreEmpty
@if $I<$MC then @Goto %LoopObj
;сортуємо список значень та видаляємо дублікати
@Text[1].Sort
$I=@Text[1].Count
$LastVal=@Text[1].Line[$I]
%LoopLine
$I=$I-1
$Val=@Text[1].Line[$I]
@if $Val=$LastVal then @Text[1].Delete $I
$LastVal=$Val
@if $I>1 then @Goto %LoopLine
;в циклі по кожному значенню зі списка створуємо відповідну групу
$LC=@Text[1].Count
$I=0
%LoopLine2
$I=$I+1
$Val=@Text[1].Line[$I]
@Map.DeselectAll
@Map.SelectByParameters 1|$Param=$Val
@Map.Selected.AddToGroup $Val
@if $I<$LC then @Goto %LoopLine2
;
@Map.DeselectAll
@Dialog.Message Створено груп: $LC


Вложения:
ParToGroup.dmf [1.59 Кб]
Скачиваний: 315

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

Зарегистрирован:
19 ноя 2018 13:26
Сообщения: 45
Велике ДЯКУЮ!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сбор параметров для линии
СообщениеДобавлено: 27 май 2021 12:35 
Специалист
Специалист

Зарегистрирован:
19 ноя 2018 13:26
Сообщения: 45
Всім доброго дня!
Зацікавило таке питання, чи можливо за допомогою скрипта присвоїти кожному лінійному об'єкту в масиві (групі) обє'ктів, відібраних за певним параметром, присвоїти значення параметра довгота/широта об'єкта дотичного до об'єкта іншого умовного слоя та довгота/широта найпівденнішого об'єкта (має вийти щось схоже на даний код: 485612302655083148561676265517541)
(це те чим зараз користуюся, але даний скрипт опрацьовує тільки цільні об'єкти)
%Events.OnChange,%Events.OnAdd,%Events.OnCollect,%Events.OnLayerChange
$EO=@EventObject
$PC=@Map.Object[$EO].Count
$BLCode1=@Map.Object[$EO].BLCode 1
$BLCode2=@Map.Object[$EO].BLCode $PC
$WC=@Map.Object[$EO].Parameter[ID7079]
@if $WC= then $WC=1
@Map.Object[$EO].Parameter[1] $BLCode1$BLCode2$WC
@Dialog.Message $BLCode1$BLCode2$WC
@Map.Selected.Refresh


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 109


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

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