Veja como executar um programa em LEGAL
Veja sobre LEGAL no SPRING
Operações pontuais envolvem posições equivalentes, localizadas em diferentes planos de informação. A maioria dos operadores envolvidos em expressões Imagem, Numéricas e Temáticas são pontuais, a saber:
Operadores matemáticos: : são os operadores aritméticos e as funções matemáticas aplicadas ponto a ponto sobre dados quantitativos; tais como as grades numéricas e as imagens
Operadores de transformação : os operadores de transformação (Reclassifique, Fatie e Pondere) implementam o mapeamento entre um plano Temático, Imagem ou Numérico de entrada e um plano Temático ou Numérico de saída. O valor de cada posição de entrada é definido por uma tabela (Reclassificação, Fatiamento ou Ponderacao) previamente definida.
Operadores booleanos : são definidos à partir de operadores de comparação (<, <=, ==, !=, >=, >) e dos operadores lógicos (&&, ||, !). Os operadores de comparação se baseam nas relações de ordem, aplicáveis a dados quantitativos (imagens, grades numéricas e atributos numéricos de objetos) as relações de igualdade são aplicáveis a dados tanto quantitativos qunto qualitativos (temáticos e atributos testuais de objetos). Os elementos comparados são os resultados da avaliação de operações pontuais descritas por expressões algébricas dos outros tipos descritos aqui. Os resultados podem assumir os valores VERDADEIRO ou FALSO.
Operadores Condicionais : uma expressão booleana é avaliada sobre cada posição pontual para decidir qual entre duas operações alternativas, descritas por expressões de um mesmo tipo, deve ser avaliada para a determinação do resultado final que deve ter o mesmo tipo das expressões alternativas.
Voltar ao Início
As operações matemáticas atuam somente sobre planos de informação da categoria NUMÉRICO e IMAGEM, incluindo:
Como exemplo de operação matemática, tome-se a figura a seguir, onde o plano da esquerda é um mapa de solos ponderado e o da direita é um mapa de declividade. Consideremos que desejamos computar um indicador de adequação de solos como a soma do valor atribuído ao solo com o inverso da declividade. A operação a seguir poderia ser utilizada como passo intermediário ao calcular um mapa de adequação de solos (quanto maior o valor, mais adequado).
aptidao = solos_pond + 1/decliv
O programa em LEGAL para fazer a operação acima é mostrado a seguir.
{
// Parte 1 - Declaração
Numerico solo_pond ("Solo_ponderado"),
decliv ("Declividade"),
aptidao ("AdequacaoNumerico");
// Parte 2 - Instanciação
decliv = Recupere(Nome = "Decliv94");
solo_pond = Recupere (Nome = "Solos94");
aptidao = Novo (Nome = "adequcao94", ResX=50, ResY=50,
Min=0, Max=2, Escala
= 50000);
// Parte 3 - Operacao
aptidao = solo_pond + 1/decliv;
}
Outros exemplos de operações matemáticas são:
LS = (0.00984*(decliv ^ 1.18)*(rampa ^ 0.63));
IV = (red / infrared) * 128;
radAVHRR4 = 0.155 * ima + 150;
tempAVHRR4 = 1.435*845.19/log(1+1.191 *10-5/radiancia);
Voltar ao Início
Os operadores de transformação realizam um mapeamento de valores definidos por variáveis temáticas e numéricas para valores que podem ser associados a outras variáveis numéricas ou temáticas, segundo mapeamento definido por tabelas de transformação de tipo específico, que pode ser Reclassificacao, Fatiamento e Ponderação. Tais tabelas, previamente declaradas e instanciadas atuam como argumentos para os operadores. :Na Legal existem três tipos de operadores de transformação implementadas.
Alguns exemplos de operadores de transformação:
* "Reclassificar um mapa de vegetação com as classes {Floresta Ombrófila Densa,
Floresta Ombrófila Aberta, Campinarana, Floresta Estacional} em um mapa com as classes
{Floresta Densa, Floresta Aberta}."
* "Obter um mapa hipsométrico a partir de um mapa de altimetria com o mapeamento {
(0-300m) - Planície, (300-500m) - Planalto, (>500m) - Serras}".
* "Quantizar uma imagem de satélite do infravermelho termal num mapa de temperaturas
a partir da equação Temp = 27*Imagem/100."
Voltar ao Início
Um operador de ponderação transforma um dado temático em um numérico, segundo a sintaxe:
Pondere (variável_ temática, tabela_ponderação)
A Figura abaixo mostra um exemplo do operador de ponderação (conversão de um mapa de solos em um mapa de solos ponderado). Neste caso, o plano de informação de entrada é um mapa de solos com as classes { Le, Li, Ls, Aq } e o de saída é um MNT cujos valores estão entre 0.0 e 1.0 e a operação de ponderação consiste na associação {(Le-0.60), (Li-0.20), (Ls-0.35), (Aq-0.10)}.

