LEGAL

Esta págima describe el lenguaje de programación LEGAL - Lenguaje Espacial para Geoprocesamiento Algébrico, los siguientes tópicos serán abordados:


Programación en LEGAL
Estructura de un Programa en LEGAL
Diagramas Sintácticos

Palabras Reservadas  en LEGAL:

Vea como ejecutar un programa en LEGAL


Consulte también:
Modelaje Numérico
Procesamiento de Imágenes
Análisis p/ Soporte para Decisión (AHP).
Operaciones de Análisis Geográfica.


Programación en LEGAL - Álgebra de Mapas


Vea como editar y ejecutar un programa en LEGAL.

Esta página presenta los procedimientos necesarios para la definición de operaciones sobre datos representados en un proyecto de un banco de datos SPRING, sobre la forma de expresiones "algebraicas" de los tipos: Temático, Numérico, Imagen, Cadastral, Objetos y Reales, definidas por el usuário a través del lenguaje LEGAL - Lenguaje Especial para Geoprocesamiento Algébrico.

En una álgebra de mapas, las operaciones pueden ser descritas según expresiones similares a las utilizadas en matemática para la descripción de operaciones aritméticas y booleanas, excepto por el hecho de envolver representaciones de datos espaciales en vez de números. Un  lenguaje para definir tales expresiones algebraicas debe permitir la descripción de operaciones locales, focales y zonales.

Operaciones locales son las que caracterizan cada posición de una área de trabajo vista sobre una resolución espacial dada, en función de valores asociados a posiciones equivalentes a una o más representaciones de datos sobre la misma área.

Operaciones focales, el de vecindad, en realidad no son explicitamente previstas en el lenguaje, pudiendo ser definida una clase significativa de tales operaciones, a través de un mecanismo de acceso a posiciones vecinas de cada posición focal integrado a expresiones que describen operaciones locales.

Operaciones zonales, resultan de la evaluación de estadísticas simples sobre valores definidos por operaciones puntuales y distribuidas por zonas dadas a través de formas vectoriales (polígonos, líneas y puntos) o por regiiones definidas a través de operaciones booleanas.

El lenguaje LEGAL es fuertemente basado en el modelo de datos SPRING. Los operadores actuan sobre representaciones de datos de los modelos Numérico (rejillas regulares), Imagen, temático, Cadastral y Objeto. Los modelos Objeto y Cadastral son complementarios, y esencialmente permiten la espacialización de atributos de tablas de bancos de datos sobre la forma de mapas cadastrales. La coherencia entre modelo de datos y operadores es considerada una interpretación de sentencias del lenguaje, garantizando un mayor control semántico en la definición de modelos espaciales. Mensajes de error de sintaxis y ejecución ayudan al usuário en la construción de programas.

Un programa en LEGAL consiste en una secuencia de operaciones descritas por sentencias organizadas según reglas gramaticales, envolviendo operadores, funciones y datos espaciales, categorizados según el modelo de datos SPRING, y representados en planos de información y mapas cadastrales de un mismo banco de datos / proyecto SPRING. Planos de las categorías Numérico y Imagen corresponden a representaciones en formato matricial. La mayoría de los operadores sobre planos del modelo temático también hacen uso de representaciones matriciales. Mapas del modelo Cadastral, que representan espacialmente datos del modelo Objeto hacen uso de representaciones en el formato vectoríal.

Volver al Indice


Estructura de un Programa en LEGAL

Un programa en LEGAL se constituye de una lista de sentencias que desciben un procedimiento, es decir, un conjunto de acciones sobre datos espaciales, que tenga sentido en el contexto de alguna disciplina de Sistemas de Información Geográfica. Tales sentencias en LEGAL son estructuradas en cuatro grupos:

Las declaraciones definen variables que serán asociadas a los datos creados o producidos en un programa. Una variable consiste en un nombre, que es entonces asociado a un modelo y una categoría que irán a caracterizar los planos de información, mapas cadastrales, objetos o tablas de transformación que puedan ser por ellos representados a lo largo de un programa.

En las intanciaciones, las variables son efectivamente asociadas a planos de información, objetos, mapas cadastrales o tablas de transformación. Correspdonden a una operación de recuperación de datos ya existentes en el banco de datos, el de creación de un nuevo dato representado en algún plano de información o mapa cadastral.

Operaciones corresponden a la aplicación de un o más operadores o funciones sobre variables declaradas y instanciadas previamente; que son descritas por expresiones algebraicas, según reglas gramaticales que permiten la definición recursiva de operaciones complejas a partir de otras más simples, con base en las propiedades de los datos y operadores incluidos. Cada sentencia que defina una operación, describe una operación de atribución, que consiste en atribuir el resultado de la evaliación de una expresión algébraica a una variable previamente definida de un programa.

Los Comandos de control permiten el control de flujo de procesamiento de un programa, no son algébraicos por si solos. Aunque son fundamentales para el modelaje de situaciones que impliquen la ejecución alternativa, condicional o repetitiva de conjuntos de operaciones.

Volver al Indice


Diagramas Sintácticos

