Виникла ще одна цікава задача.
Отже помічаємо (наприклад @Map.SelectByParameters) певні об’єкти, що вдовольняють умовам функції.
Припустімо, що їх, об’єктів, декілька - наприклад чотири.
Маю бажання зробити цикл, почергово звертаючись до кожного з них.
Нумерація (ID) у них (результат @Map.Selected.List) “2 10 96 171” тобто певної послідовності не має.
Яким чином взяти послідовно номери результату ф-ції @Map.Selected.List для обробки в циклі ф-цією @Map.SelectObject?
Або підкажіть будь ласка інший метод послідовного звернення до виділених об’єктів.
Пробував результат @Map.Selected.List обробляти @StringPart та тип змінних вирівняти не вдалося.
;Отримали список помічених об’єктів (роздільник - перенос строки)
$SOL=@Map.Selected.List
;зняли помітку @Map.DeselectAll @Text[1].Text=$SOL
$I=0
$SC=@Text[1].Count
%Loop
$I=$I+1
$O=@Text[1].Line[$I] @Map.SelectObject $O
;
;Помічений лише один об’єкт з номером $O
;Додайте сюди код обробки
; @Map.DeselectAll @if $I<$SC then @Goto %Loop
Здравствуйте, есть тхт с очень большими количеством вот таких вот записей(между ФИО и кад номером знак табуляции) Бабіч Сергій Михайлович 0223972200050010573
Рожков Валентин Викторович 0223972200050010523; 0123982200050010524
Рожкова Галина Валентинівна 0223972200050010526; 0123982200050010527
Рожкова Ольга Федосіївна 0223972200050010576
Рожков Віктор Сергійович 0223972200050010564; 0123972200050010565
Рожков Роман Степанович 0223972200050010611
Рожкова Зінаїда Володимирівна 0223972200050010607 0123972200050010608
Рожков Микола Альбертович 0223972200050010551 022397220005001052 0223972200050010553 0223972200050010554
и есть еще участки с кадастровыми номерами без фамилий. Помогите скриптецом чтобы по кадастровым номерам фимилии в участки вписались. Если был бы вид фамилия-кадастровый номер я бы еще осилил, а так вид фамилия- n… кадастровых номеров сложновато. Очень очень буду признателен!
$Name=@Dialog.Ask Введіть прізвище (Вводимо Іванов)
$From=@Map.Selected.GetParameter ID7000520
$Path=/Proprietors/ProprietorInfo/Authentication/NaturalPerson/FullName/LastName
$Value=@XML.XPath $Path $From (маємо порожнечу, в яку необхідно вписати $Name)
Яким чином передати значення $Name та модифікувати «» в «Іванов» не формуючи щось на кшталт $Value=$Name. Тобто, звертаючись до тега ХМЛ, що має порожнє значення () вписувати значення тега та модифікувати його в такий, що містить значення.
Здається немає функції для “заповнення” ХМЛ по тегах, чи я помиляюся
Я робив саме через $Value=$Name , тобто формував в скрипті повне значення необхідного параметру і призначував його через @Map.Selected.ChangeParameter.
Записать обменник со своим именем все-таки удалось, но вот трабл с хмл тегами. $GRUR=@Map.Selected.GetParameter ID7000520
$Found=@XML.NodeCount /Proprietors/ProprietorInfo[1]/Authentication/LegalЕntity $GRUR
$URNM=@XML.XPath /Proprietors/ProprietorInfo[1]/Authentication/LegalЕntity/Name $GRUR
$GRLastName=@XML.XPath /Proprietors/ProprietorInfo[1]/Authentication/NaturalPerson/FullName/LastName $GRUR
что-то я понять не могу. есть заполненный тег ../LegalЕntity/Name но $Found=0, а $URNM=пустая строка. тут же вместо юр лица ввожу физ лицо и $GRLastName=Фамилия. почему с юр. лицами не дружит?
Прошу помощи, дигитал подвисает. Написал скрипт который сравнивая кадастровые номера присваивает земельному участку ФИО из списка. $C=@Map.SelCount @if $С=0 then @Break Выделите объекты
$N=0 @Text[1].Load D:\2.txt //список со строками вида ‘Гейван Георгій Засімович.0123982200:05:001:0571’
$SC=@Text[1].Count // число строк в списке
%Start
$N=@Map.NextSelected $N // перебираем обьекты по 1 @if $N=0 then @Break
$KAD=@Map.Selected.GetParameter ID106 //параметр с кадастровым номером вида ‘0123982200:05:001:0571’
$I=0
%Loop
$I=$I+1
$z=@Text[1].line[$I] //перебираем строки в списке
$NM=@StringPart 1.$z //имя землепользователя
$Kadin=@StringPart 2.$z //кадастровый номер @if $Kadin=$KAD then @Map.Object[$N].Parameter[ID20030] $NM //если находим совпадение по кад. номерам то в параметр 20030 записываем ФИО @if $I<$SC then @Goto %Loop @if $N<$C then @Goto %Start
строк в списке 3 тыс может дигитал не подвисает, а думаетб но что-то уж очень долго. (тренировался всего на 1 участке) txt и дмф прилагаю .dmf (17 KB) 2.txt (3.16 KB)
Допоможіть будь-ласка знайти функцію, якою можна було би перевірити полігон на предмет того, чи містить він вкраплені контури (вирізані методом “Сложный полигон”, наприклад).
Вроде все заработало , но только не могу понять как дополнить кодом, что если совпадение не найдено то строки которые не совпали записывались в отдельный txt.
Наскільки я зрозумів, масштабний коефіцієнт об’єкта, що був заданий при спеціальній вставці об’єкта в карту1 з карти3, зберігається в карті1.
Застосовувати функцію @Map.Object[$N].Scale 0 до всіх об’єктів карти1 і подальший запис змін в карті1 - означає втрату масштабного коефіцієнта для об’єктів, масштабні коефіцієнти яких не були рівними 0
Через це, приведення об’єктів, масштабний коефіцієнт яких не рівний 0, до первинного вигляду, можливе лише шляхом копіювання в буфер обміну з карти1 і спеціальної вставки при масштабному коефіцієнті 0.
Інше питання - розміщення цього об’єкта після такої вставки (відео SpecialPaste.exe)SpecialPaste.exe (817 KB)
Можна просити розробників добавити скриптову функцію @Map.Object[N].Type що повертала-б тип об’єкта, в тому числі якщо полігон - тип полігону (збірний чи складний).
Інакше - писати скрипта перебору всіх об’єктів полігонів з аналізом наявності розриву в координатах (збірний полігоний і складний полігон); розділити полігон; аналізувати на перекриття отримані після розділення полігони (якщо є перекриття - значить полігон складний, якщо немає перекриття - полігон збірний); якщо полігон складний - повторити створення складного полігону, якщо полігон збірний - відмінити розділення полігонів. Частина коду підійде звідси.
За відсутності функції @Map.Object[N].Type - мабуть, тільки так.
А я не можу зрозуміти, як у Вас все запрацювало
От трохи поправив$C=@Map.SelCount
@if $C=0 then @Break Выделите объекты
$N=0
;список со строками вида 'Гейван Георгій Засімович.0123982200:05:001:0571'
@Text[1].Load D:\2.txt
;число строк в списке
$SC=@Text[1].Count
%Start
;перебираем обьекты по 1
$N=@Map.NextSelected $N
@if $N=0 then @Goto %End
;параметр с кадастровым номером вида '0123982200:05:001:0571'
$KAD=@Map.Object[$N].Parameter[ID106]
$I=0
%Loop
$I=$I+1
@if $I>$SC @Goto %EndLoop
;перебираем строки в списке
$z=@Text[1].line[$I]
;имя землепользователя
$NM=@StringPart 1.$z
;кадастровый номер
$Kadin=@StringPart 2.$z
;если находим совпадение по кад. номерам то в параметр 20030 записываем ФИО
@if "$Kadin"="$KAD" then @Map.Object[$N].Parameter[ID20030]=$NM
@if "$Kadin"="$KAD" @Goto %Start
@Goto %Loop
%EndLoop
@Text[2].Add $KAD
@Goto %Start
%End
$CountText2=@Text[2].Count
@If $CountText2<>0 @Text[2].Save D:\NoPresent.txt
@If $CountText2<>0 then @Dialog.Message Не знайдено відповідності кадномера|Записано D:\NoPresent.txt else @Dialog.Message Знайдено всі відповідності кадномераПравда прийшлось перезберегти кодування текстового файла на: 1051 Ansi (кирилиця). Кадномери, що не знайшлися в текстовому файлі, записуються в D:\NoPresent.txt.
У Вас @if $С=0 then @Break Выделите объекты - кирилична літера.
не, ну в процессе я и $C подправил и в Ansi перекодил конечно, еще убрал “:”. вроде больше ничего не трогал. потестил на 20 участках все корректно было. @if “$Kadin”=“$KAD” @Goto %Start за эту строчку особенное спасибо, должно сократить время в моем скрипте, как я сам не догадался!? Да и вообще спасибо, что помогли! все понятно разжевали.