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

Сбор параметров для линии
https://geosystema.net/forum/viewtopic.php?f=1&t=19787
Страница 2 из 2

Автор:  Руслан Пархуць [ 12 май 2020 15:24 ]
Заголовок сообщения:  Re: Сбор параметров для линии

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


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

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


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

Автор:  Denys Sanitskyi [ 12 май 2020 16:14 ]
Заголовок сообщения:  Re: Сбор параметров для линии

Руслан Пархуць писал(а):
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)?;
- чи можливо залишити лінії в первісному вигляді, тобто не змінюючи їх скриптом?.

Автор:  Руслан Пархуць [ 12 май 2020 20:05 ]
Заголовок сообщения:  Re: Сбор параметров для линии

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

Автор:  Denys Sanitskyi [ 13 май 2020 10:04 ]
Заголовок сообщения:  Re: Сбор параметров для линии

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


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

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

Автор:  Руслан Пархуць [ 13 май 2020 17:31 ]
Заголовок сообщения:  Re: Сбор параметров для линии

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 Кб]
Скачиваний: 368
Logo.bmp
Logo.bmp [ 52.3 Кб | Просмотров: 8950 ]

Автор:  Denys Sanitskyi [ 14 май 2020 08:40 ]
Заголовок сообщения:  Re: Сбор параметров для линии

Руслан Пархуць писал(а):
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.


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

Автор:  Denys Sanitskyi [ 03 сен 2020 19:11 ]
Заголовок сообщения:  Re: Сбор параметров для линии

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

Автор:  fendak [ 04 сен 2020 22:03 ]
Заголовок сообщения:  Re: Сбор параметров для линии

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

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

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

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

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

Автор:  Denys Sanitskyi [ 06 сен 2020 22:16 ]
Заголовок сообщения:  Re: Сбор параметров для линии

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

Автор:  Dmitry_Zolotar [ 07 сен 2020 10:36 ]
Заголовок сообщения:  Re: Сбор параметров для линии

Код:
;перевірка відкритої карти
$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 Кб]
Скачиваний: 323

Автор:  Denys Sanitskyi [ 07 сен 2020 10:58 ]
Заголовок сообщения:  Re: Сбор параметров для линии

Велике ДЯКУЮ!

Автор:  Denys Sanitskyi [ 27 май 2021 12:35 ]
Заголовок сообщения:  Re: Сбор параметров для линии

Всім доброго дня!
Зацікавило таке питання, чи можливо за допомогою скрипта присвоїти кожному лінійному об'єкту в масиві (групі) обє'ктів, відібраних за певним параметром, присвоїти значення параметра довгота/широта об'єкта дотичного до об'єкта іншого умовного слоя та довгота/широта найпівденнішого об'єкта (має вийти щось схоже на даний код: 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

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