Pesquer Ll.1 Maso J.1 Pons X.2,1
1Centro de Investigación Ecológica y Aplicaciones Forestales
Facultad de Ciencias. UAB
2Departamento de Geografía. Universidad Autónoma de Barcelona
08193 Bellaterra, Barcelona, Spain
Por ejemplo, un SIG popular como Idrisi (versión 2.010), tiene las herramientas básicas de análisis desarrolladas únicamente para rásters (Image Calculator, Crosstab, etc). También Envi (versión 3.0) dispone de múltiples aplicaciones específicas para el formato ráster como BandMath pero adolece de menos potencialidades en el caso vectorial, en parte por su vocación principal de programa de teledetección. En ArcInfo (ArcInfo 7.2) es necesaria la conversión de ráster a capa vectorial para la realización de determinados análisis vectoriales como Buffer, y, en cambio, deben convertirse al formato ráster (Grid o VAT, formato ráster con tablas asociadas), aquellas capas que formen parte de la secuencia de comandos, operadores y funciones que definan un análisis aritmético ráster. Al mismo tiempo operaciones comunes como la reclasificación de valores no suelen poderse incluir en el interior de la secuencia de procesos como una operación más, o no es posible tener un control fino de los tipos numéricos de salida, o es necesario decantarse por operadores matemáticos o por operadores lógicos, cuando a menudo ambos son precisos en este mismo análisis.
Las herramientas que se describirán durante este trabajo tienen como objetivo principal reducir de manera significativa la barrera que hay entre estos dos mundos. El modelo ráster y el modelo vectorial evidentemente seguirán existiendo dada su razón de ser (Burrough & McDonell, 1998), pero se pretende minimizar dicha división. Se propone, pues, trabajar con rásters y vectores de forma combinada e indistinta, y tener definidas las mismas funcionalidades para ambos mundos. Sólo entonces la elección de un formato u otro será función de la visión que se adapte mejor a la información de que disponemos y del tipo de resultado que deseemos, y no dependerá de las herramientas disponibles para trabajar con ella. Esta aproximación entre ambos mundos ha obligado a los autores a revisar algunos conceptos típicamente ráster como es el valor de fondo o valor NODATA, bien definido para el caso ráster (aunque a menudo no contemplado funcionalmente en los módulos de los programas) pero para el cual se debía encontrar su analogía en el formato vectorial y así generalizar algunas funciones matemático-lógicas especialmente sensibles a este valor. Un tratamiento especialmente riguroso del concepto de valor NODATA ha permitido integrar funciones matemáticas con funciones lógicas, capas ráster de distinto formato con capas vectoriales con o sin topología y valores NODATA documentados de manera muy diversa pero que, en cambio, se integran en una misma expresión analítica.
La velocidad es también un criterio prioritario en el diseño de estas aplicaciones. Debido a que cada vez se manejan un mayor número de capas con más información, a menudo, los usuarios no tienen la posibilidad de que sus recursos informáticos progresen al mismo ritmo ni el mismo momento en que disponen de más datos, se han estudiado y probado los algoritmos de cálculo para que los procesos sean lo más veloces posible. El desarrollo de estas herramientas, en lenguaje C, permite el diseño de estrategias para acelerar los cálculos sin perder las indispensables características de funciones y operadores polivalentes que trabajan con distintos tipos de datos, capas, etc. Con estas directrices se han construido dos herramientas, la Calculadora/Reclasificadora de Capas y la Combinación Analítica de Capas, habilitadas para realizar complejos y rigurosos estudios en el campo del Análisis SIG.
Las dos herramientas de análisis que se presentan están integradas en MiraMon versión 3.x, un Sistema de Información Geográfica y software de Teledetección, aplicación nativa de 32 bits que funciona en cualquier plataforma Windows. Ambas herramientas, pueden ejecutarse en línea de comandos o ser llamadas desde el menú correspondiente donde una interfaz Windows facilitará la simple ejecución o bien la construcción de la línea de comandos que puede ser volcada sobre un fichero .BAT o un código en otro lenguaje con el objetivo de lanzar procesos masivos o automatizados.
También se ha desarrollado un procedimiento puramente vectorial para aquellos análisis donde se desee una superposición espacial entre atributos para capas vectoriales con el objetivo de obtener una nueva capa vectorial que combina tanto los elementos gráficos originales como todos sus atributos temáticos. El análisis netamente vectorial permite el trabajo con diversos registros y campos para cada objeto gráfico, lo que lo diferencia del análisis ráster donde tradicionalmente se maneja un único atributo y un único registro por celda. Un ejemplo de este proceso sería el enriquecimiento de la base de datos de un mapa de carreteras con un campo de denominaciones de una capa de municipios.
Para lograr una mayor completitud en el análisis combinado ráster/vector debería añadirse un procedimiento de vectorización automática de capas ráster. Este procedimiento que se encuentra en fase de desarrollo y cuyo algoritmo se basará en un procedimiento línea a línea, sin grandes requerimientos, de memoria, permitirá obtener la versión vectorizada de un ráster de forma dinámica (sin necesidad de generar una capa intermedia) para, por ejemplo, transferir como atributo a una capa vectorial de líneas los índices de vegetación reclasificados por los que discurre cada línea. Cabe señalar que la vectorización de un ráster no tendrá sentido en la mayoría de operaciones aritméticas definidas en la Calculadora si previamente no se reclasifican los resultados, generalmente continuos, a valores discretos, posibilidad ya existente en la Calculadora. Por ello, el formato resultado habitual de esta aplicación seguirá siendo ráster.
El objetivo de este proceso es generar una fila de valores numéricos determinados a partir de los atributos correspondientes a la capa vectorial. Debe inicializarse con el valor de fondo definido, y en el proceso se reemplazarán estos valores de inicio por los valores rasterizados. Los valores numéricos rasterizados se obtendrán a partir del atributo del campo seleccionado; si este campo no es numérico realizaremos una transformación previa para obtener valores numéricos. Para un campo lógico el valor falso se convertirá a 0, y el valor verdadero a 1. Para un campo fecha, se genera un valor AAAAMMDD (4 cifras del año, 2 cifras del mes y 2 cifras del día, formato que permite ordenaciones de campos fecha con los criterios habituales). Para un campo alfanumérico se intenta convertir a numérico si dicho atributo esta formado únicamente por cifras, o se propone una operación lógica de igualdad o desigualdad del atributo a un determinado texto alfanumérico. En cualquier caso si la conversión de un atributo no es posible, el registro no se tiene en cuenta.
La rasterización tiene algunas particularidades en función del tipo de entidades gráficas. Para puntos, cada elemento gráfico es rasterizado sobre la celda del ráster que lo contiene (criterio del vecino más próximo). En el caso de líneas, en primer lugar, sus vértices son rasterizados en el píxel que los contiene. Los segmentos entre vértices son rasterizados por un proceso que garantiza que dicho segmento recibe, en todo momento, una representación de grosor 1 píxel y no se pierde la continuidad de la línea. El algoritmo es un perfeccionamiento del de Bresenham (Hill, 1990), que en nuestro caso, permite trabajar con coordenadas subpíxel de forma precisa y jamás afecta píxeles dónde la línea ni siquiera toca. Cuando el vector es de polígonos, los elementos gráficos a rasterizar son polipolígonos. Un polipolígono es una descripción de la secuencia de polígonos elementales formada por el borde exterior del polígono y todas sus fronteras interiores (huecos). En el caso de grupos de polígonos pueden existir varios bordes exteriores (p. ej. Islas Baleares) Para cada fila de ráster se determinan las intersecciones de la línea del nivel central de la fila con las líneas de frontera de cada polígono. Una vez eliminadas todas las singularidades, se determinan los píxeles candidatos a ser rasterizados, contando intersecciones, avanzando desde la izquierda y rasterizando cuando el número de intersecciones sea par (simplificación del algoritmo del punto en el polígono). Cuando un píxel toca a 3 o más polígonos, el valor rasterizado es el del polígono que tiene mayor presencia en la línea central del pixel. Es importante subrayar que esta rasterización es totalmente dinámica en cada fila, no generando, en ningún momento, ningún fichero temporal del vector rasterizado.
La emulación ráster de un vector admite una parametrización en función de los objetivos deseados, y tiene sus particularidades según la herramienta de análisis utilizada.