Exemplo de um operador de ponderação: se "SOLOpond" for uma variável do
modelo numérico, "SOLOS" do modelo temático e "ponderaSOLO" uma
tabela de ponderação, a sentença abaixo mostra sintaxe deste operador:
SOLOpond = Pondere (SOLOS, ponderaSOLO);
Um exemplo de programa em LEGAL para realizar tal operação é mostrado a seguir.
{
// Parte 1- Declaracao
Tematico SOLOS ("Solos");
Tabela ponderaSOLO (Ponderacao);
Numerico SOLOpond ("SoloPonderado");
// Definicao da Tabela de Pesos
ponderaSOLO = Novo (CategoriaIni = "Solos",
Le : 0.60, Li : 0.2, Ls : 0.35, Aq : 0.1);
// Parte 2 - Instanciacao do mapa de solos
SOLOS = Recupere (Nome = "SoloCE");
// Criacao do novo mapa de solos ponderado
SOLOpond = Novo (Nome = "solop", ResX = 30, ResY = 30,
Escala = 100000, Min = 0, Max = 1);
// Parte 3 - Operacao de Ponderacao
SOLOpond = Pondera (SOLOS, ponderaSOLO);
}
O programa acima opera nos seguintes passos:
Voltar ao Início
A operação de fatiamento transforma um plano de informação numérico em um temático, segundo a sintaxe:
Fatie (variável_ numérica, tabela_fatiamento)
A figura abaixo mostra um exemplo de uso do operador de fatiamento no qual um mapa de declividade em graus é convertido para um mapa de classes de declividade a partir da transformação:
| de 0 a 5% | "baixa" |
| de 5 a 15% | "media" |
| maior que 15% | "alta" |

