Примеры скриптов на языке 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 |