Uso de Operações em LEGAL:

Veja como executar um programa em LEGAL

Veja sobre LEGAL no SPRING


Operações Pontuais

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:

Voltar ao Início


Operadores Matemáticos

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). 


O programa em LEGAL para fazer a operação acima é mostrado a seguir.

Outros exemplos de operações matemáticas são:

Voltar ao Início


Operadores de Transformação

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:

Voltar ao Início


Ponderação

Um exemplo de programa em LEGAL para realizar tal operação é mostrado a seguir.

O programa acima opera nos seguintes passos:

  1. Inicialmente, os planos de informação e a tabela de ponderação são definidos (três primeiras linhas do programa, não considerando as linhas comentário). A tabela de ponderação é criada, sendo definidos os pesos atribuídos à cada classe;
  2. A seguir, o mapa de solos a ser ponderado é recuperado, através da função Recupere. O plano de informação de saída é criado, através do operador Novo. O novo plano será criado como uma grade regular de resolução 30 x 30 metros, na escala 1:100.000 e valores máximo e mínimo;
  3. A operação de ponderação é realizada, através da função Pondere.

Voltar ao Início


Fatiamento

Voltar ao Início


Reclassificação

Exemplo de programa em LEGAL que executaria esta operação:

Voltar ao Início


Operadores Booleanos

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.

Voltar ao Início


Operador Condicional

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:

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


Operações de Vizinhança

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


Operações Zonais

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