Exemplo de programa em LEGAL que executaria esta operação:
{
// Parte 1 - Declaração
// Declaração de Variáveis
Tematico classes_decl ("Declividade");
Numerico decliv_num ("Declividade_Numerica");
Tabela tab_fatia (Fatiamento);
// Definicao da tabela de fatiamento
tab_fatia:= Novo ( CategoriaFim = "Declividade",
[0.0, 5.0] :
"Baixa",
[5.0, 15.0]:
"Media",
[15.0, 45.0]:
"Alta");
// Parte 2 - Instanciação
// Recuperação do PI de Declividade Numérica
decliv_num = Recupere (Nome = "Declive_SJC");
// Geracao do PI de saida
classes_decl = Novo (Nome = "Classes_Decl",
ResX
= 50, ResY = 50, Escala = 100000);
// Parte 3 - Operação
// Operação de Fatiamento
classes_decl = Fatie (decliv_num, tab_fatia);
}
O programa acima opera nos seguintes passos:
Voltar ao Início
A operação de reclassificação transforma um plano de informação temático em outro temático segundo a sintaxe:
Reclasasifique (variavel_tematica, tabela_reclassificacao)
Como exemplo, temos um mapa de cobertura do solo na Amazônia com diferentes classes {"Floresta Densa", "Floresta Várzea", "Rebrota", "Área Desmatada", "Cerrado"}. Este mapa temático será reclassificado para um novo mapa, apenas com as classes {"Floresta", "Desmatamento", "Cerrado"}.
Exemplo de programa em LEGAL que executaria esta operação:
{
// Parte 1 - Declaração
Tematico cobertura ("Floresta");
Tematico desmat ("Desmatamento");
Tabela tab_recl (Reclassificacao);
tab_recl= Novo(CategoriaIni = "Floresta",
CategoriaFim = "Desmatamento",
"FlorestaDensa" : "Floresta",
"FlorestaVarzea" : "Floresta",
"Rebrota" : "Desmatamento",
"AreaDesmatada" : "Desmatamento",
"Cerrado" : "Cerrado");
// Parte 2 - Instanciação
// Recuperação da variável
cobertura = Recupere (Nome = "Uso_JiParana");
// Criação do novo PI
desmat = Novo (Nome = "Desmat_JiParana", ResX= 30,
ResY = 30, Escala = 100000);
// Parte 3 - Operação
// Reclassificação
desmat= Reclassifique (cobertura, tab_recl);
}
Voltar ao Início
Operações booleanas são de grande utilidade em análise espacial qualitativa na geração de dados temáticos, a partir de regras aplicadas a dados de entrada de qualquer outro modelo (Temático, Numérico e Imagem). Entretanto, qualquer tipo de dado pode ser definido por expressões booleanas.
Não existe um tipo de dados previsto no modelo de dados Spring para representar explicitamente os resultados de operações booleanas, estas são tomadas como auxiliares na determinação de campos dos diversos modelos.
No exemplo abaixo, o operador "Atribua" é usado para determinar o plano "adequação", no qual as classes "inadequado" e "adequado", em função de expressões booleanas. Cada expressão booleana compõem-se de expressões de classe que envolvem a grade numérica de "Declividade" e o mapa temático "Solos".
Exemplo:
Como exemplo de uso de operações booleanas, considere a determinação de um mapa de aptidão agrícola, a partir dos mapas de solo, declividade, precipitação e do conjunto hipotético de regras expresso na tabela abaixo.
REGRAS PARA APTIDÃO AGRÍCOLA
| Aptidão Agrícola | Solos | Declividade |
|---|---|---|
| Boa | Latossolo Roxo | 0-3% |
| Média | Latossolo Vermelho-Amarelo | 3-8% |
| Inapto | Areia Quartzosa | >8% |
Em LEGAL, é necessário especificar um conjunto de condições a serem satisfeitas para
cada classe de saída, através do operador Atribua. No programa descrito
a seguir, um mapa de Aptidão Agrícola é determinado, com base na topografia e tipo de
solo.
{
Tematico solos ("Solos"),
aptidao ("Aptidao");
Numerico decliv ("Altimetria");
decliv = Recupere(Nome =
"Declividade");
solos = Recupere (Nome = "Mapa de
Solos");
aptidao = Novo (Nome = "AptidaoAgricola",
ResX=50, ResY=50, Escala = 50000);
aptidao= Atribua
{
"Boa" :
solo == "LatosoloRoxo" && decliv.>= O &&
decliv < 3" ),
"Media" :
solo == "LatosolVeAm" && decliv.>= 3 &&
decliv < 8" ),
"Inapto" :
Outros) };
}
Voltar ao Início
Uma expressão condicional baseia-se na avaliação de uma expressão booleana para decidir entre duas expressões alternativas de um mesmo tipo, que deve ser avaliada para obtenção do resultado final, segundo a sintaxe
expressao_booleana ? expressao1 : expressão2
Exemplo:
Restrição de uma imagem TM a uma região descrita por expressão booleana:
{
// Exemplo de como Mascarar uma Imagem
Imagem tm5, tm5M ("Imagens-TM");
Tematico masc ("Fazendas");
tm5 = Recupere(Nome = "Banda-5");
masc = Recupere (Nome = "Mapa_Fazendas");
tm5M = Novo(Nome="Imagem_Fazendas", ResX=100, ResY=100);
// Operacao
tm5M = masc == "Fazendas-Gado" ?
tm5 : Imagem(255) ;
}
O programa acima recorta (mascara) a imagem de satélite "tm5, apenas nas regiões onde existe a classe "Fazenda-Gado" do plano de informação "Fazendas".
Como as expressões alternativas devem ser de tipo Imagem neste caso, o valor 255 deve ser "maqueado" como uma imagem. Ao ser instanciada a variável tm5M pelo operador Novo, um novo plano de informação foi efetivamente criado, contendo uma imagem "em branco", isto é, com valor 255 associado a cada um de seus pixels, isso nos oferece uma alternativa para a operação do programa acima dada pela expressão:
tm5M = ( masc == "Fazendas-Gado" ) ? tm5 : tm5M ;
Na verdade as expressões do tipo Imagem usadas como alternativas do exemplo acima são as mais simples possíveis, consistindo de apenas nomes de variáveis ou números. Expressões mais complexas poderiam ser usadas, considere, por exemplo a obtencao não apenas de um simples recorte das regiões de fazendas de gado, mas sim de uma imagem contendo os índices de vegetação em tais imagens. A operação seria similar a:
ivdn = ( masc == "Fazendas-Gado" ) ? ( tm3 - tm4 ) / ( tm3 + tm4 ) : ivdn ;
Novas expressões condicionais podem ser usadas também como expressões alternativas, permitindo a definição de uma vasta classe de operações, no exemplo acima poderíamos estar interessados em Fazendas-Gado de todos os estados da região sul e Fazendas-Agricolas da região norte do pais, representados em um mapa temático de regiões do Brasill. A operação poderia ser descrita de uma maneira similar a:
ivdn = ( masc == "Fazendas-Gado" ) ? ( tm3 - tm4 ) / ( tm3 + tm4 ) :
( regiao == "Sul" ) ? Imagem ( 128 ) : Imagem ( 255 ) ;
Voltar ao Início
Em Legal é possível realizar muitas operações com base no acesso, e envolvimento em operações, das posições vizinhas à cada posição de uma representação matricial que se deseja caracterizar. São referenciadas por um par de coordenadas relativas, que indica valores de deslocamento em termos de número de linhas e colunas. Por exemplo:
variavel [i, j]
Os índices i e j referem-se ao deslocamento relativo à cada posição numa representação matricial, em termos do numero de linhas e colunas. Podem ser aplicados a qualquer variável associada a planos matriciais envolvidos em uma expressão pontual genérica.
No exemplo abaixo uma grade numérica é gerada, e a cada posição é atribuído o valor 1, sempre que alguma, entre as posições vizinhas (acima, abaixo, à esquerda ou à direita), numa grade numérica de Altitudes, for de maior valor.
Exemplo:
{
Numerico descen, altitude ("Altimetria");
altitude = Recupere (Nome = "Altitudes");
descen = Novo (Nome="Descendentes", ResX=25, ResY=25, Escala=100000, Min=0, Max=255) ;
descen = altitude < altitude[1,1] || altitude < altitude[1,0] || altitude < altitude[1,-1] || altitude < altitude[0,1] ? 1 : 0 ;
}
A posição de referência a cada passo da geração do resultado, corresponde à posição de índices "[0,0]", que é normalmente expressa sem índices, como pode ser observado no exemplo acima (ondel a variável "altitude" aparece sem índices).
Voltar ao Início
Atributos de dados do modelo Objeto podem ser envolvidos em expressões da linguagem, graças ao mecanismo adotado para representar sua distribuição, baseado no conceito de mapa cadastral. Mapas cadastrais oferecem suporte à representação de objetos em diferentes escalas, e são categorizados no ambiente Spring através do modelo Cadastral. Os elementos de um tal mapa são dados sob a forma de polígonos, linhas e pontos que podem estar associados a objetos de interesse, de uma maneira semelhante à que define um plano de informação qualquer.
A principal finalidade associada às expressões envolvendo objetos cadastrais, está relacionada a seu uso junto à classe de operadores Zonais, o operador Espacialize, o operador Atualize e o FatieAtributo, que atuam sobre atributos de Objetos.
O operador FatieAtributo mapeia, através de uma tabela de Fatiamento, os valores associados a algum atributo numérico de Objetos associados à um mapa de categoria Cadastral e cuja representação no Spring é sempre vetorial. O operador Espacialize permite a geração de mapas temáticos ou de grades numéricas a partir de atributos numéricos ou textuais de objetos cadastrais.
Os operadores Zonais efetuam sumarizações de valores resultantes da avaliação de expressões temáticas, numéricas, imagens e booleanas.envolvendo um ou mais planos de informação, sobre regiões delimitadas por zonas dadas por expressões booleanas ou por mapas cadastrais. Tais sumarizações correspondem a estatísticas simples, tais como: Maioria, Maximo, Media, Variedade etc. O operador Atualize mapeia valores resultantes de operadores zonais, em atributos de objetos cadastrais, permitindo a extração de resultados sob a forma de atributos em tabelas de bancos de dados.
No exemplo abaixo, o atributo "DECLIVE" do objeto "Quadras" é atualizado à partir de valores médios obtidos através de valores de declividade fornecidos pela grade numérica "Declividade", sobre as zonas definidas pelos polígonos de um mapa cadastral, associadas às instâncias do objeto.
Exemplos:
{
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 );
}
O mesmo efeito do programa acima pode ser obtido através do operador Atualiza combinado com o de MediaZonal
{
...
zonas. "DECLIVE" = Atualize (decliv, zonas OnMap cad, MediaZonal);
}
Voltar ao Início