Головна » Файли » Готові скрипти

Додавання точок з файлу
13.04.2025, 01:23

Скрипт додає точки такого вигляду

Код скрипту (мова програми має бути українською, бо інакше деякі команди не працюватимуть):



; Створюємо нову чисту пусту карту
popTemplate | <Чистий>
;
; === 1. СТВОРЕННЯ ПАРАМЕТРІВ ===
;
; Додаємо параметр з ID 100101 типу "рядок" для зберігання назви точки
@Map.Parameters.Add 100101 5 Назва
; Задаємо атрибути параметра "Назва пікета":
;   шрифт Times New Roman, розмір 4, курсив, червоний колір (255), білий фон
@Map.Parameters.SetAttributes id100101 0 5 0 1 1 16777215 0 Times_New_Roman 40 2 255
;
; Додаємо параметр з ID 100102 типу "рядок" для зберігання коду точки (наприклад, тип місцевості)
@Map.Parameters.Add 100102 5 Код
; Задаємо атрибути параметра "Код пікета":
;   шрифт Times New Roman, розмір 4, синій колір (16711680)
@Map.Parameters.SetAttributes id100102 0 5 0 1 1 16777215 0 Times_New_Roman 40 0 16711680
;
; Змінюємо атрибути системного параметра висоти (ID -2):
;   шрифт Times New Roman, розмір 4, курсив, чорний
@Map.Parameters.SetAttributes -2 0 5 0 1 1 16777215 0 Times_New_Roman 40 2 0
;
; === 2. ВИЗНАЧЕННЯ РОЗДІЛЬНИКА ТОЧОК ===
;

; Готуємо символ роздільника для рядка (знак пробілу)
$Space=@Calc Char(9)
$Space=@DequoteText $Space

;
; Готуємо символ роздільника для рядка (знак табуляції)
$Tab=@Calc Char(32)
$Tab=@DequoteText $Tab

;
; Шукаємо позицію кожного можливого роздільника
$posComma=@StringPos ,|$LineTest
$posSpace=@StringPos $Space|$LineTest
$posTab=@StringPos $Tab|$LineTest

;
; Встановлюємо значення 100 для порівняння (якщо символ не знайдено)
@if $posComma=0 then $posComma=100
@if $posSpace=0 then $posSpace=100
@if $posTab=0 then $posTab=100

;
; Визначаємо найменшу позицію (тобто перший знайдений символ)
@if ($posComma<$posSpace) and ($posComma<$posTab) then $Sep=,
@If ($posSpace<$posComma) and ($posSpace<$posTab) then $Sep=$Space
@If ($posTab<$posComma) and ($posTab<$posSpace) then $Sep=$Tab