Para un vector estructurado topológicamente y con base de datos asociada debe indicarse el campo que determina el atributo de cada registro y el registro que determina el atributo para entidades multiregistro (relación de cardinalidad 1->n), aquellas entidades gráficas enriquecidas con más de un atributo. En el caso de campos alfanuméricos, puede elegirse una rasterización a verdadero (1) o falso (0) determinada por la operación de igualdad o desigualdad del un atributo correspondiente al registro seleccionado con una determinada cadena, o bien un tratamiento numérico de cada registro. Para cualquier vector debe definirse el valor exterior a todas las entidades o el valor de aquellas entidades que no tienen un atributo válido. Si en una misma capa vectorial hay más de un campo de interés, puede indicarse su inclusión tantas veces como se desee.

La parametrización de la rasterización en la Combinación Analítica de Capas es ligeramente distinta: debe seleccionarse un campo numérico de la base de datos (en el enfoque ráster, la combinación representa el cruce de las variables numéricas no continuas, datos categóricos), y un campo descriptivo (categoría) asociado al valor numérico. Para entidades con multiregistro debe señalarse qué registro seleccionar.
La asignación del valor exterior al vector se realiza de forma automática: aquellas zonas donde no existen elementos gráficos definidos o a éstos no les corresponde un registro válido serán representadas por el concepto NODATA.
El resultado y el procedimiento de la superposición de vectores dependen de la naturaleza de cada una de las capas implicadas. En el caso general de superposición de n capas vectoriales de tipo punto/nodo línea/arco o polígono simultáneamente, el procedimiento se inicia con la determinación de todas las intersecciones entre las entidades gráficas de las capas no puntuales que terminará con una nueva fragmentación del espacio. La decisión de que dos elementos gráficos ocupen una parte común en el espacio viene dominada por criterios de tolerancias infinitesimales y de insignificancia de geográfica (eliminación de micropolígonos), previamente parametrizados por el usuario si lo desea. Dicha fragmentación, puede implicar la creación de nuevos nodos localizados en las intersecciones halladas. La correspondencia de cada nuevo elemento gráfico del nuevo espacio fragmentado con los elementos de cada una de las capas originales establece una relación entre los atributos de los objetos originales y los registros de la base de datos del nuevo espacio fragmentado. Como ya se ha indicado, la regla de correspondencia aplicada es la del punto en el polígono. Los atributos de las nuevas entidades resultantes vendrán determinados por los atributos de las entidades originales y por el tipo de análisis, pudiendo limitarse a una simple herencia de registros o una operación aritmética entre los campos de las capas implicadas una vez conocidos todos los atributos para cada nuevo objeto.
Todas las funciones y operaciones definidas admiten argumentos numéricos, vectoriales o ráster indistintamente; por ejemplo es posible realizar un producto de un número por una capa, un producto entre dos capas o entre dos números (esta última operación no sería válida si fuera la única definida, ya que es condición necesaria que como mínimo una capa vectorial o ráster se incluya en la expresión). Por el momento, no se han incorporado funciones convolutivas que se alejan excesivamente del esquema general de esta aplicación, debiéndose ejecutar a través de los módulos específicos para tal fin.
La interfaz se usará para construir correctamente la sintaxis de la expresión analítica, definir las capas origen que participan en dicha expresión, configurando sus parámetros particulares para capas vectoriales, insertar las funciones u operadores con sus argumentos, editar los ficheros de reclasificación, guardar o recuperar configuraciones completas, definir el formato de salida, completar la metainformación del fichero de salida (título, unidades, categorías...), definir el ámbito del ráster resultante si es necesario, informar del espacio de disco necesario en función del tipo de datos resultante, etc. Se ha hecho un esfuerzo importante en automatizar muchas de estas opciones, con los criterios más habituales y coherentes con el análisis que se está introduciendo, facilitando al usuario no experto la toma de decisiones sobre las cuales no tiene un criterio definido. El usuario avanzado podrá configurar todos los parámetros, aunque el programa avisaría en el caso que existiera alguna incoherencia entre ellos.

