Programação em LEGAL
Estrutura de um Programa em LEGAL
Diagramas Sintáticos
Palavras Reservadas em LEGAL:
Veja como executar um programa em
LEGAL
Consulte
também:
Modelagem Numérica
Processamento de Imagens
Análise p/ Suporte à Decisão
(AHP).
Operações de Análise
Geográfica.
Veja como editar e executar um programa em
LEGAL.
Esta págima apresenta os procedimentos necessários para a definição de operações sobre dados representados em um projeto de um banco de dados Spring, sob a forma de expressões "algébricas" dos tipos: Tematico, Numérico, Imagem, Cadastrais, Objetos e Reais, definidas pelo usuário através da inguagem LEGAL - Linguagem Espacial para Geoprocessamento Algébrico.
Em uma álgebra de mapas, operações podem ser descritas segundo expressões similares às utilizadas na matemática para a descrição de operações aritméticas e booleanas, exeto pelo fato de envolverem representações de dados espaciais ao invés de números..Uma linguagem para definir tais expressões algébricas deve ipermitir a descrição de operações locais, focais e zonais.
Operações locais são as que caracterizam cada posição de uma área de trabalho vista sob uma dada resolução espacial, em função de valores associados a posições equivalentes em uma ou mais representações de dados sobre a mesma área.
Operações focais, ou de vizinhança, na verdade não são explicitamente previstas na linguagem, podendo ser definida uma classe significativa de tais operações, através de um mecanismo de acesso a posições vizinhas de cada posição focal integrado às expressões que descrevem operações locais.
Operações zonais, resultam na avaliação de estatísticas simples sobre valores definidos por operações pontuais e distribuidos por zonas dadas através de feições vetoriais (polígonos, linhas e pontos) ou por regiões definidas através de operações booleanas.
A linguagem LEGAL é fortemente baseada no modelo de dados Spring. Os operadores atuam sobre representações de dados dos modelos Numérico (grades regulares), Imagem, Temático, Cadastral e Objeto. Os modelos Objeto e Cadastral são complementares, e essencialmente permitem a espacialização de atributos de tabelas de bancos de dados sob a forma de mapas cadastrais. A coerência entre modelo de dados e operadores é considerada na interpretação de sentenças da linguagem, garantindo um maior controle semântico na definição de modelos espaciais. Mensagens de erro de sintaxe e execução ajudam o usuário na construção de programas.
Um programa em LEGAL consiste de uma sequência de operações descritas por sentenças organizadas segundo regras gramaticais, envolvendo operadores, funções e dados espaciais, categorizados segundo o modelo de dados Spring, e representados em planos de informação e mapas cadastrais de um mesmo bancode dados / projeto Spring. Planos das categorias Numérico e Imagem correspondem a representações em formato matricial. A maioria dos operadores sobre planos do modelo Temático também faz uso de representações matriciais. Mapas do modelo Cadastral, que representam espacialmente dados do modelo Objeto, fazem uso de representações no formato vetorial.
Voltar ao Indice
Um programa em LEGAL é constituído de uma lista de sentenças que descreve um procedimento, isto é, um conjunto de ações sobre dados espaciais, que faça sentido no contexto de alguma disciplina de Sistemas de Informação Geográfica. Tais sentenças em LEGAL são estruturadas em quatro grupos:
- Declarações de variáveis:
- Instanciações: de variáveis:
- Operações da álgebra de mapas:
- Comandos de controle
As declarações definem variáveis que serão associadas aos dados fornecidos ou produzidos num programa. Uma variável consiste de um nome, que é então associado a um modelo e uma categoria que irão caracterizar os planos de informação,.mapas cadastrais, objetos ou tabelas de transformação que possam ser por ela representados ao longo de um programa.
Nas intanciações, variáveis são efetivamente associadas a planos de informação, objetos, mapas cadastrais ou tabelas de transformação. Correspondem à uma operação de recuperação de dados já existentes no banco de dados, ou de criação de um novo dado representado em algum plano de informação ou mapa cadastral.
Operações correspondem à aplicação de um ou mais operadores ou funções sobre variáveis declaradas e instanciadas previamente; são descritas por expressões algébricas, segundo regras gramaticais que permitem a definição recursiva de operações complexas à partir de outras mais simples, com base nas propriedades dos dados e operadores envolvido.Cada sentença envolvendo que defina uma operação, descreve uma operação de atribuição, que consiste de atribuir o resultado da avaliação de uma expressão algébrica a uma variável previamente definida de uma programa.
Os Comandos de controle permitem permitem o controle do fluxo de processamento de um programa, não são algébricas por si só. Entretanto são fundamentais para a modelagem de situações que envolvam a execução alternativa, condicional ou repetitiva de conjuntos de operações.
Voltar ao Indice
Cada sentença em Legal pode envolver símbolos (por exemplo, ‘{‘, ‘(‘, ‘;’, ‘,’); operadores (por exemplo, ‘+’, ‘*’, ‘&&’, ‘||’ , ‘<‘, ‘<=‘, ‘!=‘); palavras reservadas (Novo, Tematico, Nome, ResX, Atribua etc); nomes de variáveis (solos, veg, atitudes, ind_verde etc); nomes de ítens de um banco de dados Spring (planos de informação, mapas cadastrais, categorias, geoclasses, atributos etc)
A descrição de sentenças, sob a forma de diagramas sintáticos procura indicar, através das setas, os possíveis caminhos para compor sentenças válidas em LEGAL. Nesses diagramas as palavras em negrito com inicial Maiúsculo, indicam palavras reservadas de uso mandatório, da linguagem; as palavras em minúsculos indicam nomes de variáveis; as palavras entre aspas indicam nomes de ítens do banco de dados, finalmente, as palavras em itálico indicam itens sintáticos que serão descritos por um diagrama à parte.
O item programa corresponde ao seguinte diagrama sintático:

O diagrama na figura acima indica que um programa em LEGAL inicia-se por um '{' , pode ter várias sentenças dos tipos declarações, instanciações e operações, terminadas por ';' e encerra-se com um '}'.
Exemplo:
Para ilustrar, veja a seguir um exemplo simples: um programa para determinar uma grade regular de índices de vegetação, calculados, para cada posição da grade, a partir de imagens correspondentes às bandas 3 e 4 do sensor LANDSAT TM, dado pela expressão.
ivdn = (banda 4 - banda 3)/(banda4 + banda3).
O Objetivo aqui é ilustrar com um exemplo simples as preocupações típicas ao representar uma expressão como acima em LEGAL.
É preciso declarar algumas variáveis que irão representar, para o programa, cada uma das imagens LANDSAT envolvidas (dados de entrada), bem como uma variável para representar a grade resultante (dado de saída).
Assim, é necessário definir tres variáveis, por exemplo: banda3, banda4 e ivdn. As duas primeiras serão associadas à uma categoria do modelo Imagem, por exemplo, "Landsat_TM" , enquanto a terceira será associada a uma categoria do modelo Numérico, por exemplo, "Indices". As categorias entre "aspas" devem estar definidos no modelo de dados do BD Spring ativo.
Assim chegamos às declarações:
Imagem banda3, banda4 ("Landsat_TM");
Numerico ivdn ("Indices");
É preciso instanciar as variáveis, isto é, associa-las a planos de informação do projeto Spring, contendo as representações a serem efetivamente envolvidas em operações "algébricas". Para o nosso exemplo é preciso:
O operador Recupere é usado para associar um plano de informação existente a uma variável, enquanto o operador Novo implica na criação de um novo plano de informação, a ser associado à variável.
Assim, chegamos às instanciações:
banda3 = Recupere (Nome = "TM3" );
banda4 = Recupere (Nome = "TM4" );
ivdn = Novo (Nome = "IVDN", ResX = 30, ResY = 30 );
Observe que alguns parâmetros além do nome devem ser informados no caso da criação de novos planos através da linguagem..
Finalmente, são definidas as operações, envolvendo as variáveis previamente declaradas e instanciadas. Isto significa descrever com base em regras sintáticas as expressões que traduzem as operações que se deseja avaliar. As expressões aritméticas sobre dados espaciais satisfazem as mesmas regras quanto a prioridades e propriedades que suas análogas para domínios escalares, isto é:
- A multiplicação e divisão têm prioridade de execução com relação à soma e subtração;
- A introdução de parenteses ('(' e ')') permite alterar a ordem natural de prioridades.
- Propriedades como a associatividade, comutatividade e distribuitividade dos operadores aritméticos e booleanos usuais se extendem naturalmente para domínios espaciais.
Assim chegamos à operação:
ivdn = Numérico ((banda4 - banda3) / (banda4 + banda3));
O termo Numérico aqui indica que os resultados obtidos através da uma expressão envolvendo imagens devem ser entendidos como valores a serem armazenados em uma grade regular, afim de permitir a representação de números reais, e não apenas inteiros como é o caso dos valores armazenados em uma imagem.
O programa completo em LEGAL teria as seguintes linhas:
{
Imagem banda3, banda4 ("Landsat_TM");
Numerico ivdn ("Indices");
banda3 = Recupere (Nome="TM3");
banda4 = Recupere (Nome="TM4");
ivdn = Novo (Nome = "IVDN", ResX = 30, ResY = 30, Escala = 100000, Min = 0, Max = 1 );
ivdn = Numerico ( ( banda4 - banda3 ) / ( banda4 + banda3 ) ) ;
}
Voltar ao Índice
Uma declaração consiste da definição de variáveis que serão associadas aos planos de informação, mapas cadastrais, objetos, tabelas de transformação e valores reais envolvidos em um programa em LEGAL.
Uma variável: pode ser de modelo Temático, Numérico, Imagem; Cadastral e Objeto. Existem ainda as de tipos auxiliares, associadas a Tabela, declaradas de modo similar aos outros, e as associado a números Reais, que essencialmente não precisam ser declaradas.
As variáveis dos modelos Temático, Numérico e Imagem são frequentemente referidas por variáveis de campo e correspondem ao conceito de campo adotado no modelo de dados Spring referente a dados com extensão espacial. De uma certa forma, o modelo Cadastral pode ser visto também assim, embora tenha como finalidade principal oferecer um suporte para extensão espacial de objetos.
O modelo Objeto pode ser usado em operações envolvendo campos, através da associação entre objetos e feições vetoriais representadas em um mapa cadastral (pontos, linhas e polígonos). Entretanto é possível definir uma extensa classe de expressões algébricas envolvendo apenas objetos e seus atributos, sem nenhuma associação espacial com mapas.
A declaração de uma variável consiste em associar seu nome a um modelo e categoria do banco de dados Spring ativo..A partir daí essa variável poderá ser associada a planos de informação, mapas cadastrais ou objetos, da categoria e modelo especificados.
Sintaxe:
O primeiro termo indica o modelo de dados a ser associado à variável, o nome_variável será seu identificador para todo o programa. O nome_categoria, entre aspas e parênteses, indica a categoria no banco de dados ativo associada às representações (campos) instanciadas à variável ao longo de um programa.
Exemplos:
Tematico solo("Solos"), geo("Geologia");
Numerico alti1 ("Altimetria");
Imagem banda3, banda4 ("LandSat");
Objeto obj ("Estados");
Cadastral cad ("DivisaoEstadual");
Variáveis do tipo Tabelas de Transformação são usadas para definir operações baseadas no mapeamento entre campos de diferentes categorias do modelo de dados Spring (Tematico-Tematico, Numerico-Tematico e Tematico-Numerico). Na declaração de variáveis tabelas de transformação o termo Tabela é seguido de um nome da variável e de um termo indicando o tipo de transformação - Reclassificacao, Fatiamento ou Ponderacao - As categorias e valores que definem o mapeamento serão estabelecidos na fase de instanciação de variáveis_tabelas.
Sintaxe:
Exemplos:
Tabela fatias (Fatiamento), pesos (Ponderaao);
Tabela reclass (Reclassificacao);
Voltar ao Índice
A instanciação consiste da associação efetiva de planos de informação a variáveis dos modelos Tematico, Numerico e Imagem; ou mapas cadastris a variáveis do modelo Cadastral, ou ainda tabelas de transformação a variáveis Tabela previamente declaradas.
Variáveis do modelo Objeto, não estão associadas a representações espaciais por si, são apenas declaradas, os atributos de objetos são referidos explicitamente pelo nome do atributo como definido no modelo de dados do banco Spring ativo.
Também no caso de variáveis Reais, não existe uma representação espacial envolvida, a declaração e instanciação se confundem, isto é, a simples atribuição de algum valor real a um nome de variável, que não tenha sido declarado anteriormente, define uma tal variável.
Através do operador Novo, novos planos de informação ou tabelas são criados e associados a variáveis previamente declaradas. A associação de variáveis a planos de informação e mapas cadastrais previamente criados, é feita através do operador Recupere.
A criação, através do operador Novo, de um plano de informação associado à uma variável de modelo Temático, Numérico ou Imagem, exige o fornecimento de alguns parâmetros, além do nome, conforme o modelo de campo, a saber:
| Nome | Plano de informação a ser associado à uma variável |
| ResX e ResY | Resolução sob a qual um plano será considerado em operações |
| Escala | Escala para planos temáticos e numéricos. Se omitido, o valor 1 é assumido |
| Min e Max | Faixa de valores estimados para uma grade numérica a ser criada |
| Repres | Representação a ser considerada. Pode assumir os valores Matriz ou Vetor. Se omitido, o valor Matriz será considerado |
| Nbits | Número de bits para pixels de imagens. Se omitido, o valor 8 sera considerado. |
| Interpolador | Modo de interpolaçcão para geração de grades ou imagens. Pode assumir os valores Vizinho ou Bilinear. Se omitido, o valor Bilinear é assumido |
Observe que não é prevista a criação de dados do modelo Cadastral, eles são apenas recuperados, nenhuma operação prevista na linguagem resulta em um novo mapa cadastral.
Sintaxe:
Para a instanciação de uma variável através do operador Recupere, deve ser indicado o termo Nome seguido do nome do plano de informação ou mapa cadastral existente no projeto ativo (indicados no Painel de Controle do Spring).
O tipo de representação quando omitido é entendido como Matriz para planos de informação, e Vetor para mapas cadastrais. Algumas operações sobre planos de informação temáticos podem fazer uso da representação vetorial, nesse caso, o termo Repres = Vetor deve ser indicado explicitamente.
Os parâmetros Min e Max consistem de estimativas feitas pelo usuário sobre a faixa de valores prevista para uma grade numérica definida pelo operador Novo. Entrretanto, ao final das operações que resultam nessa grade, os valores mínimo e máximo efetivamente encontrados serão registrados no plano de informação correspondente. Para grade numéricas e imagens, pode-se ainda informar o tipo de interpolação a ser adotado quando existir diferença entre a resolução de uma nova grade ou imagem e a resolução de planos envolvidos em sua criação. Assim, o termo Vizinho irá indicar o modo de interpolação por vizinho mais próximo e o termo Bilinear indica uma interpolação bilinear. No caso de planos temáticos envolvidos em operações a interpolação por vizinho mais próximo será sempre adotada.
NOTA: Variáveis de campo instanciadas pelo operador Recupere, podem também ser usadas para armazenar resultados de operações de atribuição, nesse caso as posições de um plano são simplesmente alteradas com relação a um estado anterior do dado.
Exemplos:
tema = Recupere (Nome = "baciashidrograficas");
alti = Recupere (Nome = "CotasAltimetricas");
ima = Recupere (Nome = "TM4");
solo = Novo (Nome = "Solos_A", ResX=50, ResY=50, Escala=100000, Repres = Vetor);
alt1 = Novo (Nome = "Altimetria", ResX=50, ResY=50, Escala = 1000, Min=0, Max=100);
ima = Novo (Nome = "ImagemTM_Res", ResX=30, ResY=30);
ima = Novo (Nome = "ImagemTM_Res", ResX=30, ResY=30, Nbits = 16);
alt2 = Novo (Nome = "Altimetria", ResX=50, ResY=50, Escala = 1000, Min=0, Max=100, Interpolador = Vizinho);
No caso de instanciação de uma variável do tipo Tabela, são utilizadas as palavras chaves: CategoriaIni e CategoriaFim, para ndicar a(s) categoria(s) temática(s) envolvidas num operador de transformação. São três os tipos de tranformação implementados na linguagem:
Reclassificação, Ponderação e Fatiamento.
Na Reclassificação duas categorias temáticas (inicial e final) devem ser fornecidas; na Ponderação apenas a categoria temática de entrada, cujas classes serão ponderadas deve ser indicada e no Fatiamento deve ser indicada a categoria temática de saída.
Sintaxe:
Exemplos:
Tabela de Reclassificacao:
Uma tabela de Reclssificacao descreve o mapeamento entre classes de duas categorias temáticas, associadas às entradas CategoriaIni e CategoriaFim.
grupo = Novo ( CategoriaIni = "Vegetacao", CategoriaFim = "Vegetacao",
"Da" : "FlorestaAluvial",
"Db", "Ds1", "Ds2", "Ds4", "Dm" : "Florestabrofila",
"sd", "sp", "sA" : "Savanas",
"Pfm", "Pa", "Pah" : "FmPioneiras",
"Ap" : "Floresfila" ) ;
Tabela de Fatiamento:
Uma tabela de Fatiamento indica o mapeamento entre intervalos de valores numéricos e classes temáticas de uma certa categoria temática associada à entrada CategoriaFim.
grupo = Novo ( CategoriaFim = "Vegetacao",
[0.0, 0.2] : "Floresta",
[0.2, 0.45] , [0.8, 1.0] : "Mata_galeria",
[0.45, 0.8] : "Cerrado" ) ;
Tabela de Ponderacao:
Uma tabela de Ponderação descreve o mapeamento entre classes de uma categoria temática, associada à palavra chave CategoriaIni, e valores numéricos que definem pesos a serem associados a cada classe.
ponde1 = Novo ( CategoriaIni = "Vegetacao",
"Floresta" : 0.2,
"Mata_galeria", "Mata" : 0.43,
"Cerrado" : 0.456 );
Como visto na seção sobre declarações, a simples atribuição de valores numéricos inteiros ou ponto flutuante a um nome de variável, que não tenha sido usado anteriormente, define uma variável de tipo Real. que poderá ser usada em expressões envolvendo dados de domínios Numéricos, Imagem, e Reais.
Sintaxe:

Exemplos:
pi =
3.1416 ;
r =
pi
;
e =
2.1478
;
Voltar ao Índice
Após a declaração e instanciação de variáveis segue-se a definição das operações validas sobre elas. Operações são sequencias de um ou mais operadores sobre dados associados às variáveis declaradas e instanciadas previamente no programa. São descritas por expressões algébricas da linguagem
Uma sentença que descreve operações em LEGAL, corresponde à uma expressão de atribuição, na qual o resultado da avaliação de uma expressão algébrica é atribuido à uma variável previamente definida e instanciada.
sintaxe:

Em função do modelo de dados resultante, tais expressões podem ser classificadas em: expressões temáticas, numéricas, imagens, reais e objeto.
As expressões_zonais, têm também seu resultados atribuídos a variáveis dos modelos Temático, Numérico, Objetos e Reais. Entretanto, ainda não existem regras gramaticais na linguagem que permitam o sua participação em expressões algébricas mais complexas, envolvendo outros operadores da linguagem, em uma mesma sentença. Este é também o caso dos operadores Espacialize e FatieAtributo..Tais expressões serão consideradas juntas, no grupo das expressões zonais.
Nas expressões_objeto, os objetos são tratados de modo independente de qualquer associação a mapas cadastrais. Isso oferece alguns recursos para a manipulação de atributos de um mesmo objeto, de uma maneira não espacial. Toda a funcionalidade válida para dados quantitativos e qualitativos está disponível para essa classe de expressões, sempre que os tipos de atributos envolvidos sejam consistentes com os operadores utilizados.
As expressões_reais envolvem números e variáveis reais e toda funcionalidade de operadores e funções matemáticas disponíveis para dados quantitativos, podem ser usadas em operações não espaciais como no caso das expressões objetos, mas, principalmente, podem também participar de expressões mais complexas envolvendo campos quantitativos.
Talvez a mais significativa classe de operações
disponível seja a das expressões_booleanas.
Seus resultados nunca são atribuidos a variáveis de
qualquer tipo. São expressões
auxiliares que permitem a definição de regiões a
partir de comparações entre
resultados de expressões dos outros tipos.
sintaxe:

Todos os operadores envolvidos em expressões dos tipos associados a campos (Temáticos, Imagens e Numéricos), bem como as expressões Booleanas, pertencem à classe dos operadores Locais. Entre eles estão os operadores aritméticos ‘+’, ‘-’, ‘*’, ‘/’e ‘^’, as funções matemáticas (sin, cos, asin, acos, atan, log, log10, exp, sqrt etc.), as transformações por tabelas (Fatie, Pondere e Reclassifique), os operadores booleanos (&&, ||, |, !, >, >=, ==, !=, <=, <) o operador condicional ('?'), o de atribuição condicional (Atribua) e outros definidos na linguagem. Tais operadores atuam sobre cada um dos elementos de representações matriciais de imagens, mapas temáticos ou grades numéricas.
Uma extensa classe de operações de Vizinhança, podem ser implementadas em LEGAL à partir da referência explícita aos elementos vizinhos a cada posição, num percorrimento pontual, como nas operações locais. Tal estratégia de posicionamento relativo consiste de indicar um valor de deslocamento, em termos do número de linhas e de colunas, relativo a cada posição caracterizada, de modo que elementos vizinhos, em um ou mais planos envolvidos em uma expressão algébrica, possam ser considerados na caracterização de cada posição resultante.
Assim, se uma variável aparece em uma expressão algébrica de forma indexada: ( por ex.: variavel [i, j] ), isso indica que o valor a ser considerado em sua avaliação refere-se ao da posição dada pelo deslocamento de ‘i’ linhas e ‘j’colunas relativas a cada posição percorrida para obtenção do resultado ponto a ponto.
As operações Zonais permitem a avaliação de estatísticas simples (maioria, media, maximo, etc) sobre valores definidos por expressões aritméticas ou booleanas envolvendo campos (Temáticos, Numéricos ou Imagens) distribuídos sobre zonas definidas explicitamente por feições lineares (polígonos, linhas e pontos) de mapas cadastrais, ou implicitamente por expressões booleanas envolvendo variáveis de campos.
Zonas rdevem ser entendidas como regiões disjuntas que recobrem uma área de estudo, por exemplo: os temas de um mapa temático, as faixas de altitudes em uma grade altimétrica, os municípios em um mapa cadastral de divisão municipal, as regiões cujo tipo de solo dado por um mapa de solos coincidem com certas faixas de declividade dadas por um mapa de declividades, etc.
Voltar ao Índice
As expressões Reais são definidas sobre constantes e variáveis reais (unidimensonais), como na aritmética usual e segundo suas regras usuais de formação de expressões e prioridades de operadores. Tais expressões podem ser vistas como auxiliares, já que o objetivo central da linguagem é trabalhar com dados espaciais. Os conceitos associados à variáveis e constantes unidimensionais serão extensivoss ao de variáveis e contantes espaciais associadas aos domínios do modelo de dados Spring, e constituem o principal fundamento para a construção da linguagem LEGAL
A descrição sintática das expressões reais dada pelo diagrama abaixo, será útil neste texto também para ilustrar melhor o uso de diagramas sintáticos.
Sintaxe:
O item sintático principal, aqui é definido por expressão_real; os símbolos +, -, *, /, ^, representam operadores aritméticos; os parênteses, ( e ), permitem a alteração de prioridades entre operadores de uma expressão; numero e variavel_real, representam operandos, que podem ser números ou nomes de variáveis e constantes que representam números; o item função_matemática corresponde a nomes de funções matemáticas disponíveis:
| sin, cos, tan | funções trigonométricas em radianos |
| asin, acos, atan | funções trigonométricas inversas |
| log, log10 | funções logarítmicas na base e e na base 10 |
| exp | exponencial na base e |
| sqrt | raiz quadrada |
| int | parte inteira de um número |
| abs | valor absoluto |
| rand | valor aleatório |
Exemplos:
(A+B)^2 ...........................................o quadrado da soma de duas variáveis:
Sejam A e B, duas variáveis reais previamente definidas, observe a sequência de passos para formação da expressão algébrica acima com base nas regras sintáticas:
- A segunda regra implica que, isoladamente, A e B são expressões_reais;
- A terceira regra implica que a soma A + B é uma expressão_real;
- A quinta regra, implica que (A+B) é uma expressão_real;
- A primeira regra implica que o número 2 é uma expressão_real;
- A terceira regra implica que (A+B)^2 é uma expressão_real..
Voltar ao Índice
As expressões do tipo Imagem envolvem valores inteiros, tipicamente entre 0 e 255 (imagens de 8 bits), valores fora dessa faixa serão substituídos pelo extremo mais próximo. O diagrama abaixo mostra as opções para variáveis que envolvam expressões de imagens.
Sintaxe:

Expressões dos tipos Real, Numerico e Tematico podem ser entendidas como imagens desde que se use o operador Imagem, como mostram as regras 5, 6 e 7. Um dado temático é normalmente entendido como qualitativo, os valores pontuais representam classes temáticas (geoclasses), identificadas por seus nomes de geoclasse. Entretanto, cada geoclasse, como pode-se observar na interface "Modelo de Dados", está associada também a um número inteiro, o seu índice da geoclasse. Esse valor será considerado pelo operador Imagem, ao trata-lo como uma imagem.
O resultado da avaliação de uma expressão_condicional_imagem depende da avaliação de uma expressão_booleana que aparece antes do sinal "?". Uma expressão_booleana, como será visto mais adiante, pode resultar em dois possíveis valores: VERDADEIRO ou FALSO. Se o resultado for VERDADEIRO, a ação indicada pela expressão_imagem1 que antecede do sinal ":" fornecerá o resultado, caso contrário a expressão_imagem2 que segue-se ao sinal ":" fornecerá o resultado.
Exemplos de expressões Imagem::
ima1 = Imagem(grade1);
ima3 = ima2 + 20;
res_ima1 = abs(sen(ima1)- 255);
Voltar ao Índice
As expressões do tipo Numérico envolvem valores reais dentro de uma faixa de valores definida pelos valores associados às palavras chaves Min e Max; valores fora dessa faixa são associados a valores "nulos", isto é sem informação. O diagrama abaixo mostra as opções para variáveis que envolvam expressões de imagens.
Sintaxe:

Expressões dos tipos Real e Imagem podem ser entendidas como grades numéricas desde que se use o operador Numerico, como mostram as regras 7 e 8.
O resultado da avaliação de uma expressão_condicional_numérica depende da avaliação da expressão_booleana que aparece antes do sinal "?", e. que pode resultar em dois possíveis valores: VERDADEIRO ou FALSO. Se o resultado da expressão booleana for VERDADEIRO, a ação indicada pela expressão_numerica1 que antecede do sinal ":" fornecerá o resultado final, caso contrário a expressão_numerica2, que segue-se ao sinal ":", fornecerá o resultado.
Exemplos de expressões Numéricas:
Voltar ao Índice
No caso das expressões de tipo Tematico, os operadores aritméticos perdem o sentido, já que os valores encontrados nos elementos de sua representação indicam geoclasses e não valores reais. Assim as expressões possíveis são aquelas que envolvem valores de geoclasses, tais como as transformações baseadas em tabelas e atribuição condicional.
Sintaxe:
Qualquer palavra pode ser entendida como um nome de geoclasse desde que se use o operador Temático ou Classe, como mostram as regras 3 e 4. Um dado temático é normalmente entendido como qualitativo, os valores pontuais representam classes temáticas (geoclasses), identificadas por seus nomes de geoclasse, de modo que tais nomes são os próprios "valores" representados. Entretanto, é possivel "maquear" os valores inteiros de uma imagem, vistos como índices de geo-classes, para geo-classes, como indica a regra 5.
Expressões boleanas, como será visto mais adiante, ao serem avaliadas, podem resultar em dois possíveis valores: VERDADEIRO ou FALSO.
O resultado da avaliação do operador Atribua depende da avaliação pontual de expressões_booleanas associadas à classes temáticas. A primeira delas que resultar em um valor VERDADEIRO irá determinar a classe a ser tomada como resultado final.
O resultado da avaliação de uma expressão_condicional_temática depende da avaliação da expressão_booleana que aparece antes do sinal "?". Se o resultado da expressão_booleana for VERDADEIRO, a ação indicada pela expressão_tematica1 que antecede do sinal ":" fornecerá o resultado final, caso contrário a expressão_temática2, que segue-se ao sinal ":", fornecerá o resultado.
Exemplo de expressões temáticas:
Voltar ao Índice
Uma expressão booleana descreve o conjunto de posições que satisfazem um mesmo critério de pertinência, dado pela combinação de expressões dos tipos anteriores através dos operadores de comparação:
<
menor
<=
menor ou igual
>
maior
>=
maior ou igual
==
igual
!=
desigual
e dos operadores lógicos:
&&
E-lógico (intercessão)
||
OU-lógico (união)
|
OU-exclusivo (união disjunta)
! ou ~
NAO-lógico (complemento)
Sintaxe:
As expressões de comparação e as booleanas são auxiliares, não sendo possível atribuir seus resultados a variáveis. Entretanto, elas oferecem um modo eficiente de descrever condições envolvendo atributos espaciais (ou não, no caso das expressões_objeto) resultantes da avaliação de expressões sobre campos, objetos e reais, sem a necessidade de gerar resultados binários intermediários.O resultado da avaliação de uma expressão booleana pode assumir um entre os valores: VERDADEIRO ou FALSO.
No caso de expressões_comparação envolvendo expressões_temáticas ou expressões_objeto envolvendo atributos de tipo texto, apenas os operadores locais de igualdade (==) e desigualdade (!=) fazem sentido, para todas as outras, todos os operadores de comparação ( > , >= , <= , < ) podem ser utilizados.
Voltar ao Índice
Nesse grupo de operações destacam-se as estatísticas simples como: maioria, variedade, máximo, soma, media etc. Tais operadores consistem-se de sumarizações sobre conjuntos de valores oriundos de um certo plano, que estejam contidos em zonas definidas por outros planos ou mapas cadastrais.
Quando o resultado de uma expressão_zonal é atribuído à uma variável_temática, sempre que as zonas envolvidas forem definidas por uma expressão_cadastral, o resultado deverá ser um plano temático de representação vetorial. Assim, na instanciação dessa variável, o parâmetro Repres = Vetor deve ser indicado.
Exemplos:
Cadastral cad ("Divisao Municipios") ;
Tematico tem ("Temas Municipais") ;
Objeto obj ("Municipios") ;
tem = Novo (Nome = "Municipais", ResX = 100, ResY =100, Escala = 100000, Repres = Vetor) ;
tem = Espacialize (obj ."ATIVIDADE" NoMapa cad) ;
Em um caso como este, é necessário que existam pré-definidas, no modelo de dados, a categoria temática "Temas Municipais" e as associadas a ela e as geo-classes de nomes idênticos aos dos valores textuais do atributo "ATIVIDADE".
Cadastral cad ("Divisao Municipios") ;
Tematico tem ("Temas Municipais") ;
Tematico veg ("Vegetacao") ;
Objeto obj ("Municipios") ;
veg = Recupere (Nome = "Mapa de Vegetacaoo") ;
tem = Novo (Nome = "ClassesMunicipais", ResX = 100, ResY =100, Escala = 100000, Repres = Vetor);
tem = MaioriaZonal (veg , obj NoMapa cad) ;
Objeto zonas ("Quadras");
Cadastral cad ("Cad_Urbano");
Numerico decliv ("Altimetria");
cad = Recupere (Nome = "Mapa_quadras");
decliv = Recupere (Nome = "Declividade");
zonas. "DECLIVE" = MediaZonal ( decliv, zonas OnMap cad );
Voltar ao Índice
As expressões do tipo Objeto envolvem valores oriundos de atributos de um mesmo objeto, os resultados das operações assim definidas devem ser armazenados sob a forma de atributos, prèviamente definidos, do mesmo objeto. Aqui as possiveis associações de objetos a mapas cadastrais não são levadas em conta; como em uma planilha, as colunas são envolvidas em operações afim de gerar valores para outras colunas . Dito de outra forma, são operações entre colunas de uma mesma tabela que representa o objeto.
Assim como as expressões_reais, as expressões_objeto, por envolverem apenas valores escalares que caracterizam atributos em tabelas de bancos de dados convencionais, também são não-espaciais, isto e' não envolvem planos de informação ou mapas cadastrais. Além disso, diferentemente daquelas, tais valores não podem ser "maqueados" para representar implìcitamente dasos de outros modelos no Spring.
Sintaxe:

O resultado da avaliação de uma expressão_condicional_objeto depende da avaliação da expressão_booleana que aparece antes do sinal "?". A expressão_booleana, neste caso poderá envolver apenas expressões-objeto e/ou expressões_reais, podendo resultar em dois possíveis valores: VERDADEIRO ou FALSO. Se o resultado for VERDADEIRO, a ação indicada pela expressão_objeto que antecede do sinal ":" fornecerá o resultado, caso contrário a expressão_objeto que segue-se ao sinal ":" fornecerá o resultado.
Exemplos de expressões objeto::
estado."Previsão" = estado."Atual" * estado."Taxa_anual" ;
estado."Previsão" = estado."Desempenho" > 50 ? estado."Atual" * estado."Taxa_anual" : estado."Atual" ;
Voltar ao Índice
Constituem uma classe de operadores que pemitem o controle do fluxo de execução de um programa em LEGAL, o que pode ser feito com base em alguma condição dada por uma expressão booleana, ou à partir do controle do número de iterações a que deve ser submetido um certo grupo de operações algébricas em um programa qualquer, de maneira explícita ou tambem de por alguma condição booleana. Eses comandos são baseados em constructos da linguagem tais como:
As condições referidas acima são dadas por uma expressão_booleana envolvendo apenas expressões_ reais, isto significa que são condições baseadas em valores escalares, tipicamente por nariáveis_reais que devem funcionar como contadores de passos e que são alteradas explicitamente a cada passo Por exemplo:
{
...
n = 0 ;
Enquanto (n < 10)
{
operação_1 ;
operação_2 ;
...
n = n + 1 ;
} ;
...
}
Apenas o operador Enquanto está disponível na versão atual do Spring/LEGAL.
No comando Se...Senão... o resultado da avaliação de uma expressão_booleana (VERDADEIRO ou FALSO) irá determinar qual entre duas sequencias de operações deve ser processada.
No comando Enquanto... uma sequencia de operações deve ser executada repetidas vezes até que a avaliação da condição dada por uma expressão_booleana resulte VERDADEIRO.
sintaxe:

Exemplos:
{
Tematico densidade, dens, den ("Densidade_Populacional");
densidade = Recupere (Nome="DensPop");
dens = Novo (Nome = "EvolucaoDensPop", ResX=30, ResY=30, Escala = 100000 ) ;
den = Novo (Nome = "Den2", ResX=30, ResY=30, Escala = 100000 ) ;
den = densidade ;
n=0;
While n < 10
{
dens = den ;
//Primeira regra:
//Posições de densidade média, com dois vizinhos de densidade média e um de alta tendem a
//tornar-se de alta densidade.
dens == Classe ("Media") &&
( (den[-1,-1] == Classe("Media") && den[1,0] == Classe("Alta") && den[-1,1] == Classe("Media")) ||
(den[-1,1] == Classe( "Media") && den[0,-1] == Classe("Alta") && den[1,1] == Classe("Media")) ||
(den[1,1] == Classe("Media") && den[-1,0] == Classe("Alta") && den[1,-1] == Classe("Media")) ||
(den[1,-1] == Classe("Media") && den[0,1] == Classe("Alta") && den[-1,-1] == Classe("Media")) ) ?
Classe("Alta") :
//Segunda regra:
//Posições de densidade média, com dois vizinhos de densidade média te um de baixa endem a
//manter a densidade.
dens == Classe ("Media") &&
( (den[-1,-1] == Classe("Media") && den[1,0] == Classe("Baixa") && den[-1,1] == Classe("Media")) ||
(den[-1,1] == Classe( "Media") && den[0,-1] == Classe("Baixa") && den[1,1] == Classe("Media")) ||
(den[1,1] == Classe("Media") && den[-1,0] == Classe("Baixa") && den[1,-1] == Classe("Media")) ||
(den[1,-1] == Classe("Media") && den[0,1] == Classe("Alta") && den[-1,-1] == Classe("Media")) ) ?
Classe("Baixa") :
//Terceira regra:
//Posições de densidade média, com um vizinhos de densidade média, um de densidade alta e um de
//densidade baixa tendem a manter a densidade.
dens == Classe ("Media") &&
( (den[-1,-1] == Classe("Alta") && den[1,0] == Classe("Media") && den[-1,1] == Classe("Baixa")) ||
(den[-1,1] == Classe( "Alta") && den[0,-1] == Classe("Media") && den[1,1] == Classe("Baixa")) ||
(den[1,1] == Classe("Alta") && den[-1,0] == Classe("Media") && den[1,-1] == Classe("Baixa")) ||
(den[1,-1] == Classe("Alta") && den[0,1] == Classe("Media") && den[-1,-1] == Classe("Baixa")) ) ?
Classe("Media") : den ; //Fim da operação condicional
n = n+1;
};
}
O exemplo acima é fictício, muitas diferentes regras poderiam ser definidas afim de determinar o comportamento dinâmico da evolução do crescimento (ou decrescimento) da concentração populacional, com base nas vizinhanças imediatas de cada posição de um plano de informação. Ao final de cada iteração (ou passo) a variável_real "n" é incrementada e ao início do passo seguinte, o valor de "n" é comparado afim de determinar a continuidade ou não da sequencia de operações definidas no ambito do comando While.
Observe que afim de preservar a informação original contida no plano de informação "DensPop", foram criadas duas cópias dele. Uma delas é atualizada apos cada iteração, servindo de base para a iteração seguinte.
Esse exemplo ilustra também o uso de indexação relativa na definição de operações de vizinhança.
Voltar ao Índice