Примеры скриптов на языке Lua

Печать Предыдущая страница Стартовая страница

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-- Простые примеры (в одном скрипте может вычисляться произвольное число значений):

-- Умножить площадь объекта на относительную высоту из семантики с кодом 1 и запомнить значение объема в

-- семантике с кодом 10 (коды зависят от классификатора карты)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

value = getSquare() * getCodeSem(1)

setCodeSem(10, value)

 

-- Если значение семантики с кодом 11 установлено, то умножить длину объекта на ширину из семантики с кодом 11 и

-- запомнить значение площади в семантике с кодом 12 (коды зависят от классификатора карты), например, для

-- определения площади покрытия дороги (линейный объект)

 

if getCodeSem(11, -1) ~= -1 then

 value = getLength() * getCodeSem(11)

 setCodeSem(12, value)

end

 

-- Сформировать строку из семантики 9 и имени слоя и записать в семантику 345. Если семантики 9 нет, то записать

-- вместо нее "No name"

 

value = getCodeSemStr(9, "No name").." - "..getLayerName()

setCodeSem(345, value);

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-- Пример скрипта для сбора статистики по выделенным объектам карты и вывода отчета в текстовый файл

-- Включает три функции с обязательными именами Start(), DoObject() и Stop()

-- Функции Start() и Stop()нужны для подготовки переменных и сохранения результата расчетов

-- Функция DoObject() вызывается на каждый объект

-- Если функции Start() или DoObject() нет в скрипте, то весь текст скрипта считается выполняемой функцией, как в

-- предыдущем примере

-- Функция Stop() может присутствовать в любом случае и вызывается после обработки всех выделенных объектов, если

-- она есть в скрипте

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

-- Функция Start() вызывается при открытии скрипта для инициализации глобальных переменных

function Start()

TypeA = 0

TypeB = 0

TypeC = 0

Total = 0;

File  = io.open("c:\\Report.txt", "w")

end

 

-- Функция Stop() вызывается перед закрытием скрипта для обобщения результата и формирование отчета

 

function Stop()

s = "Число обработанных объектов равно "..Total.."\n\r"

File:write(s)

p = 100 * TypeA / Total

s = "Число объектов типа А равно "..TypeA.."\t процент равен "..p.."\n\r"

File:write(s)

p = 100 * TypeB / Total

s = "Число объектов типа B равно "..TypeB.."\t процент равен "..p.."\n\r"

File:write(s)

p = 100 * TypeC / Total

s = "Число объектов типа C равно "..TypeC.."\t процент равен "..p.."\n\r"

File:write(s)

 

io.close(File)

end

 

-- Сбор статистики выполняется в основной части скрипта в функции DoObject(), если задана функция Start() для инициализации

function DoObject()

if getCodeSem(4) < 100 then TypeA = TypeA + 1;

 elseif getCodeSem(4) < 200 then TypeB = TypeB + 1;

  else TypeC = TypeC + 1; end

Total = Total + 1

end

 

-----------------------------------------------------------------------------------------------------------------------------------

-- Пример скрипта для обновления текстовой семантики и текста подписи

-----------------------------------------------------------------------------------------------------------------------------------

 

-- Запросить семантику с кодом 9 "Собственное название"

sem = getCodeSemStr(9, -1)

if sem ~= -1

then

-- Заменить строку "лет." на "летник"

if string.find(sem, "лет.") and string.len(sem) == 4 then

setCodeSem(9, "летник")

end

end

 

-- Это подпись?

if getLocal() ~= 3 then

return;

end

 

text = getText(0);

 

-- Заменить строку "лет." на "летник"

if string.find(text, "лет.") and string.len(text) == 4 then

setText(0, "летник")

end

 

-----------------------------------------------------------------------------------------------------------------------------------

-- Пример скрипта для формирования текстовой семантики в виде части строки другой семантики

-----------------------------------------------------------------------------------------------------------------------------------

sem = getCodeSemStr(9, -1)

if sem ~= -1

then

-- Заменить строку "38:13:000106:1708" на ":1708"

size = string.len(sem)

if size > 13 then

 val = string.sub(sem, 13)

 setCodeSem(1111, val)

end

end