Transformar la expresión matemática en una secuencia jerarquizada de operaciones significa que la sintaxis se examina una sola vez, acelerando el proceso de manera extraordinariamente significativa respecto a métodos que iteren este examen píxel a píxel. Entonces se procede al cálculo gobernado por esta secuencia de operaciones. La lectura de capas se realiza fila a fila, (fila de celdas ráster o fila del vector rasterizado en la región correspondiente a dicha fila) los cálculos se realizan celda a celda, y una vez calculada una fila completa se escribe en el fichero resultado. El análisis de qué entidades vectoriales afectan a cada fila ráster se ha optimizado utilizando criterios geométricos. Se ha comprobado que este procedimiento es el que mejor alcanza un compromiso velocidad/requerimientos de memoria.
Finalmente se almacena la metainformación obtenida durante el proceso de cálculo, se cierran los ficheros y se libera la memoria solicitada. Durante el proceso se informa de su evolución, así como de la detección de cualquier anomalía. El diseño modular y el uso de punteros a funciones permite con suma facilidad añadir en el futuro nuevos operadores y funciones, sin que se le exija ningún prototipo determinado y sin que ello implique ninguna reestructuración del código fuente.
No existe ninguna restricción sobre el valor de fondo de las distintas capas que participan en la expresión. El programa asigna automáticamente el valor de NODATA en función del formato del ráster resultado: 255 para tipo byte, 0 para tipo bit, y el valor más negativo posible para el resto de tipos, o permite que sea el usuario quién decida cual será dicho valor, verificando que sea compatible con el tipo de salida elegido.
Debe tenerse en cuenta que la existencia de NODATA en la capa resultado disminuye el rango de posibles valores válidos. Es absolutamente aconsejable, y con mayor razón para el caso byte, definirlo en uno de los extremos del rango válido de los datos resultado, sin insertarlo en medio de una zona de valores permitidos y posibles. De esta forma un valor resultado perfectamente válido que coincida con el valor asignado a NODATA se convertirá en el valor posible más cercano. Por ejemplo, para un fichero de salida en formato byte, que tenga valor de fondo definido en 255, el resultado de 250+5 se asignará a 254, valor válido más próximo a 255, ya que 255 queda reservado para NODATA.
Cabe señalar que el concepto de singularidad en un proceso de cálculo numérico como éste es cualitativamente distinto al concepto teórico-matemático; es decir, en la teoría podemos realizar cálculos en un entorno infinitesimalmente cercano a una singularidad, pero en la práctica esta singularidad no es un punto concreto (o una región perfectamente confinada según el caso), sino que existe un entorno más o menos infinitesimal alrededor de la singularidad que depende de la precisión utilizada y del valor mismo. Puede minimizarse este efecto, pero nunca ajustarse ilimitadamente al modelo teórico. Este error intrínseco, solo apreciable en cálculos extremadamente finos o con valores muy elevados puede llegar a repercutir también en algunas funciones de comparación con reales y en los intervalos de reclasificación, si estos son excesivamente infinitesimales. El programa sustituye internamente los operadores de comparación con reales de doble precisión por funciones que garantizan que estos entornos están convenientemente definidos. (DJ Delorie, 1998)
[valor antiguo] [valor nuevo] [límite inferior antiguo] [límite superior antiguo] [valor nuevo].En el primer caso se realiza una sustitución del valor antiguo por el nuevo y, en el segundo caso, a los valores mayores o iguales al límite inferior y estrictamente menores al límite superior se les asignará el valor nuevo. El programa permite que haya solapamientos en la definición de los intervalos a reclasificar (en algunos casos puede simplificar la notación); en este caso, las regiones que pertenezcan a más de un intervalo se asignaran al valor definido correspondiente al primer intervalo definido al cual pertenece dicha región.
La Reclasificación tiene un comportamiento especial con el tratamiento de los valores de fondo. Podemos 'eliminar' el valor de fondo definiendo la asignación:
NODATA [valor_valido]De esta forma, sea cual fuera el valor de NODATA, deja de ser valor de fondo y pasa a ser el valor especificado, pudiendo ser un valor ya existente o un nuevo valor. También es posible asignar el valor de fondo desde un valor o intervalo de valores:
[Valor_valido] NODATA [Límite_inferior] [Límite superior] NODATA

