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