; === 3. ДОДАВАННЯ НА КАРТУ ПОТРІБНОГО ШАРУ ===
; Перевіряємо, чи взагалі є відкриті карти
$CountMap=@MapCount
; Якщо немає жодної карти — створюємо нову
@If $CountMap=0 then @FileNew Нова карта
; Перевіряємо, чи існує на карті шар з ID ID28
$FindByID=@Map.Layers.FindByID ID28
; Якщо такий шар вже є — переходимо до наступного етапу (%Next)
@If $FindByID<>0 then @Goto %Next
; Якщо шару немає — відкриваємо стандартну карту m (де є цей шар)
@FileNew m
; Додаємо тимчасову точку в шар ID28 (щоб зберегти його в буфер)
$N=@Map.NewObject ID28
@Map.Object[$N].Point[1] 100 100 0
; Копіюємо весь вміст карти
@Map.SelectAll
@Map.Copy
; Закриваємо стандартну карту
@CloseMap m
; Вставляємо скопійований шар у поточну карту
@Map.Paste
; Оновлюємо вікно карти
@Window.Refresh
; Вибираємо вставлений шар
@Map.SelectLayer ID28
; Видаляємо тимчасовий об'єкт, який ми створили (він вже не потрібен)
@Map.Selected.Delete
; Мітка для переходу після вставлення шару
%Next
;
; Призначаємо параметри (назва, код, висота) як активні для шару ID28
@Map.Layers.SetValidParameters ID28 id100101 id100102 -2
;
; === 4. ВИБІР ТЕКСТОВОГО ФАЙЛУ ===
;
; Готуємо символ роздільника для маски файлу (;)
$Char=@Calc Char(59)
$Char=@DequoteText $Char
; Відкриваємо діалог вибору текстового файлу з пікетами
$FileName=@Dialog.OpenFile *.txt$Char*.dat
; Якщо файл не вибрано — зупиняємо скрипт
@if $FileName= then @Break Не вибрано файл
;
; Завантажуємо вміст файлу в текстовий буфер
@Text[1].Load $FileName
;
; Зчитуємо кількість рядків у файлі
$Count=@Text[1].Count
; Якщо рядків немає — зупиняємо скрипт
@if $Count=0 then @Break У файлі нема жодного рядка
;
; === 5. ДОДАВАННЯ ПІКЕТІВ ===
; Початкове значення лічильника циклу
$I=0
;
%Start
; Збільшуємо лічильник на 1
$I=$I+1
;
; Зчитуємо поточний рядок із файлу
$Line=@Text[1].Line[$I]
;
; Витягуємо назву точки
$Name=@StringPart 1,$Line
; Витягуємо координату X
$X=@StringPart 2,$Line
; Витягуємо координату Y
$Y=@StringPart 3,$Line
; Витягуємо висоту точки
$H=@StringPart 4,$Line
; Витягуємо код точки
$Code=@StringPart 5,$Line
;
; Створюємо новий об’єкт у шарі ID28
$Obj=@Map.NewObject ID28
;
; Встановлюємо координати точки (включно з висотою)
@Map.Object[$Obj].Point[1] $X $Y $H
;
; Присвоюємо параметру "Назва" відповідне значення
@Map.Object[$Obj].Parameter[id100101]=$Name
;
; Присвоюємо параметру "Код" відповідне значення
@Map.Object[$Obj].Parameter[id100102]=$Code
;
; Оновлюємо об'єкт на карті
@Map.RefreshObject $Obj
;
; Якщо ще є рядки — повторюємо цикл
@If $I<$Count then @Goto %Start
;
; Масштабуємо карту до масштабу 1:500
@Map.Scale 500
;
; === 6. ВИНЕСЕННЯ ПІДПИСІВ ===
; Знімаємо виділення з усіх об’єктів
@Map.DeselectAll
; Виділяємо всі об’єкти в шарі ID28
@Map.SelectLayer ID28
; Виносимо підписи: назва точки (згідно атрибутів параметра id100101)
@Map.Selected.CreateCaptions id100101 1 2 0 1 2.5 1.5
; Виносимо підписи: відмітка (системний параметр -2)
@Map.Selected.CreateCaptions -2 1 2 0 1 2.5 0
; Виносимо підписи: код точки (параметр id100102)
@Map.Selected.CreateCaptions id100102 1 2 0 1 2.5 -1.2
;
; Відображаємо всі об’єкти на карті
Вигляд | Показати всі
; Знімаємо виділення з усіх об’єктів
@Map.DeselectAll
;
; Показуємо фінальне повідомлення про завершення
@Dialog.InfoBox 3000 Готово! Додано $Count точок

Сам файл *.dat або *txt, який експортований з плиладу, має мати такий формат (роздільником колонок може бути кома, пробіл або знак табуляції:
Pt20,5339464.11,2257108.21,245.78,кж
Pt21,5339564.11,2257108.21,255.78,кн
Pt22,5339664.11,2257108.21,265.78,стовп
Pt23,5339764.11,2257108.21,275.78,пк

 

Щодо точок, в яких є накладки підписів, щоб на бавитися з кожною, пересовуючи по кожній точці окремо три підписи, можна вручну виділити тільки ті точки, в яких треба змінити підписи і використати ось такий скрипт:
 

; Виносимо підписи: назва точки (згідно атрибутів параметра id100101)

@Map.Selected.RemoveCaptions id100101

@Map.Selected.CreateCaptions id100101 1 2 0 1 -2.5 1.5

; Виносимо підписи: відмітка (системний параметр -2)

@Map.Selected.RemoveCaptions -2

@Map.Selected.CreateCaptions -2 1 2 0 1 -2.7 0

; Виносимо підписи: код точки (параметр id100102)

@Map.Selected.RemoveCaptions id100102

@Map.Selected.CreateCaptions id100102 1 2 0 1 -2.5 -1.2

 

(створіть собі другу окрему кнопку)

Таким чином в даних точках підписи будуть з лівої сторони замість правої.

Категорія: Готові скрипти | Додав: Микола
Переглядів: 160 | Завантажень: 0 | Рейтинг: 5.0/1
Всього коментарів: 0
avatar