Finalmente, la combinación de una capa ráster con una capa vectorial emulará siempre la opción ráster con ráster, así como, la combinación donde participe una capa vectorial no estructurada topológicamente, sea cual sea la naturaleza de la otra capa. No es posible un enfoque vectorial, durante la combinación de capas de vectores sin topología debido a que no se garantizaría una mínima coherencia en la definición de las entidades gráficas (elementos no conectados, superposición de polígonos, etc.).
Cuando las capas analizadas presenten nombres de campos iguales en la tabla principal, éstos se modificarán automáticamente en la capa resultante, añadiendo _A para la primera capa y _B para la segunda para poder diferenciarlos. Esta posibilidad es especialmente útil para estudios de los mismos parámetros en dos instantes de tiempo (p. ej.: cambios en los usos del suelo).
En las combinaciones de polígonos donde las fronteras no provengan de la misma fuente pueden aparecer pequeñas regiones no deseadas, que identificamos como micropolígonos. El programa permite la eliminación selectiva de estos elementos cuando se cumplan criterios de insignificancia geográfica: área muy pequeña y/o relación perímetro/área muy grande.
Si deseamos combinar dos capas ráster, éstas deben corresponder a idéntico ámbito geográfico, tener la misma resolución y las mismas unidades referidas al mismo sistema de referencia. En la combinación ráster / vector, el ráster definirá el ámbito de la capa ráster resultante, si ésta se ha solicitado, o en su defecto, del ámbito implícito de la zona de estudio sobre el cual se generan los informes. En la combinación ráster de dos capas vectoriales debe explicitarse dicho ámbito y resolución.


