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

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

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

 

1. Умножить площадь объекта на относительную высоту из семантики с кодом 1 и запомнить значение объема в семантике с кодом 10 (коды зависят от классификатора карты).

 

value = getSquare() * getCodeSem(1)

setCodeSem(10, value)

 

2. Если значение семантики с кодом 11 установлено, то нужно умножить длину объекта на ширину из семантики с кодом 11 и запомнить значение площади в семантике с кодом 12 (коды зависят от классификатора карты). Например, для определения площади покрытия дороги (линейный объект).

 

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

 value = getLength() * getCodeSem(11)

 setCodeSem(12, value)

end

 

3. Сформировать строку из семантики 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

 

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

 

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

 

sem = getCodeSemStr(9, -1)

if sem ~= -1

then

 

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

 

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

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

end

end

 

3. Это подпись?

 

if getLocal() ~= 3 then

return;

end

 

text = getText(0);

 

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

 

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