Cada sentencia en Legal puede incluir símbolos (por ejemplo, ‘{‘, ‘(‘, ‘;’, ‘,’); operadores (por ejemplo, ‘+’, ‘*’, ‘&&’, ‘||’ , ‘<‘, ‘<=‘, ‘!=‘); palabras reservadas (Nuevo, Temático, Nombre, ResX, Atribuya etc); nombres de variables (solos, veg, altitudes, ind_verde etc); nombres de elementos de un banco de datos SPRING (planos de información, mapas cadastrales, categorías, geoclases, atributos etc)

La descripción de sentencias, sobre la forma de diagramas sintácticos procura indicar, a través de las flechas, los posibles caminos para componer sentencias válidas en LEGAL. En esos diagramas, las palabras en negrita con inicial Mayúscula, indican palabras reservadas de uso obligatorio del lenguaje; las palabras en minúsculas indican nombres de variables; las palabras entre comillas indican nombres de elementos del banco de datos, finalmente, las palabras en itálica indican elementos sintáticos que serán descritos por un diagrama a parte.

El elemento programa corresponde al siguiente diagrama sintáctico:

El diagrama en la figura superior indica un programa en LEGAL  se inicia por un '{' , puede tener varias sentencias de los tipos declaraciones, instanciaciones y operaciones, terminadas por ';' y se encierra con un '}'.

ejemplo:

Para ilustrar, vea a continuación un ejemplo simple: un  programa para determinar una rejilla regular de índices de vegetación, calculados, para cada posición da rejilla, a partir de imágenes correspondientes a las bandas 3 y 4 del sensor LANDSAT TM, dado por la expresión.

        ivdn = (banda 4 - banda 3)/(banda4 + banda3).

El Objetivo aquí es ilustrar con un ejemplo simple las preocupaciones típicas al representar una expresión como superior en LEGAL.

Es preciso declarar algunas variables que irán a representar, para el programa, cada una de las imágenes LANDSAT implicadas (datos de entrada), bien como una variable para representar la rejilla resultante (dato de salida).

Así, es necesario definir  tres variables, por ejemplo: banda3, banda4  y ivdn. Las dos primeras serán asociadas a una categoría del modelo Imagen, por ejemplo, "Landsat_TM" , mientras la tercera será asociada a una categoría del modelo Numérico, por ejemplo, "Indices". Las categorías entre "comillas" deben estar definidas en el modelo de datos del BD SPRING activo.

Así llegamos a las declaraciones:

Imagen banda3, banda4 ("Landsat_TM");
Numerico ivdn ("Indices");

Es preciso  instanciar las variables, es decir, asociarlas a planos de información del proyecto SPRING, conteniendo las representaciones a ser efectivamente envolvidas en operaciones "algebraicas". Para nuestro ejemplo es preciso:

  1. asociar las variables banda3 y banda4 a  imágenes existentes en planos de información, de nombres, por ejemplo:"TM3" y "TM4", a través del operador Recupere.
  2. asociar la variable  ivdn, a través del operador Nuevo, a un plano de información, de nombre, por ejemplo: "IVDN", que será creado para almacenar el resultado de la operación.

El operador Recupere es usado para asociar un plano de información existente a una variable, mientras el operador Nuevo implica en la creación de un nuevo plano de información ser asociado a la variable.

Así, llegamos a las instanciaciones:

banda3 = Recupere (Nombre = "TM3" );
banda4 = Recupere (Nombre = "TM4" );
ivdn = Nuevo (Nombre = "IVDN", ResX = 30, ResY = 30 );

Observe que algunos parámetros además del nombre deben ser informados en el caso de la creación de nuevos planos a través del lenguaje..

Finalmente, son definidas las operaciones, implicando las variables previamente declaradas y instanciadas. Esto significa describir en base a reglas sintácticas las expresiones que traducen las operaciones que se desea evaluar. Las expresiones aritméticas sobre datos espaciales satisfacen las mismas reglas cuanto a prioridades y propriedades que sus análogas para domínios escalares, es decir:

  1. La multiplicación y división tiene prioridad de ejecución con relación a la suma y resta;
  2. La introdución de paréntesis ('(' y ')') permite alterar el orden natural de prioridades.
  3. Propiedades como la asociatividad, commutatividad e distributividad de los operadores aritméticos y booleanos usuales se extiende naturalmente para domínios espaciales.

Así llegamos a la operación:

ivdn = Numérico ((banda4 - banda3) / (banda4 + banda3));

El término Numérico aquí indica que los resultados obtenidos a través de una expresión que incluye imágenes deben ser entendidos como valores a ser almacenados en una rejilla regular, con el fin de permitir la representación de números reales, y no apenas enteros como es el caso de los valores almacenados en una imagen.

El programa completo en LEGAL tendría las siguientes líneas:

{
        Imagen banda3, banda4 ("Landsat_TM");
        Numerico ivdn ("Indices");
        banda3 = Recupere (Nombre="TM3");
        banda4 = Recupere (Nombre="TM4");
        ivdn = Nuevo (Nombre = "IVDN", ResX = 30, ResY = 30, Escala = 100000, Min = 0, Max = 1 );
        ivdn = Numerico ( ( banda4 - banda3 ) / ( banda4 + banda3 ) ) ;
}

Volver al Índice


Declaraciones

Una declaración consiste en la definición de variables que serán asociadas a los planos de información, mapas cadastrales, objetos, tablas de transformación y valores reales incluidos en un programa en LEGAL.

Una variable: puede ser de modelo temático, Numérico, Imagen; Cadastral y Objeto. Existen aún las de tipo auxiliar, asociadas a tabla, declaradas de modo similar a los otros, y las asociadas a números Reales, que esencialmente no precisan ser declaradas.

Las variables de los modelos temático, Numérico y Imagen son frecuentenente referidas por variables de campo y corresponden al concepto de campo adoptado en el modelo de datos SPRING referente a datos con extensión espacial. De una cierta forma, el modelo Cadastral puede ser visto también así, aunque tenga como finalidad principal ofrecer un soporte para extensión espacial de objetos.

El modelo Objeto puede ser usado en operaciones incluyendo campos, a través de la asociación entre objetos y formas vectoriales representadas en un mapa cadastral (puntos, líneas y polígonos). Mientras es posible definir una extensa clase de expresiones algebraicas incluyendo apenas objetos y sus atributos, sin ninguna asociación espacial con mapas.


Declaración de variables de Campos, Cadastrales y Objetos.

La declaración de una variable consiste en asociar su nombre a un modelo y categoría del banco de datos SPRING activo. A partir de ahí, esa variable podrá ser asociada  a  planos de información, mapas cadastrales o objetos, de la categoría y modelo especificados.

Sintaxis:

El primer término indica el modelo de datos a ser asociado a la variable, el nombre_variable será su identificador para todo el programa. El nombre_categoría, entre comillas y paréntesis, indica la categoría en el banco de datos activo asociada a las representaciones (campos) instanciadas a la variable a lo largo de un programa.

ejemplos:

Temático solo("Solos"), geo("Geologia");
Numerico alti1 ("Altimetría");
Imagen banda3, banda4 ("LandSat");
Objeto obj ("Estados");
Cadastral cad ("DivisionEstadual");


Declaración de variables de tablas.

Variables del tipo tablas de Transformación son usadas para definir operaciones basadas en el mapeamiento entre campos de diferentes categorías del modelo de datos SPRING (Tematico-Tematico, Numerico-Tematico y Tematico-Numerico). En la declaración de variables tablas de transformación el término tabla es seguido de un nombre de la variable y de un término indicando el tipo de transformación - Reclasificacion, Fragmentaciñon o Ponderación -  Las categorías y valores que definen el mapeamiento serán establecidos en la fase de instanciación de variables_tablas.

Sintaxis:

ejemplos:

tabla fatias (Fragmentación), pesos (Ponderación);
tabla reclas (Reclasificación);

Volver al Índice


Instanciación

La instanciación consiste en la asociación efectiva de planos de información a variables de los modelos Temático, Numérico y Imagen; o mapas cadastrales a variables del modelo Cadastral, o incluso tablas de transformación a variables tabla previamente declaradas.

Variables del modelo Objeto, no están asociadas a representaciones espaciales por si, son apenas declaradas, los atributos de objetos son referidos explicitamente por el nombre del atributo como definido en el modelo de datos del banco SPRING activo.

También en el caso de variables Reales, no existe una representación espacial implicada, la declaración y instanciación se confunden, es decir, la simple atribuición de algún valor real a un nombre de variable, que no haya sido declarado anteriormente, define una tal variable.

A través del operador Nuevo, nuevos planos de información o tablas son creados y asociados a variables previamente declaradas. La asociación de variables a planos de información y mapas cadastrales previamente creados, es realizada a través del operador Recupere.


Instanciación de variables de Campos y Registros

La creación, a través del operador Nuevo, de un  plano de información asociado a una variable de modelo temático, Numérico o Imagen, exige rellenar algunos parámetros, además del nombre, tal y como el modelo de campo:

Nombre Plano de información a ser asociado a una variable
ResX y ResY Resolución sobre la cual un plano será considerado en operaciones
Escala Escala para planos temáticos y numéricos. Si omitido, el valor 1 es asumido
Min y Max Franja de valores estimados para una rejilla numérica a ser creada
Repres Representación a ser considerada. Puede asumir los valores Matriz o Vector. Si omitido, el valor Matriz será considerado
Nbits Número de bits para pixels de imágens. Si omitido, el valor 8 sera considerado.
Interpolador Modo de interpolación para generación de rejillas o imágenes. Puede asumir los valores Vecino o Bilinear. Si omitido, el valor Bilinear es asumido

Observe que no está prevista la creación de datos del modelo Cadastral, ellos son apenas recuperados, ninguna operación prevista en el lenguaje resulta en un nuevo mapa cadastral.

Sintaxis:

legal-04.gif (9059 bytes)

Para la instanciación de una variable a través del operador Recupere, debe ser indicado el término Nombre seguido del nombre del plano de información o mapa cadastral existente en el proyecto activo (indicados en el Panel de Control de SPRING).

El tipo de representación cuando omitido es entendido como Matriz para planos de información, y Vector para mapas cadastrales. Algunas operaciones sobre planos de información temáticos pueden hacer uso de la representación vectoríal, en ese caso, el término Repres = Vector debe ser indicado explicitamente.

Los parámetros Min y Max consisten en estimativas hechas por el usuário sobre la franja de valores prevista para una rejilla numérica definida por el operador Nuevo. Entrretanto, al final de las operaciones que resultan en esa rejilla, los valores mínimo y máximo efectivamente encontrados serán registrados en el plano de información correspondiente. Para  rejilla numérica y imágenes, se puede aún informar el tipo de interpolación a ser adoptado cuando existe diferencia entre la resolución de una nueva rejilla o imagen y la resolución de planos envueltos en su creación. Así, el término Vecino irá a indicar el modo de interpolación por vecino más próximo y el término Bilinear indica una interpolación bilinear. En el caso de planos temáticos envueltos en operaciones la interpolación por vecino más próximo será siempre adoptada.

NOTA: variables de campo instanciadas por el operador Recupere, pueden también ser usadas para almacenar resultados de operaciones de atribuición, en ese caso las posiciones de un plano son simplemente alteradas con relación a un estado anterior del dato.

ejemplos:

tena = Recupere (Nombre = "baciashidrograficas");
alti = Recupere (Nombre = "CotasAltimetricas");
ima = Recupere (Nombre = "TM4");

solo = Nuevo (Nombre = "Solos_A", ResX=50, ResY=50, Escala=100000, Repres = Vector);
alt1 = Nuevo (Nombre = "Altimetría", ResX=50, ResY=50, Escala = 1000, Min=0, Max=100);
ima = Nuevo (Nombre = "ImagenTM_Res", ResX=30, ResY=30);
ima = Nuevo (Nombre = "ImagenTM_Res", ResX=30, ResY=30, Nbits = 16);
alt2 = Nuevo (Nombre = "Altimetría", ResX=50, ResY=50, Escala = 1000, Min=0, Max=100, Interpolador = Vecino);


Instanciación de variables tablas.

En el caso de instanciación de una variable del tipo tabla, son utilizadas las palabras llave: CategoriaIni y CategoriaFim, para  indicar la(s) categoría(s) temática(s) envueltas en un operador de transformación. Son tres los tipos de tranformación implementados en el lenguaje:

Reclasificación, Ponderación y Fragmentación.

En la Reclasificación de las dos categorías temáticas (inicial y final) deben ser cumplimentadas; en la Ponderación apenas la categoría temática de entrada, cuyas clases serán ponderadas deben ser indicadas y en el Fragmentamiento debe ser indicada la categoría temática de salida.

Sintaxis:

 ejemplos:

tabla de Reclasificación:

Una tabla de Reclasificación describe el mapeamiento entre clases de dos categorías temáticas, asociadas a las entradas CategoriaIni e CategoriaFim.

grupo = Nuevo ( CategoriaIni = "Vegetacion", CategoriaFim = "Vegetacion",
        "Da" : "FlorestaAluvial",
        "Db", "Ds1", "Ds2", "Ds4", "Dm" : "Florestabrofila",
        "sd", "sp", "sA" : "Savanas",
        "Pfm", "Pa", "Pah" : "FmPioneiras",
        "Ap" : "Floresfila" ) ;

tabla de Fragmentación:

Una tabla de Fragmentación indica el mapeamiento entre intérvalos de valores numéricos y clases temáticas de una cierta categoría temática asociada a la entrada CategoriaFim.

grupo = Nuevo ( CategoriaFim = "Vegetacion",
        [0.0, 0.2] : "Floresta",
        [0.2, 0.45] , [0.8, 1.0] : "Mata_galería",
        [0.45, 0.8] : "Cerrado" ) ;

tabla de Ponderación:

Una tabla de Ponderación describe el mapeamiento entre clases de una categoría temática, asociada a la palavra clave CategoriaIni, y valores numéricos que definen pesos a ser asociados a cada clase.

pdonde1 = Nuevo ( CategoriaIni = "Vegetacion",
        "Floresta" : 0.2,
        "Mata_galería", "Mata" : 0.43,
        "Cerrado" : 0.456 );


Instanciación de variables Reales.

Como hemos visto en la sección sobre declaraciones, la simple atribución de valores numéricos interos o punto fluctuante a un nombre de variable, que no haya sido usado anteriormente, define una variable de tipo Real. que podrá ser usada en expresiones envolviendo datos de domínios Numéricos, Imagen, y Reales.

Sintaxis:

ejemplos:

           pi = 3.1416 ;
           r = pi ;
           y = 2.1478 ;


Volver al Índice


Operaciones

Después de la declaración y instanciación de variables sigue la definición de las operaciones válidas sobre ellas. Operaciones son secuencias de un o más operadores sobre datos asociados a las variables declaradas y instanciadas previamente en el programa. Son descritas por expresiones algebraicas del lenguaje.

Una sentencia que describe operaciones en LEGAL, corresponde a una expresión de atribuición, en la cual el resultado de la evaliación de una expresión algébrica es atribuido a una variable previamente definida y instanciada.

Sintaxis:

legal-12.gif (2346 bytes)

En función del modelo de datos resultante, tales expresiones  pueden ser clasificadas en: expresiones temáticas, numéricas, imagens, reales y objeto.

Las expresiones_zonales, tienen también su resultado atribuido a variables de los  modelos temático, Numérico, Objetos y Real. Mientras, aún no existen reglas gramaticales en el lenguaje que permitan su participación en expresiones algebraicas más complejas, envolviendo otros operadores de lenguaje, en una misma sentencia. Este es también el caso de los operadores Espacialize y FatieAtributo. Tales expresiones serán consideradas juntas, en el grupo de las expresiones zonales.

En las expresiones_objeto, los objetos son tratados de modo independiente de cualquier asociación a mapa cadastral. Eso ofrece algunos recursos para la manipulación de atributos de un mismo objeto, de una manera no espacial. Toda la funcionalidad válida para datos cuantitativos y cualitativos está disponible para esa clase de expresiones, siempre que los tipos de atributos sean consistentes con los operadores utilizados.

Las expresiones_reales envuelven números y variables reales y toda funcionalidad de operadores y funciones matemáticas disponibles para datos cuantitativos, pueden ser usadas en operaciones no espaciales como en el caso de las expresiones objetos, pero, principalmente, pueden también participar de expresiones más complejas implicando campos cuantitativos.

Tal vez la clase de operaciones disponible más significativa sea la de las expresiones_booleanas. Sus resultados nunca son atribuidos a variables de cualquier tipo. Son expresiones auxiliares que permiten la definición de regiones a partir de comparaciones entre resultados de expresiones de los otros tipos.

sintaxe:

Todos los operadores implicados en expresiones de los tipos asociados a campos (temáticos, Imagenes y Numéricos), así como las expresiones Booleanas, pertenecen a la clase de los operadores Locales. Entre ellos están los operadores aritméticos+’, ‘-’, ‘*’, ‘/’e ‘^’, las funciones matemáticas (sin, cos, asin, acos, atan, log, log10, exp, sqrt etc.), las transformaciones por tablas (Fatie, Pdondere e Reclasifique), los operadores booleanos (&&, ||, |, !, >, >=, ==, !=, <=, <) el operador condicional ('?'), o de atribución condicional (Atribua)  y otros definidos en el lenguaje. Tales operadores actuan sobre cada uno de los elenentos de representaciones matriciales de imágenes, mapas temáticos o rejillas numéricas.

Una extensa clase de operaciones de Vecindad, pueden ser implenentadas en LEGAL a partir de la referencia explícita a los elementos vecinos a cada posición, en un recorrido puntual, como en las operaciones locales. Tal estratégia de posicionamiento relativo consiste en indicar un valor de desplazamiento, en términos de número de líneas y de columnas, relativo a cada posición caracterizada, de modo que elementos vecinos, en uno o más planos envolvidos en una expresión algébrica, puedan ser considerados en la caracterización de cada posición resultante.

Así, si una variable aparece en una expresión algébrica de forma indexada: ( por ex.: variable [i, j] ), eso indica que el valor a ser considerado en su evaluación se refie al de la posición dada por el desplazamiento de ‘i’ líneas y ‘j’ columnas relativas a cada posición recorrida para la obtención del resultado punto a punto.

Las operaciones Zonales permiten la evaluación de estadísticas simples (maiyoría, media, maximo, etc) sobre valores definidos por expresiones aritméticas o booleanas implicando campos (temáticos, Numéricos o Imagens) distribuídos sobre zonas definidas explicitamente por facciones lineares (polígonos, líneas y puntos)  de mapas cadastrales, o  implicitamente por expresiones booleanas implicando variables de campos.

Zonas deven ser entendidas como regiones disjuntas que recorren una área de estudio, por ejemplo: los temas de un mapa temático, las faixas de altitudes en una rejilla altimétrica, los municípios en un mapa cadastral de división municipal, las regiones cuyo tipo de solo dato por un mapa de suelos coinciden con ciertas franjas de inclinación dadas por un mapa de edades, etc.

 

Volver al Índice


Expresiones Reales

Las expresiones Reales son definidas sobre constantes y variables reales (unidimensionales), como en la aritmética usual y según sus reglas usuales de formación de expresiones y prioridades de operadores. Tales expresiones pueden ser vistas como auxiliares, yá que el objetivo central del lenguaje es trabajar con datos espaciales. Los conceptos asociados a variables y constantes unidimensionales serán extensivos a variables y contantes espaciales asociadas a los dominios del modelo de datos SPRING, y constituyen el principal fundamento para la construción del lenguaje LEGAL

La descripción sintáctica de las expresiones reales dada por el diagrama inferior, será útil en este texto también para ilustrar mejor el uso de diagramas sintáticos.

Sintaxe:

El ítem sintáctico principal, aqui es definido por expresión_real; los símbolos +, -, *, /, ^, representan operadores aritméticos; los paréntesis, ( e ), permiten la alteración de prioridades entre operadores de una expresión; numero y variable_real, representan operandos, que pueden ser números o nombres de variables y constantes que representan números; el ítem función_matemática corresponde a nombres de funciones matemáticas disponibles:

sin, cos, tan funciones trigonométricas en radianes
asin, acos, atan funciones trigonométricas inversas
log, log10 funciones logarítmicas en base y y en base 10
exp exponencial en base e
sqrt raiz quadrada
int parte intera de un número
abs valor absoluto
rand valor aleatório

ejemplos:

                (A+B)^2    ...........................................el cuadrado de la suma de dos variables:

Sean A y B, dos variables reales previamente definidas, observe la secuencia de pasos para formación de expresión algébrica superior con base a las reglas sintáticas:

Volver al Índice


Expresiones Imagen

Las expresiones del tipo Imagen envuelven valores interos, tipicamente entre 0 y 255 (imágenes de 8 bits), valores fuera de esa franja serán sustituídos por el extremo más próximo. El diagrama inferior muestra las opciones para variables que envuelven expresiones de imágenes.

Sintaxe:

Expresiones de los tipos Real, Numérico y Tematico pueden ser entendidas como imágenes desde que se use el operador Imagen, como muestran las reglas 5, 6 y 7. Un dato temático es normalmente entendido como cualitativo, los valores puntuales representan clases temáticas (geoclases), identificadas por sus nombres de geoclase. Entretanto, cada geoclase, como se puede observar en la interface "Modelo de Datos", está asociada también a un número intero, su índice de geoclase. Ese valor será considerado por el operador Imagen, al tratarlo como una imagen.

El resultado de la evaluación de una expresión_condicional_imagen depende de la evaluación de una expresión_booleana que aparece antes del señal "?". Una expresión_booleana, como será visto más adelante, puede resultar en dos posibles valores: VERDADERO o FALSO. Si el resultado fuera VERDADEIRO, la acción indicada por la expresión_imagen1 que antecede la señal ":" dará el resultado, caso contrário la expresión_imagen2 que sigue al señal ":" dará el resultado.

ejemplos de expresiones Imagen::

ima1 = Imagen(rejilla1);
ima3 = ima2 + 20;
res_ima1 = abs(sen(ima1)- 255);

Volver al Índice


Expresiones Numéricas

Las expresiones del tipo Numérico incluyen valores reales dentro de una franja de valores definida por los valores asociados a las palabras claveMin y Max; valores fuera de esta franja son asociados a valores "nulos", es decir, sin información. El diagrama inferior muestra las opciones para variables que incluyen expresiones de imágenes.

Sintaxe:

 

Expresiones de los tipos Real y Imagen pueden ser entendidas como rejillas numéricas desde que se use el operador Numerico, como muestran las reglas 7 y 8.

El resultado de la evaluación de una expresión_condicional_numérica depende de la evaluación de la expresión_booleana que aparece antes del señal "?", e. que puede resultar en dos posibles valores: VERDADERO o FALSO. Si el resultado de la expresión booleana fuera VERDADERO, la acción indicada por la expresión_numerica1 que antecede el señal ":" dará el resultado final, caso contrário la expresión_numerica2, que sigue al señal ":", dará el resultado.

ejemplos de expresiones Numéricas:

Volver al Índice


Expresiones temáticas

En el caso de las expresiones de tipo Tematico, los operadores aritméticos pierden el sentido, ya que los valores encontrados en los elenentos de su representación indican geoclases y no valores reales. Así las expresiones posibles son aquellas que envuelven valores de geoclases, tales como las  transformaciones basadas en tablas y atribución condicional.

Sintaxe:

 

Cualquier palabra  puede ser entendida como un nombre de geoclase desde que se use el operador temático o Clase, como muestran las reglas 3 y 4. Un dato temático es normalmente entendido como cualitativo, los valores puntuales representan clases temáticas (geoclases), identificadas por sus nombres de geoclase, de modo que tales nombres son los proprios "valores" representados. Mientras, es posible "maquillar" os valores enteros de una imagen, vistos como índices de geo-clases, para geo-clases, como indica la regla 5.

Expresiones booleanas, como se verá más adelante, al ser evaluadas, pueden resultar en dos posibles valores: VERDADERO o FALSO.

El resultado de la evaluación que el operador Atribuya depende de la evaluación puntual de expresiones_booleanas asociadas a clases temáticas. La primera de las que resulta en un valor VERDADERO determinará la clase a ser tomada como resultado final.

El resultado de la evaluación de una expresión_condicional_temática depende de la evaluación de la expresión_booleana que aparece antes del señal "?". Si el resultado de la expresión_booleana fuera VERDADERO, la acción indicada por la expresión_tematica1 anterior al señal ":" dará el resultado final, en caso contrario la expresión_temática2, que sige al señal ":", dará el resultado.

ejemplo de expresiones temáticas:

Volver al Índice


Expresiones Booleanas

Una expresión booleana describe el conjunto de posiciones que satisfacen un mismo critério de pertenencia, dado por la combinación de expresiones de los tipos anteriores a través de los operadores de comparación:

<

menor

<=

menor o igual

>

mayor

>=

mayor o igual

==

igual

!=

desigual

y de los operadores lógicos:

&&

E-lógico (intersección)

||

OU-lógico (unión)

|

OU-exclusivo (unión disjunta)

! el ~

NAO-lógico (complemento)

Sintaxe:

 

Las expresiones de comparación y las booleanas son auxiliares, no siendo posible atribuir sus resultados a variables. Mientras ofrecen un modo eficiente de describir condiciones implicando atributos espaciales (o no, en el caso de las expresiones_objeto) resultantes de la evaluación de expresiones sobre campos, objetos y reales, sin la necesidad de generar resultados binários intermediários. El resultado de evaluación de una expresión booleana puede asumir uno entre los valores: VERDADERO o FALSO.

En el caso de expresiones_comparación incluyendo expresiones_temáticas o expresiones_objeto con atributos de tipo texto, apenas los operadores locales de igualdad (==) y desigualdad (!=) dan sentido a todas las otras, todos los operadores de comparación ( > , >= , <= , < ) pueden ser utilizados.

Volver al Índice


Expresiones Zonales

En ese grupo de operaciones se destacan las estadísticas simples como: mayoría, variedad, máximo, suma, media etc. Tales operadores consisten de sumarizaciones sobre conjuntos de valores oriundos de un cierto plano, que sean contenidos en zonas definidas por otros planos o mapas cadastrales.

 

cuando el resultado de  una expresión_zonal es atribuído a una variable_temática, siempre que las zonas incluidas fueran definidas por una expresión_cadastral, el resultado deverá ser un plano temático de representación vectoríal. Así, en la instanciación de esa variable, el parámetro Repres = Vector debe ser indicado.

ejemplos:

Cadastral cad ("Division Municipios") ;
Tenatico ten ("Temas Municipales") ;
Objeto obj ("Municipios") ;
ten = Nuevo (Nombre = "Municipales", ResX = 100, ResY =100, Escala = 100000, Repres = Vector) ;
ten = Espacialize (obj ."activIDAD" NoMapa cad) ;

en un caso como este, es necesário que existan pré-definidas, en el modelo de datos, la categoría temática "Temas Municipales" y las asociadas a ella  y las  geo-clases de nombres idénticos a los de los valores textuales del atributo "activIDAD".

Cadastral cad ("Division Municipios") ;
Tenatico ten ("Temas Municipales") ;
Tenatico veg ("Vegetacion") ;
Objeto obj ("Municipios") ;
veg = Recupere (Nombre = "Mapa de Vegetacion") ;
ten = Nuevo (Nombre = "ClasesMunicipales", ResX = 100, ResY =100, Escala = 100000, Repres = Vector);
ten = MayoríaZonal (veg , obj  NoMapa cad) ;

    Objeto zonas ("Quadras");
    Cadastral cad ("Cad_Urbano");
    Numerico decliv ("Altimetría");
    cad = Recupere (Nombre = "Mapa_quadras");
    decliv = Recupere (Nombre = "Inclinacion");
    zonas. "INCLINACION" = MediaZonal ( incli, zonas OnMap cad );

Volver al Índice


Expresiones Objeto

Las expresiones del tipo Objeto incluyen valores oriundos de atributos de un mismo objeto, los resultados de las operaciones así definidas deben ser almacenados sobre la forma de atributos, previamente definidos, del mismo objeto. Aqui las posibles asociaciones de objetos a mapas cadastrales no son tomadas en cuenta; como en una planilla, las columnas son incluidas en operaciones con el fin de generar valores para otras columnas . Dicho de otra forma, son operaciones entre columnas de una misma tabla que representa el objeto.

Así como las expresiones_reales, las expresiones_objeto, por incluir apenas valores escalares que caracterizan atributos en tablas de bancos de datos convencionales, también son no-espaciales, es decir no representan planos de información o mapas cadastrales. Además de eso, diferentemente de aquellas, tales valores no pueden ser "maquillados" para representar implìcitamente datos de otros modelos en SPRING.

Sintaxe:

legal-18.gif (4094 bytes)

El resultado de la evaluación de una expresión_condicional_objeto depende de la evaluación de la expresión_booleana que aparece antes del señal "?". La expresión_booleana, en este caso podrá envolver apenas expresiones-objeto e/ou expresiones_reales, pudiendo resultar en dos posibles valores: VERDADERO o FALSO. Si el resultado fuera VERDADERO, la acción indicada por la expresión_objeto que antecede el señal ":" dará el resultado, en caso contrário, la expresión_objeto que sigue al señal ":" dará el resultado.

ejemplos de expresiones objeto::

estado."Previsión" = estado."Actual" * estado."Taxa_anual" ;
estado."Previsión" = estado."Desempeño" > 50 ? estado."Actual" * estado."Taxa_anual" : estado."Actual" ;

Volver al Índice


Comandos de Control

Constituyen una clase de operadores que permiten el control del flujo de ejecución de un programa en LEGAL, que puede ser hecho con base en alguna condición dada por una expresión booleana, o a partir del control del número de iteracciones a que debe ser sometido un cierto grupo de operaciones algebraicas en un programa cualquiera, de manera explícita o tamben por alguna condición booleana. Esos comandos son basados en construcciones de lenguaje tales como:

Las condiciones referidas superiores son dadas por una expresión_booleana envolviendo apenas  expresiones_ reales, esto significa que son condiciones basadas en valores escalares, tipicamente por variábles_reales que deben funcionar como contadores de pasos y que son alteradas explicitamente a cada paso  Por ejemplo:

{
...
n = 0 ;
Enquanto (n < 10)
{
   operación_1 ;
    operación_2 ;
    ...
    n = n + 1 ;
} ;
...
}

Apenas el operador Enquanto está disponible en la versión actual de SPRING/LEGAL.

En el comando Se...Seno... el resultado de la evaluación de una expresión_booleana (VERDADERO o FALSO) determinará cual entre dos secuencias de operaciones debe ser procesada.

En el comando Enquanto... una secuencia de operaciones debe ser ejecutada repetidas veces hasta que la evaluación de la condición dada por una  expresión_booleana resulte VERDADERO.

sintaxe:

legal-10.gif (2226 bytes)

 

ejemplos:

{
    Tematico densidad, dens, den ("Densidad_Populacional");
    densidad = Recupere (Nombre="DensPop");
    dens = Nuevo (Nombre = "EvolucionDensPop", ResX=30, ResY=30, Escala = 100000 ) ;
    den = Nuevo (Nombre = "Den2", ResX=30, ResY=30, Escala = 100000 ) ;
    den = densidad ;
    n=0;
    While n < 10
   {
        dens = den ;
        //Primera regla:
        //Posiciones de densidad média, con dos vecinos de densidad média y uno de alta tienden a

        //volverse de alta densidad.
        dens  ==  Clase ("Media") &&
        ( (den[-1,-1] == Clase("Media") && den[1,0] == Clase("Alta") && den[-1,1] == Clase("Media")) ||
          (den[-1,1] == Clase( "Media") && den[0,-1] == Clase("Alta") && den[1,1] == Clase("Media")) ||
          (den[1,1] == Clase("Media") && den[-1,0] == Clase("Alta") && den[1,-1] == Clase("Media")) ||
          (den[1,-1] == Clase("Media") && den[0,1] == Clase("Alta") && den[-1,-1] == Clase("Media"))  ) ?
        Clase("Alta") :
        //Segunda regla:
        //Posiciones de densidad média, con dos vecinos de densidad média y uno de baja tienden a
        //mantener la densidad.
        dens  ==  Clase ("Media") &&
        ( (den[-1,-1] == Clase("Media") && den[1,0] == Clase("Baixa") && den[-1,1] == Clase("Media")) ||
          (den[-1,1] == Clase( "Media") && den[0,-1] == Clase("Baixa") && den[1,1] == Clase("Media")) ||
          (den[1,1] == Clase("Media") && den[-1,0] == Clase("Baixa") && den[1,-1] == Clase("Media")) ||
          (den[1,-1] == Clase("Media") && den[0,1] == Clase("Alta") && den[-1,-1] == Clase("Media")) ) ?
        Clase("Baixa") :
        //Tercera regla:
        //Posiciones de densidad média, con un vecino de densidad média, uno de densidad alta y uno de

        //densidad baja tienden a mantener la densidad.
        dens  ==  Clase ("Media") &&
        ( (den[-1,-1] == Clase("Alta") && den[1,0] == Clase("Media") && den[-1,1] == Clase("Baixa")) ||
          (den[-1,1] == Clase( "Alta") && den[0,-1] == Clase("Media") && den[1,1] == Clase("Baixa")) ||
          (den[1,1] == Clase("Alta") && den[-1,0] == Clase("Media") && den[1,-1] == Clase("Baixa")) ||
          (den[1,-1] == Clase("Alta") && den[0,1] == Clase("Media") && den[-1,-1] == Clase("Baixa"))  ) ?
        Clase("Media") : den ;        //Fi de la operación condicional
        n = n+1;
    };
}

El ejemplo superior es fictício, muchas diferentes reglas podrían ser definidas con el objeto de determinar el comportamiento dinámico de la evolución del crecimiento (o decrecimiento) de la concentración populacional, en base a las vecindades immediatas de cada posición de un plano de información. Al final de cada iteracción (o paso) la variable_real "n" es incrementada y al início del paso seguinte, el valor de "n" es comparado con el objeto de determinar la continuidad o no de la secuencia de operaciones definidas en el ámbito del comando While.

Observe que con el fin de preservar la información original contenida en el plano de información "DensPop", fueron creadas dos cópias de él. Una de ellas es actualizada después de cada iteracción, sirviendo de base para la iteracción siguiente.

Ese ejemplo ilustra también el uso de indexación relativa en la definición de operaciones de vecindad.

 

Volver al Índice