El primer paso del procedimiento desde el enfoque vectorial consiste en construir la estructura de la base de datos combinada de la capa resultado a partir de las estructuras de la base de datos de las dos capas a analizar. El siguiente paso consiste en determinar las intersecciones lineales de las entidades gráficas entre ambas capas. En las combinaciones donde intervienen polígonos, son las líneas frontera de los polígonos las que determinan dichas intersecciones. Finalmente se determina qué elementos de una capa ceden sus atributos a qué elementos de la otra capa. Este paso se realiza por criterios de superposición o inclusión, implementados a través de la rutina del punto en el polígono.
En el segundo caso, desde un enfoque ráster, se realiza la lectura de las dos capas y se contabilizan los cruces de valores fila a fila. Esta fila, para una capa vectorial, corresponderá a la rasterización en memoria de la región del vector definida por el ámbito preestablecido y la fila en tratamiento. Al finalizar la lectura de las dos capas se ha recopilado la información necesaria, bien para generar una capa ráster resultado donde se localizará geográficamente cada cruce, bien para generar las tablas y cálculos asociados del informe correspondiente. En cualquier caso, antes de volcar sobre el fichero resultado dicha información, se ordena, se asignan las nuevas categorías y se realizan los cálculos estadísticos solicitados.
Finalmente se almacena la metainformación, se cierran los ficheros y se libera la memoria, informando de los eventos más significativos del proceso.

La fórmula que rige dicha operación es:
([Capa1;usos]+[Capa2;usos]+ RECL(CVR([Capa3; usos], [Capa4; usos]), [recl_ND])* ([Limites;municipio]="Berga")Las capas sin intersecciones deben sumarse definiendo 0 como valor exterior al vector. La función Transparentar (CVR) permitirá completar con la capa4 las regiones donde capa3 no está definida (NODATA); debe reclasificarse el resultado de esta operación con un fichero que asigna NODATA a 0 para poder sumar de forma correcta este resultado con las otras capas. Finalmente al multiplicar por una máscara que limita al municipio requerido se obtiene el resultado deseado.

La fórmula introducida es la siguiente:
([Limres;Régimen de protección;]="Reserva natural")* 5 + ([Limres;Régimen de protección;]=/="Reserva natural")* (5*(RECL([Veget],[Veget])+RECL([CapAgro],[CapAgro])+ RECL([Pendien],[Clas_pen])+RECL([SolSing;nivel],[SolSing]))/12)La sintaxis de la función de reclasificación es RECL([capa], [fichero intervalos]). El fichero de intervalos, como el mostrado en la figura 3.2, asignará valores discretos a valores continuos de la capa a reclasificar.
En la fórmula se observa que intervienen operaciones lógicas sobre un campo alfanumérico de una capa vectorial (régimen de protección de Limres), reclasificaciones de capas ráster (vegetación, capacidad agrológica y modelo de pendientes ), y de una capa vectorial (suelo singular), operaciones de una capa con un número y una suma dinámica de capas (capas en memoria como resultado parcial de otras operaciones), correspondiente ésta al criterio de zonas de reserva natural por un lado y a los criterios de clasificación para el resto.
El resultado es, por lo tanto un ráster, donde en cada celda queda definido un nivel de sensibilidad de 0 a 5 en función de los criterios adoptados.
CD_ROM:
Marcer, A; Pons, X. y Vicens, J. (2000): Vulcà. Un sistema d'informació aplicat a la gestió del Parc Natural de la Zona Volcànica de La Garrotxa. CREAF. En prensa.
Internet:
DJ Delorie (1998): Fórum de programción de DJGPP. http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp/1998/07/14/03:21:27