Universidad Central “Marta Abreu” de Las Villas Facultad Matemática, Física y Computación Licenciatura en Ciencia de la Computación Trabajo de Diploma Diseño e implementación de herramientas para el soporte de archivos de formatos de datos científicos en SIG Autor: Maikel F. Carmona Zayas Tutor: MSc. Romel Vázquez Rodríguez Santa Clara 2013 Hago constar que el siguiente trabajo fue realizado en la Universidad “Martha Abreu” de Las Villas como parte de la culminación de mis estudios en la especialidad de Ciencias de la Computación, autorizando que el mismo sea utilizado por la institución, en los fines que esta estime conveniente, tanto de forma parcial como total y además no podrá ser presentado en eventos ni publicados sin el consentimiento del centro de altos estudios. Firma del autor Los abajo firmantes, certificamos que el siguiente trabajo ha sido realizado según los acuerdos establecidos por la dirección de nuestro centro y el mismo cumple con los requisitos de un trabajo de tal envergadura referido a la temática señalada. Firma del Tutor Firma del Jefe de Grupo Investigación I Estar preparado es importante, saber esperar lo es aún más, pero aprovechar el momento adecuado es la clave de la vida. Arthur Schnitzler (1862-1931) II Dedicatoria A mi mamá y mi papá A mis abuelos A mi hermanita A todos mis tíos y primos A todas mis amistades A todas las personas que siempre creyeron en mí A todas las personas que contribuyeron en mi formación personal y profesional III Agradecimientos A mi madre por haber sido incondicional conmigo en estos tiempos, por haberme dado la vida y todo el amor del mundo. A mi padre por ser siempre un ejemplo para mí, por darme todo y ayudarme a convertirme en la persona que soy. A mis a abuelos Mima y Papi que aunque ya no están físicamente, siempre estarán conmigo por ser también padres para mí. A mi hermanita Meilan cuyos besos y abrazos son siempre capaces de alegrar los días más lúgubres. A mis tíos y primos que siempre se preocuparon por mí y me apoyaron cuando los necesité. A mis amigos y compañeros de la vida que junto a ellos compartí grandes momentos. A mi tutor Romel Vázquez por su preocupación y su constancia. Al grupo de Computación Gráfica por haberme demostrado que todos son mis amigos. A Alexis por ayudarme cuando más lo necesitaba y demostrar ser una gran persona. A mis profes que me impartieron con gran amor y dedicación todos los conocimientos necesarios. Maikel F. Carmona Zayas. IV Resumen RESUMEN La integración de técnicas de Visualización Científica en Sistemas de Información Geográfica es una alternativa novedosa para el análisis visual de datos científicos. Dotar a los Sistemas de Información Geográfica con tales herramientas contribuye a la comprensión y análisis de grandes conjuntos de datos con una baja densidad espacial y permite encontrar correlaciones entre las variables en el tiempo y el espacio. En esta investigación se presenta una herramienta para el trabajo con archivos de datos científicos al Sistema de Información Geográfica gvSIG. Esta herramienta es implementada como un módulo de gvSIG y contiene varias funciones para el manejo y transformación de los datos con archivos HDF. En el trabajo se presentan las principales características de las disciplinas involucradas como la Visualización Científica y los Sistemas de Información Geográfica, así como su integración. Los principales aspectos relacionados con el diseño e implementación de la herramienta son explicados con el objetivo de poder agregar nuevas funcionalidades a dicha extensión en el futuro. Se desarrolla un manual de usuario que muestra el uso del sistema. Es una herramienta de propósito general por lo que permite su utilización en múltiples campos de aplicación. V Abstract ABSTRACT The integration of Scientific Visualization techniques into Geographic Information Systems is an innovative alternative for the visual analysis of scientific data. Providing Geographic Information Systems with such tools improves the analysis and understanding of datasets with very low spatial density and allows finding correlations between variables in time and space. In this research a tool for the work with archives of scientific data for gvSIG Geographic Information Systems is presented. This tool is implemented as gvSIG's module and it contains several functions for handling and transformation of the data with archives HDF. This work presents the main features of the implicated disciplines as the Scientific Visualization and Geographic Information Systems, as well as its integration. The main aspects related with the design and implementation of the tool are explained, in order to add new functionalities to this extension in the future. User’s manual is developed that show the use of the system. It is a general-purpose tool, so it allows their use in multiple application fields. VI Índice Contenido Introducción ................................................................................................................................................ 1 Antecedentes ........................................................................................................................................... 3 Problemática ........................................................................................................................................... 3 Objetivo general ...................................................................................................................................... 4 Objetivos Específicos.............................................................................................................................. 4 Hipótesis ................................................................................................................................................. 4 Justificación de la investigación ............................................................................................................. 4 Capítulo 1. Formatos de datos científicos utilizados en la Visualización Científica y sistemas de información geográficos ............................................................................................................................. 5 1.1 Formatos de datos científicos utilizados en la Visualización Científica ...................................... 5 1.1.1 Hierarchical Data Format ...................................................................................................... 5 1.1.2 HDF-EOS .............................................................................................................................. 7 1.1.3 The Network Common Data Form ....................................................................................... 8 1.1.4 FITS .................................................................................................................................... 10 1.2 Sistemas de Información Geográficos, propietarios y libres ...................................................... 12 1.2.1 ARCGIS .............................................................................................................................. 14 1.2.2 GvSIG ................................................................................................................................. 17 1.2.3 GRASS................................................................................................................................ 18 1.2.4 El proyecto SEXTANTE .................................................................................................... 18 1.3 Integración de la Visualización Científica y los Sistemas de Información Geográficos ........... 22 1.3.1 Ejemplos de integración ...................................................................................................... 23 1.3.2 Integración de SIG con formatos de datos científicos, ARCGIS-NetCDF, ARCGIS-HDF24 1.4 Conclusiones Parciales ............................................................................................................... 26 Capítulo 2. Módulo de manipulación de archivos HDF en gvSIG ........................................................... 27 2.1 Diseño de la extensión realizada a gvSIG .................................................................................. 27 2.2 Concepciones importantes en la implementación de la extensión ............................................. 32 2.2.1 2.3 Forma general de crear algoritmos en Sextante .................................................................. 33 Explicación de las principales funcionalidades del módulo....................................................... 33 VII Índice 2.4 Principales métodos de la clase manipuladora ........................................................................... 46 2.5 Conclusiones parciales ............................................................................................................... 52 Capítulo 3. Presentación de los resultados ................................................................................................ 54 3.1 Manual de usuario ...................................................................................................................... 54 3.2 Caso de Estudio .......................................................................................................................... 58 3.3 Conclusiones parciales ............................................................................................................... 61 Conclusiones ............................................................................................................................................. 62 Recomendaciones ..................................................................................................................................... 63 Bibliografía ............................................................................................................................................... 64 VIII Introducción Introducción En el ámbito científico, se genera gran cantidad de información en formato digital, que es necesario distribuir y dada la diferente naturaleza de ésta, es necesario utilizar distintos formatos especialmente adaptados a cada uno de los tipos de datos que se vayan a almacenar. El principal problema, radica en la estandarización y la interoperabilidad, ya que, pese a que existen diversos estándares de almacenamiento de información, no todos son soportados por las distintas aplicaciones informáticas utilizadas, lo que puede presentar problemas en el momento de la difusión y reutilización de dicha información. Con el fin de dar respuesta a las necesidades de almacenamiento y difusión de datos científicos de diversa naturaleza, en un formato flexible e independiente de la plataforma, comenzó a desarrollarse el formato HDF en los laboratorios de la NCSA (National Center for Supercomputing Applications) a partir del año 1988, siendo soportado en la actualidad por el HDF Group, dependiente de la Universidad de Illinois. HDF es una biblioteca y un formato de fichero multi-objeto para la transferencia de datos gráficos y numéricos entre máquinas. Este formato representa una alternativa eficaz al ser adaptado como estructura de almacenamiento de datos (Ullman and Denning, 2012). Actualmente, este formato se utiliza por múltiples organismos, tantos públicos como privados, para la difusión de sus datos y resultados, entre las que se encuentra la NASA, la Agencia Europea del Espacio (ESA), que los aplican en datos procedentes de los sensores MODIS, MERIS o ETM+, entre otros. Visualizar es representar de manera gráfica un fenómeno, ya sea estático (como por ejemplo, con una gráfica de barras) o dinámicamente, (por ejemplo, el cubo de Rubick, que fue ideado para representar las soluciones a problemas espaciales) haciendo uso de medios artificiales para representar uno o más comportamientos. En forma estricta, visualizar es crear una representación visible de algo, ya sea un concepto, idea, un grupo de datos o de algún objeto que por pequeño, enorme o distante, no lo podemos abarcar o alcanzar a ver por métodos comunes. En la computación y el diseño con fines de ingeniería el término visualización tiene un significado mucho más específico, entendiéndose como la transformación y posterior representación de datos científicos y conceptos abstractos, en imágenes. La VisCi (Visualización Científica) según (MORELL and PÉREZ, 2006) significa encontrar una representación visual apropiada para un conjunto de datos que permita mayor efectividad en el análisis y evaluación de los mismos. Según (Rhyne, 1997a) permite la transformación de los datos numéricos o simbólicos y la 1 Introducción información en imágenes geométricas generadas por computadora. Es una metodología para interpretar, a través de una imagen en la computadora, tanto datos de mediciones como los generados por modelos computacionales. La investigación y el desarrollo de la VisCi se han centrado en cuestiones relacionadas con el renderizado de gráficos en tres dimensiones, animaciones de series temporales y visualización interactiva en tiempo real. Se estima que el 50% de las neuronas está dedicado a la visión, además, la densidad de información por unidad de área es notablemente mayor a la de un texto. Por otro lado, la visualización nos permite ver lo que “no es posible ver directamente”, nos posibilita reconocer patrones de comportamiento de los datos, ver en una sola imagen o en una secuencia de imágenes (animación) una gran cantidad de datos y nos facilita la comprensión de algunos conceptos, sobre todo de tipo abstracto. Por ejemplo, si se diera el caso de que tuviéramos una serie de datos, obtenidos de una estación meteorológica, al mostrar la tabla no se distingue alguna relación entre los datos, al hacer una gráfica de los valores vemos que siguen cierto patrón de comportamiento. Entre sus ventajas, está el poder representar datos de varias dimensiones o variables, lográndose por algunos métodos representar cuatro o más variables al mismo tiempo. Por ejemplo, el plano cartesiano puede mostrar dos variables, si agregamos otro plano, podremos ver 3 variables o dimensiones, si agregamos colores, tendremos 4 variables, si se hace alguna animación de la gráfica podremos apreciar una quinta variable. Otra gran ventaja es la independencia del lenguaje, ya que la idea principal del problema está representada de forma gráfica.En los últimos años, los avances en la tecnología han facilitado la obtención de grandes cantidades de información.Para el análisis de estos datos es necesario el uso de técnicas avanzadas debido a que no pueden ser analizados suficientemente bien en forma numérica. La visualización científica (VC) significa encontrar una representación visual apropiada para un conjunto de datos, dado que permita mayor efectividad en el análisis y evaluación de los mismos. Simplifica el análisis, comprensión y la comunicación de modelos, conceptos y datos en la ciencia y la ingeniería. Mediante imágenes de satélite, estaciones de medición de alta precisión, o cualquier otra fuente de este tipo, se generan a diario volúmenes de datos muy grandes y complejos. De todos los datos generados por entes especializados, solo una cuarta parte se almacena, y de éstos solo una cuarta parte realmente se analiza. Como se puede ver se pierden datos valiosos. De muchas informaciones importantes, solamente se utiliza un pequeño porcentaje. Entonces surge la necesidad de nuevos métodos de análisis para examinar estos datos de forma efectiva y extraer de ellos información y conocimientos. Paralelo al 2 Introducción desarrollo de la Visualización Científica se ha ido incrementando el desarrollo de los Sistemas de Información Geográfica (SIG). Un SIG es una integración organizada de hardware, software y datos geográficos diseñado para capturar, almacenar, manipular, analizar y desplegar en todas sus formas la información geográficamente referenciada, con el fin de resolver problemas complejos de planificación y gestión. En un sentido más genérico, los SIG son herramientas que permiten a los usuarios crear consultas interactivas, analizar la información espacial, editar datos, mapas y presentar los resultados de todas estas operaciones (Bolstad, 2005). El uso de Sistemas de Información Geográfica (SIG) ha llegado a ser esencial en todos los campos relacionados con la geografía y el medio ambiente, pasando por las aplicaciones más clásicas de cartografía, urbanismo y gestión de recursos. Actualmente se utilizan los SIG para resolver problemas tan diversos como la planificación de la extinción de incendios, el análisis de riesgos ambientales o la propagación de contaminantes. La presente investigación se enmarca en la integración de un módulo para el soporte de archivos HDF en gvSIG. Las soluciones están dadas en el área del software libre, facilitando la reutilización de las aplicaciones desarrolladas. Antecedentes Este trabajo tiene como antecedentes el proyecto desarrollado en conjunto por el grupo de Computación Gráfica de nuestra universidad y el grupo gvSIG de Valencia, con el objetivo de lograr un SIG libre para el uso de la comunidad internacional. No podemos dejar de mencionar trabajos como el realizado por el Licenciado en Ciencias de la Computación Alexis Fajardo Moya, Visualización de datos multiparamétricos en Sistemas de Información Geográfica, donde se comenzó a integrar nuestro trabajo a gvSIG logrando así una estrecha colaboración entre ambos lados y luego, el efectuado por el Licenciado Leonel Díaz Gómez, Módulo para el trabajo con archivos HDF en el Sistema de Información Geográfica gvSIG. Problemática Los formatos de datos científicos son muy útiles para almacenar y manipular grandes cantidades de datos, que se puedan analizar mediante técnicas de visualización científica. Se hace necesario la incorporación de estas capacidades a los SIG libres para aumentar su potencial e integración con técnicas de Visualización Científica. 3 Introducción Objetivo general Desarrollar herramientas para un SIG que permita la manipulación y el trabajo con archivos de formatos de datos científicos. Objetivos Específicos Analizar los principales formatos de datos científicos y los SIG disponibles. Determinar un formato de datos científico y un SIG adecuado para integrar sus principales funcionalidades. Implementar herramientas que permitan el trabajo con formatos de datos científicos para un SIG. Hipótesis La integración de los formatos de datos científicos más utilizados en la VisCi con los SIG constituye una poderosa herramienta para los investigadores que trabajan en las fronteras de estas dos disciplinas. El desarrollo de herramientas para gvSIG que permita el trabajo con archivos HDF pone de manifiesto las ventajas de esta integración. Justificación de la investigación Nuestro Centro de Estudios Informáticos cuenta con el personal capacitado, con la tecnología necesaria y además la necesidad de desarrollar un SIG de software libre que presente este tipo de funcionalidades para el trabajo con datos científicos. 4 Capítulo 1 Capítulo 1. Formatos de datos científicos utilizados en la Visualización Científica y sistemas de información geográficos En el presente capítulo se tratan las generalidades de los principales formatos de datos científicos utilizados en la Visualización Científica, se abordan las principales características de los SIG, así como una descripción de los más utilizados en el mundo, ya sea software libre o propietario. Además, se brindan elementos que evidencian la integración de la VisCi con los SIG. 1.1 Formatos de datos científicos utilizados en la Visualización Científica A continuación se describen los principales formatos de datos utilizados en la visualización científica, algunos de estos de gran complejidad pero de una amplia gama de utilidades a la hora de realizar el proceso de visualización. 1.1.1 Hierarchical Data Format Hierarchical Data Format, más conocido por HDF, es desarrollado por el Centro Nacional de Aplicaciones de Supercómputo (National Center for Supercomputing Applications, NCSA) en la Universidad de Illinois. Es una biblioteca y un formato de fichero multi-objeto para la transferencia de datos gráficos y numéricos entre máquinas (Ullman and Denning, 2012). HDF se encuentra disponible de forma gratis. La distribución consiste en la biblioteca HDF, las utilidades de línea de comando HDF y una suite de prueba (código fuente solamente). HDF presenta 4 niveles de interacción. En su nivel más bajo es un formato de fichero físico para el almacenamiento de datos científicos. En su nivel más alto es una colección de utilidades y aplicaciones para manipular, ver y analizar datos en los ficheros HDF, y entre esos niveles HDF, una biblioteca de programas que provee APIs de alto nivel y una interfaz de datos de bajo nivel (Figura 1). 5 Capítulo 1 Figura 1. Niveles de interacción de HDF Aplicaciones generales En el nivel más alto hay utilidades de línea de comandos de HDF, aplicaciones de NCSA que soportan visualización de datos y análisis, y variedad de aplicaciones de terceros desarrolladores. Existen utilidades de línea de comandos de HDF para: Convertir de un formato a otro (por ejemplo, desde y hacia JPEG/HDF) Analizar y ver ficheros HDF (siendo hdp una de las herramientas más útiles) Manipular los ficheros HDF De las utilidades HDF, la “hdp” es una de las más importantes, su función está dada en que provee información rápida sobre los contenidos y objetos de datos en un fichero HDF (Long et al., 2013), puede listar los contenidos de los ficheros HDF en varios niveles con diferentes detalles, además puede también vaciar los datos de uno o más ficheros en el fichero, en formato binario o ASCII. Compresión de datos HDF 4.0 (y versiones posteriores) soportan una interfaz de compresión de bajo nivel, la cual permite que cualquier objeto de dato sea comprimido utilizando una variedad de algoritmos. Actualmente solo tres algoritmos de compresión están soportados: Run-length Encoding (RLE), Huffman adaptativo, y un codificador de diccionario LZ-77 (el algoritmo de decodificación de gzip) (Yeh et al., 2002). Los planes para algoritmos futuros incluyen un codificador de diccionario Lempel/Ziv-78, un codificador aritmético y un algoritmo rápido de Huffman. HDF 4.0 (y entregas posteriores) soportan compresión de n-bit para SDS, RLE (Run- Length Encoding), IMCOMP, y compresión JPEG para imágenes de puntos. 6 Capítulo 1 El fichero HDF Un fichero HDF contiene un encabezamiento de fichero, al menos un bloque descriptor de datos, y cero o más elementos de datos. El encabezamiento de fichero identifica el fichero como un fichero HDF. Un bloque descriptor de datos contiene un número de descriptores de datos. Un descriptor de datos y un elemento de dato juntos, conforman un objeto de dato, el cual es la estructura básica de agrupamiento para el encapsulamiento de datos en un fichero HDF. El fichero HDF posee una serie de rasgos que se mencionan a continuación: Es versátil. HDF soporta muchos tipos diferentes de modelos de datos. Cada modelo de dato define un conjunto específico de tipo de dato y provee una API para lectura, escritura y organización de datos y metadatos del tipo correspondiente. Los modelos de datos soportados incluyen arreglos multidimensionales, imágenes de puntos, y tablas (Poinot, 2010). Es auto-descriptivo, permitiendo una aplicación para interpretar la estructura y contenidos de un fichero sin ninguna información proveniente del exterior (Poinot, 2010). Es flexible. Con HDF se pueden mezclar y asociar objetos relacionados, agrupados en un fichero y acceder a ellos como un grupo o como objetos individuales. Los usuarios pueden además crear sus propias estructuras de agrupamiento utilizando un rasgo de HDF llamado vgroups (Poinot, 2010). Es extensible. Puede acomodar fácilmente nuevos modelos de datos, sin tener en cuenta si fueron adicionados por el equipo de desarrolladores de HDF o por los usuarios de HDF (Poinot, 2010). Es portable. Los ficheros HDF pueden ser compartidos a través de la mayoría de las plataformas comunes, incluyendo muchas estaciones de trabajo y computadoras de alto desempeño. Un fichero HDF creado en una computadora puede ser leído en un sistema diferente sin modificación alguna(Poinot, 2010). 1.1.2 HDF-EOS Hierarchical Data Format (HDF) es el formato de datos estándar para todos los productos de datos de la NASA Earth Observing System (EOS). HDF es un formato de archivo de varios objetos desarrollado por el Grupo HDF. El Grupo HDF desarrolló HDF para ayudar a los usuarios en la transferencia y manipulación de datos científicos a través de diversos sistemas operativos y plataformas de ordenador, usando FORTRAN y C 7 Capítulo 1 llamando a las interfaces y los servicios públicos. HDF soporta una variedad de tipos de datos: arreglos n-dimensionales de datos científicas, tablas, anotaciones de texto, varios tipos de imágenes ráster y sus paletas de colores asociados y metadatos. La biblioteca contiene interfaces de HDF para almacenar y recuperar estos tipos de datos en formatos comprimidos o sin comprimir. Para cada objeto de datos en un archivo de HDF, etiquetas predefinidas identifican el tipo, la cantidad y las dimensiones de los datos, y la ubicación del archivo de objetos diversos. La capacidad de autodescripción de archivos HDF ayuda a los usuarios a entender completamente la estructura del archivo y el contenido de la información almacenada en el propio archivo. Un programa interpreta y se identifican los tipos de etiquetas en un archivo HDF y procesa los datos correspondientes. Un archivo HDF único también puede acomodar diferentes tipos de datos, tales como datos simbólicos, numérico y gráfico, sin embargo, las imágenes de trama y matrices multidimensionales a menudo no están geolocalizados. Debido a que muchos datos de ciencias terrestres estructuras necesitan ser geolocalizados, el grupo HDF desarrolló el formato HDF-EOS con los convenios adicionales y tipos de datos para los archivos HDF. HDF-EOS es compatible con tres tipos de datos geoespaciales: la red, el punto y barrido, proporcionando un acceso uniforme a los diversos tipos de datos en un contexto geoespacial. La biblioteca HDF-EOS software permite a un usuario consulta o subconjunto del contenido de un archivo de coordenadas de tierra y de tiempo si existe una dimensión espacial en los datos. Herramientas que procesan los archivos estándar de HDF también leen archivos HDF-EOS, sin embargo, las llamadas de la biblioteca estándar de HDF no puede acceder a los datos de geolocalización, datos de tiempo y metadatos producto tan fácilmente como con llamadas a bibliotecas HDF-EOS. 1.1.3 The Network Common Data Form The Network Common Data Form o netCDF, es una interfaz a una biblioteca de funciones de acceso a datos diseñada para el almacenamiento y recuperación de datos en forma de arreglos, donde cada arreglo es una estructura rectangular n-dimensional (con n 0,1,2 ) en la que todos sus elementos son del mismo tipo de dato (ejemplo: caracteres de 8-bit, entero de 32-bit) y un escalar (un solo valor) equivale a un arreglo 0-dimensional. La biblioteca netCDF implementa un tipo de datos abstracto, por lo que todas las operaciones para acceder y manipular datos en un conjunto de datos de netCDF, deben usar sólo las funciones que provee la interfaz. La representación de los datos está oculta para aplicaciones que usen la interfaz, así que la 8 Capítulo 1 forma en la cual estos se encuentran almacenados puede ser cambiada sin afectar los programas existentes. La representación física de los datos de formato netCDF está diseñada para ser independiente de la computadora en que se almacenen. Los datos son vistos como una colección de objetos portables y auto-descriptibles que pueden ser accedidos a través una simple interfaz. Se puede acceder directamente a sus valores, sin conocer detalles sobre la forma en que se encuentran almacenados. Las informaciones auxiliares sobre los datos, tales como, las Units que utilizaron, se pueden almacenar conjuntamente con los datos. Las Utilidades Genéricas (Genericutilities) y los programas de aplicación pueden acceder a conjuntos de datos en netCDF y transformar, combinar, analizar o mostrar campos específicos de los datos. El desarrollo de tales aplicaciones ha dado lugar a una mejor accesibilidad de datos y una mejor reutilización de software para la administración, análisis y visualización de datos orientados a arreglos. La biblioteca netCDF está soportada para varios sistemas operativos UNIX y tiene también disponible un puerto de Microsoft Windows. El programa fue también portado hacia otros sistemas operativos y probado en los mismos, asistidos por usuarios con acceso a esos sistemas, antes de cualquier lanzamiento mayor. Desempeño Una de las metas de netCDF es soportar acceso eficiente a pequeños subconjuntos de grandes conjuntos de datos. Para lograr esto, netCDF utiliza accesos directos en lugar de accesos secuenciales. Esto puede ser mucho más eficiente cuando el orden en que los datos son leídos es diferente del orden en que fueron escritos, o cuando debe ser leído en diferentes órdenes para distintas aplicaciones. La cantidad de costo para la representación externa portable depende de muchos factores, incluyendo el tipo de dato, el tipo de computadora, la granularidad del acceso a datos, y de cuán bien se ha ajustado la implementación a la computadora en la que está corriendo. Este costo es típicamente pequeño en comparación con todo el conjunto de recursos utilizados por una aplicación. De cualquier forma, el costo de la capa de representación externa es, usualmente, un precio razonable a pagar por acceso de datos portables. A pesar de que la eficiencia en el acceso a datos ha sido un asunto importante en el diseño e implementación de netCDF, todavía es posible utilizar la interfaz netCDF para acceder a datos de formas ineficientes: por ejemplo, mediante la petición de una porción de datos que requiere un sólo valor de cada registro. 9 Capítulo 1 Partes de un fichero netCDF Un conjunto de datos de netCDF clásico o de desplazamiento de 64 bit es almacenado como un sólo fichero que consiste en dos partes: Un encabezado (header), conteniendo toda la información sobre las dimensiones, atributos y variables, excepto para los datos de variable. Una parte de datos, que comprende los datos de tamaño fijo (datos para variables que no poseen una dimensión ilimitada) y los datos de tamaño variable (datos para variables que presentan una dimensión ilimitada). El encabezado, al principio del fichero, contiene información sobre las dimensiones, variables, y atributos en el fichero, incluyendo sus nombres, tipos, y otras características. La información sobre cada variable incluye el desplazamiento al inicio de los datos de la variable para variables de tamaño fijo, o el desplazamiento relativo de otras variables dentro de un registro. El encabezado también contiene longitudes de dimensión e información necesaria para trasladar (map) índices multidimensionales de cada variable hacia los desplazamientos apropiados dentro del fichero. Las partes de datos con tamaño fijo que siguen al encabezamiento contienen todos los datos de variables para las variables que no presentan una dimensión ilimitada. Los datos para cada variable son almacenados contiguamente en esta parte del fichero. Si no hay variables con dimensión ilimitada, esta es la última parte del fichero netCDF. La parte de datos de registro que le sigue a los datos de tamaño fijo consiste en un número variable de registros de tamaño fijo, que cada uno contiene datos para todas las variables de tipo registro. Los datos registro para cada variable son almacenados contiguamente en cada registro. El orden en que aparecen los datos de la variable en cada sección de datos, es el mismo en que fueron definidas: un orden numérico incremental por el ID de variable de netCDF. Este conocimiento puede ser utilizado a veces para mejorar el desempeño de acceso a datos, puesto que el mejor acceso a datos es actualmente logrado mediante la lectura y escritura de datos en orden secuencial. 1.1.4 FITS FITS o Flexible Image Transport System es el formato de archivo más utilizado comúnmente en el mundo de la astronomía, es a menudo utilizado para almacenar también datos que no son imágenes, como espectros electromagnéticos, listas de fotones, cubos de datos y muchos más. Un fichero FITS 10 Capítulo 1 podría contener varias extensiones, y cada una de ellas podría contener datos de un objeto. Por ejemplo, es posible almacenar imágenes de rayos X y también imágenes pertenecientes al infrarrojo en el mismo archivo FITS. La mayor ventaja de FITS para datos científicos es que la información de las cabeceras es legible en ASCII, de modo que un usuario puede examinar las cabeceras para investigar un archivo de procedencia desconocida. Cada archivo FITS consiste en una o más cabeceras que contienen secuencias de 80 cadenas de caracteres fijos que llevan pares de valores, interpolados entre los bloques de datos. Los pares de valores proveen información (metadatos) como son el tamaño, origen, formato binario de los datos, comentarios, historia de los datos y cualquier otra información que el creador desee. Imágenes El más joven y quizás más usado tipo de datos en FITS es una imagen con una cabecera o bloque de datos. El término "imagen" es aplicado con cierta libertad, puesto que el formato soporta matrices de dimensiones arbitrarias -- una imagen con datos normales normalmente está en 2-D o 3-D (con la tercera dimensión se representa el plano de color). Los datos pueden encontrarse en otros formatos como los enteros o de punto flotante, siendo especificados en las cabeceras. Las cabeceras de una imagen FITS pueden contener información acerca de uno o más sistemas de coordenadas que cubren la imagen por sí misma. Las imágenes contienen un sistema implícito de coordenadas cartesiano que describe la localización de cada pixel en la imagen, pero los usos científicos requieren que se trabaje con un sistema de coordenadas mundial. Como FITS se ha ido generalizando desde sus inicios, las especificaciones del sistema de coordenadas mundial han venido siendo más y más sofisticadas: desde muy temprano las imágenes en FITS permitieron un factor escalar simple para representar el tamaño de los píxeles; pero versiones recientes del estándar permiten múltiples sistemas de coordenadas no lineales, representando distorsiones arbitrarias de la imagen. Tablas FITS también soporta datos tabulados con filas y columnas multidimensionales. Los formatos de tablas binarios y en ASCII han sido especificados, de tal modo que los datos en cada columna de la tabla pueden estar en un formato diferente de los demás datos. Junto con la capacidad de múltiples cadenas y cabeceras o bloques de datos, los archivos FITS pueden representar bases de datos relacionales, así son capaces de representar desde la información más compleja hasta la más simple. 11 Capítulo 1 Utilizando archivos FITS FITS está soportado mediante bibliotecas disponibles en los lenguajes más utilizados en el ámbito científico, incluyendo C, FORTRAN, Perl, PDL, Python, e IDL. La Oficina de Soporte de FITS de la NASA/GSFC mantiene una lista de bibliotecas y plataformas que actualmente soportan FITS. El procesado de imágenes con programas como GIMP y photoshop está limitado a la lectura de las imágenes simples. Es frecuente que no puedan interpretar las tablas y bases de datos más complejas; por ello, los equipos científicos normalmente escriben sus propios programas para tratar la información que almacenan en formato FITS. Muchos entornos científicos hacen uso de un sistema de coodenadas en la cabecera de FITS para mostrar, comparar, rectificar y realizar otras operaciones que impliquen una manipulación directa de las imágenes FITS. Un ejemplo es la biblioteca para transformar las coordenadas incluida con PDL, ésta biblioteca es conocida como PLOT MAP, también está la biblioteca AST escrita en C, perteneciente al Proyecto Starlink. 1.2 Sistemas de Información Geográficos, propietarios y libres En el sentido estricto de la palabra un SIG es cualquier sistema de información capaz de integrar, almacenar, editar, analizar, compartir y mostrar la información geográficamente referenciada. En un sentido más genérico, los SIG son herramientas que permiten a los usuarios crear consultas interactivas, analizar la información espacial, editar datos, mapas y presentar los resultados de todas estas operaciones.Existen en la actualidad dos grupos de SIG en el mundo: los propietarios y los libres (GUTIERREZ PUEBLA, 1997). Funcionamiento de un SIG Un Sistema de Información Geográfica puede mostrar la información en capas temáticas para realizar análisis multi-criterio complejos (Figura 2). Un SIG se define a menudo como una combinación de un sistema de gestión de base de datos, un conjunto de operaciones para examinar los datos y un sistema de visualización gráfica que están vinculados al proceso de análisis espacial. 12 Capítulo 1 Figura 2.Ejemplos de capa temáticas para el análisis multi-criterio de un SIG Los SIG son herramientas cartográficas que permiten la creación de mapas en tiempo real y el análisis de los impactos de los cambios en el mapa de forma interactiva (Rhyne, 1997b). Otras definiciones hacen énfasis en los SIG como disciplina o ciencia aplicada que incluyen en su formulación no solo al software, sino al hardware, al equipo técnico y la filosofía de trabajo, integrándolo todo de forma global. Según (Great Britain. Committee of Enquiry into the Handling of Geographic Information, 1987) es un sistema para capturar, almacenar, comprobar, manipular y visualizar datos que estén espacialmente referenciados a la tierra. Según (Clarke, 1990) es un sistema automatizado para la captura, almacenamiento, composición, análisis y visualización de datos espaciales. Otra definición es en la que se considera como un sistema de hardware, software y procesamiento diseñado para la captura, gestión, manipulación, análisis, modelado y visualización de datos espacialmente referenciados para resolver problemas complejos de planeamiento y gestión (Cowen, 1989). El SIG funciona como una base de datos con información geográfica (datos alfanuméricos) que se encuentra asociada por un identificador común a los objetos gráficos de un mapa digital. De esta forma, señalando un objeto se conocen sus atributos e, inversamente, preguntando por un registro de la base de datos se puede saber su localización en la cartografía. La razón fundamental para utilizar un SIG es la gestión de información espacial. El sistema permite separar la información en diferentes capas temáticas y las almacena independientemente, permitiendo trabajar con ellas de manera rápida y sencilla, facilitando la posibilidad de relacionar la información existente a través de la topología de los objetos, con el fin de generar otra nueva que no podríamos obtener de otra forma. Las principales cuestiones que puede resolver un Sistema de Información Geográfica, ordenadas de menor a mayor complejidad, son: 13 Capítulo 1 1. Localización: preguntar por las características de un lugar concreto. 2. Condición: el cumplimiento o no de unas condiciones impuestas al sistema. 3. Tendencia: comparación entre situaciones temporales o espaciales distintas de alguna característica. 4. Rutas: cálculo de rutas óptimas entre dos o más puntos. 5. Pautas: detección de pautas espaciales. 6. Modelos: generación de modelos a partir de fenómenos o actuaciones simuladas. Por ser tan versátiles, el campo de aplicación de los Sistemas de Información Geográfica es muy amplio, pudiendo utilizarse en la mayoría de las actividades con un componente espacial. La profunda revolución que han provocado las nuevas tecnologías ha incidido de manera decisiva en su evolución. Existen en la actualidad gran diversidad de Sistemas de Información Geográficos, algunos de software libre y otros de software propietarios. En este subepígrafe analizaremos con profundidad algunos de ellos. 1.2.1 ARCGIS ArcGIS es el nombre de un conjunto de productos de software en el campo de los Sistemas de Información Geográfica o SIG, producido y comercializado por ESRI. Bajo el nombre genérico ArcGIS se agrupan varias aplicaciones para la captura, edición, análisis, tratamiento, diseño, publicación e impresión de información geográfica. ArcGIS Desktop, la familia de aplicaciones SIG de escritorio, es una de las más ampliamente utilizadas, incluyendo en sus últimas ediciones las herramientas ArcReader, ArcMap, ArcCatalog, ArcToolbox, ArcScene y ArcGlobe, además de diversas extensiones. ArcGIS Desktop se distribuye comercialmente bajo tres niveles de licencias que son, en orden creciente de funcionalidades (y coste): ArcView, ArcEditor y ArcInfo. ArcView Es un software GIS para visualizar, crear, manipular y gestionar información geográfica; estos corresponden a lugares, direcciones, posiciones en terreno, áreas urbanas y rurales; regiones y cualquier tipo de ubicaciones en terrenos determinados. Esta información es trabajada de manera sistémica, lo que representa una diferencia sustancial a lo relacionado al trabajo con información planos y mapas, 14 Capítulo 1 permitiéndonos explorar, ver y analizar los datos según parámetros, relaciones y tendencias que presenta nuestra información, teniendo como resultado nuevas capas de información, mapas y nuevas bases de datos. Maniobrabilidad ArcView GIS es el software desktop más usado de los GIS del mundo, porque entrega de una forma fácil el trabajo en datos geográficos. Tiene una interfaz gráfica amigable, en la cual se puede desplegar de manera rápida la información geográfica. El aprendizaje del software es rápido, teniendo algunos conocimientos de Sistemas de Información Geográfica previos. Con ArcView GIS se puede construir los mapas dinámicos e inteligentes que permiten a visualizar patrones, tendencias y singularidades en sus datos. ArcView GIS incluye formas fáciles de levantar mapas, formatos predefinidos de mapas y una librería de elementos extensa, que permiten elaborar mapas de calidad rápidos y como el usuario desee. Los mapas terminados se pueden guardar, imprimir, exportar y ubicar en otros documentos o usos. ArcView GIS también permite visualizar sus datos como cartas, informes, con volumen, con gráficos e imágenes; teniendo la posibilidad de editarlos expeditamente (Figura 3). Figura 3. Visualización de datos con ArcView Análisis Espacial 15 Capítulo 1 ArcView GIS permite consultar datos, realizar predicciones y examinar relaciones entre estos. ArcView GIS incluye las herramientas y los procedimientos que permiten analizar datos espaciales y que estos análisis puedan visualizarse fácilmente. ArcView GIS tiene la gran capacidad de realizar geoprocesos, lo que permite desarrollar ajustes dinámicos de la información, adaptándola a los requerimientos de análisis del usuario; con esto se tiene la capacidad de construir procesos analíticos y flujos de trabajo. Arc-Gis ArcEditor Para la edición y gestión avanzada de información, ArcEditor es parte de la familia ArcGIS. Con esta modalidad se puede editar, manipular y gestionar datos de naturaleza geográfica. Tiene toda la funcionalidad de Arcview GIS, agregando más herramientas que puedan crear, editar y asegurar el proceso de explotación de datos con una calidad a toda prueba. ArcEditor está hecho para soportar la edición desde múltiples editores como desde un sólo editor de datos geográficos. Tiene amplio y variado conjunto de herramientas para trabajar la gráfica y la data alfanumérica. Dentro de sus funcionalidades se encuentra: Automatizar el control de calidad. Diseñar mejor bases de datos geográficas. Modelar flujos de trabajo multiusuario. Generar y editar entidades gráficas geográficas mediante edición visual. Crear y editar elementos de topología. Diseñar planes de edición, validación y guardar la información tratada. Administrar y explorar redes geométricas. Mejorar el rendimiento de la edición. Desconectar de la base de datos y realizar edición en trabajos de campo. ArcEditor se utiliza para trabajar con información compleja. El amplio número de herramientas y los diferentes procesos de trabajo con que cuenta, permiten generar y mantener la información geográfica de manera sencilla y eficiente (Figura 4). 16 Capítulo 1 Figura 4.Visualización con Arc-Editor 1.2.2 GvSIG GvSIG (Generalitat Valenciana SIG) surge como un proyecto amparado por la Generalitat Valenciana de España que, a finales de 2003, promocionó un concurso para el desarrollo de un SIG con una serie de características propias como: multiplataforma, de código abierto, modular, sin licencias, interoperable con formatos de otros programas (Autocad, Microstation, Arcview), y sujeto a estándares de la OGC (Open Geospatial Consortium) (Anguix and Carrión, 2005). El resultado ha sido una aplicación que ya tiene disponibles varias versiones al público y gran parte de las funcionalidades propias de los SIG cubiertas, aunque se desarrolla constantemente. Las funciones básicas que cualquier usuario desearía como diseño de impresión o soporte de formatos de imagen típicos están incorporadas sin necesidad de ningún módulo adicional. GvSIG posee una jerarquía de clases bien estructurada para la incorporación de nuevas funcionalidades. Permite la lectura de varios formatos de datos geográficos y no geográficos en forma de tablas así como la conexión con varias bases de datos. Este SIG posee las aplicaciones traducidas a veinte idiomas; toda la documentación está disponible en 5 idiomas, incluyendo español e inglés, por lo que se ha convertido en un SIG muy popular en el mundo hispano (Anguix, 2009). Se ha reportado su utilización en varios países europeos como Francia, Italia, Suiza, Austria, Reino Unido y Alemania, donde se encuentra la mayor comunidad de usuarios de gvSIG no hispanohablantes. Varias instituciones y universidades prestigiosas han utilizado esta aplicación, tal es el caso de la Agencia Espacial Europea y Oxford Archaeology. Varios países africanos también han realizado trabajos con gvSIG, pero su mayor uso se ha reportado en Iberoamérica. 17 Capítulo 1 La simplicidad para la incorporación de nuevas funcionalidades, la disponibilidad de toda su documentación, el soporte técnico suministrado por la lista de distribución de sus desarrolladores y el apoyo institucional del proyecto, hace que se considere el SIG más adecuado para la incorporación de un módulo de visualización científica para el trabajo con formatos de datos científicos. 1.2.3 GRASS GRASS (de las siglas en inglés Geographic Resources Analysis Support System) fue inicialmente concebido y desarrollado en 1982 por el laboratorio de investigación del cuerpo de ingenieros del ejército de los Estados Unidos (USA-CERL) para la gestión del territorio y la gestión medioambiental (GRASS, 2008). GRASS dispone de un gran número de herramientas y utilidades. Originalmente estuvo más orientado al aspecto matricial (ráster) de la información, aunque contaba con un potente editor de topología vectorial. Sin embargo, en las últimas versiones se ha potenciado el aspecto vectorial, y sobre todo la conexión externa a bases de datos. En cuanto a la interfaz de usuario, también ha experimentado una gran evolución, teniendo en cuenta que en las primeras versiones todo el control se hacía por medio de comandos tipo UNIX. Otro gran avance ha sido la herramienta de visualización 3D (NVIZ), que se destaca por su potencia gráfica y las opciones de generación de salidas gráficas que permite. 1.2.4 El proyecto SEXTANTE SEXTANTE es un proyecto desarrollado para la Junta de Extremadura por la Universidad de Extremadura, a través de la Titulación de Ingeniería Técnica Forestal del Centro Universitario de Plasencia. El objetivo de SEXTANTE es desarrollar un Sistema de Información Geográfica (SIG) especialmente adaptado para el análisis de datos geográficos, con especial énfasis en las actividades de gestión del medio y disciplinas afines, este desarrollo se lleva a cabo apoyándose en algún software ya existente e implementando en el mismo las capacidades requeridas. Originalmente, SEXTANTE tuvo como base el SIG alemán SAGA, para el cual se desarrollaron un amplio número de extensiones y modificaciones en su núcleo. Actualmente, gvSIG ha sustituido a SAGA como software base, principalmente por conformar una estructura de apoyo más sólida y con un mayor potencial de futuro. Existen cuatro elementos básicos de SEXTANTE, los cuales permiten el acceso a todas las herramientas de formas diversas, en función de las necesidades de cada usuario y cada proyecto de trabajo (Figura 5): 18 Capítulo 1 Figura 5. Elementos básicos de SEXTANTE El gestor de extensiones es el elemento principal para el control de las extensiones o módulos. Este gestor conforma un conjunto de herramientas con todas las extensiones de SEXTANTE que pueden ejecutarse desde el mismo. A su vez, estas extensiones se agrupan en bloques de acuerdo con el tipo de análisis que lleven a cabo, para así facilitar su empleo y manejo. (Figura 6). Figura 6. Gestor de Extensiones 19 Capítulo 1 El modelizador gráfico es una herramienta que permite la creación de modelos complejos mediante una interfaz sencilla, simplificando procesos que impliquen el uso de varias extensiones de SEXTANTE de forma encadenada. Mediante el modelizador puede diseñarse de forma sencilla una nueva extensión que tome datos del usuario y mediante ellos alimente a una serie de extensiones, de forma que las salidas generadas por estas puedan ser empleadas como entradas en otras distintas. Procesos que implican varios pasos puede reducirse así a uno único, definiendo el flujo de datos entre las distintas extensiones involucradas. El modelizador cuenta con un lienzo de trabajo donde se ve la estructura del modelo planteado, y en la parte izquierda un conjunto de elementos que se pueden añadir al modelo para ir conformándolo progresivamente (Figura 7). Figura 7. El modelizador La consola de SEXTANTE permite a los usuarios más avanzados hacer un uso más ágil del programa y automatizar tareas mediante la creación de sencillos scripts (Figura 8). 20 Capítulo 1 Figura 8. Línea de comandos El historial de procesos registra los distintos procesos que se han llevado a cabo con SEXTANTE, bien desde el gestor de extensiones o bien desde la línea de comandos. Así, los procesos pueden incluir desde la ejecución de una extensión de SEXTANTE hasta la creación de una vista o la adición de capas a esta, entre otras operaciones (Figura 9). Figura 9. Historial 21 Capítulo 1 1.3 Integración de la Visualización Científica y los Sistemas de Información Geográficos A finales de los años ochenta y principio de los noventa la VisCi y los SIG se desarrollaron paralela e independientemente (Rhyne, 1997b). Los esfuerzos para desarrollar estándares de datos espaciales rara vez consideraron la forma en que estos se visualizaban. Las bibliotecas gráficas y los estándares evolucionaron independientemente de los modelos de datos. Como resultado de esto se evidenciaron muchas ineficiencias asociadas con la visualización de datos geográficos. Entre ellas se incluyen dificultades con el registro de los datos espaciales dentro de Sistemas de Visualización Científica, engorrosas producciones de secuencias de animaciones en SIG y quizás la más importante, la falta de conexión entre bases de datos y los ambientes de visualización que soportaban la visualización de datos espaciales (Hearnshaw and Unwin, 1994). Los desarrolladores de herramientas SIG y de VisCi hicieron esfuerzos para ampliar e integrar sus sistemas(Rhyne et al., 1994). Los desarrolladores de SIG estudiaron la forma de incorporar las capacidades de la animación de series de tiempo en tres dimensiones en su software. Los desarrolladores de herramientas de VisCi comenzaron la construcción de lectores de datos que soportaban los formatos de datos espaciales como modelos digitales de elevación, así como formatos de SIG comerciales. Al examinar estos esfuerzos fueron definidos cuatro niveles de métodos de integración entre SIG y VisCi: rudimentario, operacional, funcional y mezclado (Rhyne, 1997b). El enfoque rudimentario utiliza una mínima integración de datos e intercambio entre las dos tecnologías. El nivel operacional proporciona coherencia entre los datos mientras se eliminan las redundancias entre las dos tecnologías (Cook et al., 1997). La forma funcional intenta proporcionar una comunicación transparente entre los entornos de software correspondientes (Mitas et al., 1997). El enfoque mezclado se refiere al desarrollo de sistemas donde los conceptos de cartografía, SIG y VisCi se funden en una única herramienta. Lograr la integración funcional de SIG y herramientas de VisCi requiere de estándares abiertos de datos de SIG, enlaces a programas que permitan que las herramientas de VisCi realicen análisis de datos espaciales y funciones de extracción de información. También es factible el uso de sistemas expertos o una arquitectura basada en reglas con agentes inteligentes para facilitar la comunicación transparente entre SIG y herramientas de VisCi(Treinish and Rogowitz, 1993). Los sistemas que implementan el enfoque mezclado replantean el proceso de desarrollo de herramientas SIG-VisCi. En este sentido la cartografía está bien posicionada como puente entre ambas tecnologías. 22 Capítulo 1 Algunos de los primeros intentos del enfoque mezclado entre los SIG y la VisCi se han materializado a través de herramientas como GeoVista Studio y Snap-TogetherVisualization. Ambas herramientas están basadas en redes de componentes que permiten la construcción de complejos flujos de trabajos que vinculan componentes para el manejo de formatos de datos geográficos y de diferentes técnicas de VisCi. 1.3.1 Ejemplos de integración SnapTogetherVisualization Snap-Together Visualization es una herramienta Web que permite que los datos de los usuarios sean mezclados y correlacionados de forma dinámica en visualizaciones coordinadas para la construcción personalizada de interfaces de exploración sin necesidad de programación. El modelo conceptual de Snap-Together se basa en un modelo de base de datos relacional. Este modelo permite que las relaciones sean cargadas durante la visualización y se coordinen basándose en las características que las unen. Los usuarios pueden crear diferentes tipos de coordinaciones tales como: barridos, vistas de detalles, vistas globales y desplazamientos sincronizados. Los desarrolladores de visualización pueden integrar al sistema sus visualizaciones independientes con un API simple. La evaluación de esta herramienta reveló beneficios en cuanto a aspectos cognitivos y su usabilidad, mejorando el rendimiento de los usuarios entre un 30 y un 80%, dependiendo de la tarea realizada (North and Shneiderman, 2000). Algunas de las técnicas de visualización que están incluidas en esa herramienta son los Diagramas de Dispersión y los TreeMap (North and Shneiderman, 2000). GeoVista Studio GeoVista Studio es una herramienta de código abierto que implementa un ambiente de desarrollo basado en componentes y suministra una interfaz de programación visual como muchos sistemas de VisCi, a través de la cual los usuarios pueden construir aplicaciones de forma rápida utilizando JavaBeans2. El ambiente de programación visual permite a los analistas empaquetar funcionalidades dentro de un programa de trabajo. GeoVista soporta el desarrollo de aplicaciones geográficas y no geográficas. Para soportar la interoperabilidad de datos OpenGIS, los desarrolladores de GeoVista han comenzado a adaptar y extender la biblioteca GeoTools en cuanto al acceso a datos y los métodos de visualización. GeoTools es una biblioteca complementaria de código abierto desarrollada en Java para el desarrollo de 23 Capítulo 1 soluciones OpenGIS que permite el acceso a datos geoespaciales, el análisis y la representación de tareas. El principal objetivo de GeoVista Studio es soportar la fusión de diversas capacidades visuales y analíticas en una herramienta de análisis que posibilite la multiperspectiva. GeoVista incluye además un conjunto de técnicas de visualización clásicas como Diagramas de Dispersión, Coordenadas Paralelas y SelfOrganizingMap (SOM (Gahegan et al., 2002, Takatsuka and Gahegan, 2002). La herramienta ExploratorySpatio-Temporal Analysis Tollkit (ESTAT) fue incluida al GeoVista Studio y constituye una buena herramienta para analizar datos espaciotemporales asociados a mapas vectoriales de áreas en formato ESRI shape. 1.3.2 Integración de SIG con formatos de datos científicos, ARCGIS-NetCDF, ARCGIS-HDF Con el vertiginoso desarrollo de los SIG y las necesidades de la implementación de paquetes dentro de estos que permitan el trabajo con funcionalidades de datos científicos, ha surgido la necesidad de una integración de ambas perspectivas con el objetivo de lograr una mejor visión panorámica de la realidad a visualizar. En la actualidad el grupo ESRI ha desarrollado una herramienta denominada ArcGis, que incorpora dentro de sus módulos el trabajo con datos de tipo NetCDF. Todas las versiones siguientes a ArcGis 9.2 poseen esta funcionalidad para el trabajo con formatos de archivo de este tipo (Figura 10). Figura 10. Trabajo con datos de tipo NetCDF desde ArcGis Dentro de esta herramienta podemos definir las funcionalidades principales del trabajo con formatos de tipo NetCDF: FeaturetoNetCDF: Convierte una clase punto a un archivo NetCDF (.nc).El nombre del archivo por defecto es el mismo que el especificado en el nombre de la imagen. 24 Capítulo 1 MakeNetCDFFeatureLayer: Realiza una capa de imagen a un archivo de tipo NetCDF. MakeNetCDFRasterlayer: Realiza una capa Raster a un archivo tipo NetCDF. Para crear una capa RasterNetCDF el espacio entre las x-coordenadas tiene que ser igual y el espacio entre las y-coordenadas también. Si no es así, se crea una capa imagen y luego se interpola una capa Raster. Make a NetCDFTable View: Incorpora una vista de tabla al archive creado. RastertoNetCDF: Convierte un conjunto de dato ráster a archivo NetCDF. SelectbyDimension: Actualiza la visualización de capas o tablas a partir de un parámetro o valor dado. TabletoNetCDF: Convierte una tabla a un archivo tipo NetCDF. La integración entre los SIG de ESRI y los archivos de datos científicos NetCDF ha permitido que en la actualidad la utilización de estos productos tenga un amplio espectro a nivel mundial. Las capacidades de lectura/escritura que brinda NetCDF hacen que este tipo de SIG avance y se coloque entre los punteros a nivel global, y son utilizadas a menudo dentro de la comunidad atmosférica. La habilidad de leer conjuntos de datos atmosféricos en su formato natal del NetCDF permite a los usuarios comunales atmosféricos integrar herramientas y funcionalidad a estas familias de SIG (Settelmaier, 2008) Anteriomente ArcGIS podía acceder a los archivos HDF con un solo conjunto de datos, pero no podía acceder a los archivos HDF con varios conjuntos de datos. Se estudió el modelo de datos de GDAL, y se utilizó la API de GDAL para leer archivos HDF en la memoria, luego, se utilizó la interfaz de programación de ArcGIS para convertir los datos en memoria para datos ráster a los cuales ArcGIS puede tener acceso. Con este método, ArcGIS actualmente tiene la capacidad de acceder a los archivos HDF con múltiples conjuntos de datos (Zhao et al., 2011). Observaciones Al usuario que utiliza comúnmente archivos de NetCDF en ArcGIS se le hace en ocasiones un poco engorroso el trabajo con estos. Existe una herramienta desarrollada por la NASA denominada Panoply, que le permite un reconocimiento general de este tipo de archivos antes de introducirlos en algún software de ArcGIS. Esta herramienta le facultará a revisar las variables y las dimensiones de tiempo, 25 Capítulo 1 que le es contenido dentro del archivo del NetCDF, y le da un mejor sentido de lo que el usuario ve cuando abre el archivo, y trabaja con eso en ArcGIS. 1.4 Conclusiones Parciales En este capítulo se abordaron cuestiones principales acerca de diferentes formatos de datos científicos, sus principales características y de cuestiones fundamentales acerca de los SIG, aportando elementos que reafirman el papel fundamental que juegan en la actualidad en la visualización de datos. Se abordó también sobre algunos SIG, propietarios y libres, y de la estrecha integración que existe entre la VisCi y los SIG. Se concluye que los formatos de datos científicos son una herramienta muy valiosa para el almacenamiento de un gran volumen de datos en formato digital, que es preciso distribuir y que depende de la naturaleza de dicha información, además, que su integración con los SIG potencian aún más su desempeño en la actualidad. De los formatos de datos científicos mencionados se seleccionó HDF como formato para la incorporación en un SIG por disponer de una amplia librería implementada en java, además del resto de las facilidades que posee para el almacenamiento de grandes volúmenes de datos. De los SIG estudiados la alternativa más viable para la integración de HDF lo constituye el SIG GvSIG y la biblioteca SEXTANTE, debido a la perfecta integración que existe entre ellos. La ventaja de que ambos estén implementados en java facilita la integración del formato de datos científico HDF mediante la biblioteca HDF Java con este SIG. 26 Capítulo 2 Capítulo 2. Módulo de manipulación de archivos HDF en gvSIG En este capítulo se definen los principales aspectos de la extensión implementada para GVSIG, así como las funcionalidades del trabajo con datos de formatos HDF que serán implementadas para lograr la manipulación de este tipo de formatos dentro del SIG seleccionado. 2.1 Diseño de la extensión realizada a gvSIG El lenguaje UML (Unified Modeling Language) (Rumbaugh and Booch, 2000) fue el utilizado para realizar el diseño de la herramienta, que tiene como objetivos principales la especificación, visualización, construcción y documentación de los productos de un sistema de software. Este lenguaje es usado por el RUP (Rational Unified Process) como lenguaje de modelado para lo cual se basa en todos sus tipos de diagramas, que constituyen diferentes vistas del modelo del producto. Los diagramas empleados en el diseño del módulo fueron los siguientes: diagrama de casos de uso y diagrama de clases. Diagramas de casos de usos Los modelos de casos de uso proporcionan un medio sistemático e intuitivo de capturar requisitos funcionales del sistema basándose en los requerimientos de los usuarios. Este modelo se realiza identificando cada actor del sistema como los posibles usuarios para los cuales está realizado el mismo. La extensión implementada está destinada a un solo tipo de actor que es el especialista o investigador de cualquier rama que desee trabajar con el tipo de datos científicos HDF desde gvSIG y que sean capaces de interpretar de forma correcta los resultados que brinda la herramienta. Figura 11. Diagrama de casos de uso 27 Capítulo 2 El caso de uso que se toma en consideración es: trabajo con archivos de datos científicos que es el objetivo del trabajo, teniendo en cuenta siempre con qué tipo de archivo se está trabajando para poder hacer un mejor uso de la herramienta. Como instancias de este caso de uso el especialista puede trabajar con archivos rásters, este trabajo consiste en convertir uno o varios rásters a HDF, también tiene la opción de hacerlo de manera comprimida en caso de que estos archivos sean demasiados grandes y sea uno de sus objetivos reducir su tamaño, también puede obtener una serie de estadísticas del mismo. El caso de uso, trabajo con archivos HDF, se enfoca en convertir de HDF a ráster y HDF a tabla, aquí tiene la opción de descomprimir el archivo al llevarlos a ráster o a tabla en caso de estarlo. El trabajo con tablas se dirige a la conversión de tablas a HDF, también lo puede hacer de manera comprimida. Diagrama de Clases Un diagrama de clases es un tipo de diagrama estático que describe la estructura de un sistema mostrando sus clases, atributos y las relaciones entre ellos. Los diagramas de clases son utilizados durante el proceso de análisis y diseño de los sistemas, donde se crea el diseño conceptual de la información que se manejará en el sistema, y los componentes que se encargarán del funcionamiento y la relación entre uno y otro. Dentro del paquete es.unex.sextante.HDFTools están la mayoría de las clases creadas para el funcionamiento de la nueva herramienta encargada de la manipulación de archivos HDF. Solo la clase HDF_Handle no está dentro de ese paquete, se encuentra en el paquete Handles. 28 Capítulo 2 Figura 12. Diagrama de clases dentro de es.unex.sextante.HDFTools 29 Capítulo 2 En la (Figura 12) se muestran los atributos y métodos de las clases que se elaboraron en los paquetes es.unex.sextante.HDFTools, posteriormente se describirán y se explicarán sus funciones dentro del proyecto. Figura 13. Dependencias entre las clases nuevas En la (Figura 13) se muestran las dependencias entre estas clases revelando a la clase HDF_Handle como la que controla todo el proceso de ejecución del proyecto. Figura 14. Asociación entre HDF_Handle y la biblioteca HDF-JAVA En la (Figura 14) podemos observar las asociaciones de la clase HDF_Handle con H5, H5File, HDF5Constants y Dataset, que se encuentran en paquetes diferentes y se crean objetos de esas clases. En estas dependencias se indica si una clase llama, instancia y/o importa a las demás. 30 Capítulo 2 Figura 15. Dependencias de los nuevos algoritmos con GeoAlgorithm En la (Figura 15) se muestra que los algoritmos implementados derivan de la clase GeoAlgorithm, posteriormente se explica estas dependencias. En la (Figura 16) se muestra las dependencias entre los principales paquetes del proyecto, en esta se puede ver fácilmente la relación entre nuestros paquetes, es.unex.sextante.HDFTools y Handles, con las demás paquetes de la biblioteca HDF-JAVA. Figura 16. Dependencias entre los principales paquetes del proyecto 31 Capítulo 2 2.2 Concepciones importantes en la implementación de la extensión En este epígrafe se tratan los temas referentes a la implementación de la extensión realizada, teniendo en cuenta la tecnología utilizada en la confección de la misma, así como algunas consideraciones importantes a la hora de lograr los objetivos de este trabajo. Selección de las tecnologías Durante el desarrollo o extensión de un sistema es importante la elección de la plataforma objetivo y del lenguaje de desarrollo a utilizar. En cada investigación hay que puntualizar en determinadas áreas específicas de la aplicación. Elección del lenguaje de desarrollo El objetivo de esta investigación es adicionar un módulo que permita el trabajo con el formato de dato científico HDF mediante Sextante en gvSIG. Tanto este SIG como Sextante están implementados con el lenguaje Java. El proceso de integración del módulo con el sistema actual inevitablemente tendrá que interactuar y utilizar los códigos fuentes de gvSIG y Sextante. Esto hace al lenguaje Java la mejor elección para mantener la mayor compatibilidad posible con el sistema actual. A las razones descritas anteriormente se puede agregar que este proyecto necesita el trabajo con la biblioteca HDF-JAVA, una biblioteca desarrollada en java que permite la utilización de múltiples funciones para manipular archivos HDF. Por otra parte, Sextante se puede integrar con otros SIG, facilitando una mayor explotación y utilización del módulo propuesto. Elección del Entorno de Desarrollo Integrado Existe un conjunto de Entornos de Desarrollo Integrado (IDE, de sus siglas en inglés) que permiten el desarrollo de proyectos en Java. El IDE Eclipse versión 3.4 fue el seleccionado como ambiente de programación de esta extensión, debido a que resulta cómodo y fácil de usar para depurar programas. Posee plugins para el desarrollo de editores visuales que pueden ir desde procesadores de texto hasta editores de diagramas UML, interfaces gráficas para el usuario (GUI). Además la estructura de proyectos de gvSIG está diseñada para ser compilado con mayor facilidad utilizando este IDE. Elección de la versión de gvSIG a utilizar como sistema base El progresivo desarrollo de gvSIG por parte de una comunidad de desarrolladores hace posible que con cierta regularidad se actualice su versión. El modulo para el trabajo con formato HDF se desarrolló en la versión 1.11. 32 Capítulo 2 2.2.1 Forma general de crear algoritmos en Sextante Todos los algoritmos que se desarrollen en Sextante deben extender de la clase GeoAlgorithm que provee la base para todas las operaciones. Al extender de esta clase se implementan dos métodos a través de los cuales definen las características del algoritmo, defineCharacteristics() y processAlgorithm(), además el nombre de la clase debe terminar en Algorithm. En el método defineCharacteristics() se define la entrada y la salida, se especifica el nombre que va a tener el algoritmo y el grupo al que va a pertenecer. Los parámetros de entrada se definen teniendo en cuenta con qué tipo de mapas se piensa trabajar, raster, vectoriales o tablas. Es posible trabajar con listas de múltiples mapas. Para cada tipo de entrada se debe especificar su parámetro de entrada, nombre por el que será identificado y en el caso de conjunto de mapas múltiples, un tercero, que indica si se requiere o no. Hay otras entradas que pueden definirse como valores de selección en el caso de poder trabajar con varias opciones de cálculo, cadenas de texto, valores booleanos, etc. En el método processAlgorithm() es donde se debe programar el algoritmo en sí, creando todos los procesos y cálculos que se deban realizar. Hay tres tareas fundamentales que deben realizarse para que el algoritmo cumpla su objetivo: Leer los parámetros de entrada. Los valores deben ser leídos y guardados en variables para hacer más fácil su uso en el algoritmo. Trabajar con las variables. Crear resultados de salida. La salida es lo más importante del algoritmo y deben ser correctamente definidas para permitir que sea usada por otros algoritmos de Sextante. 2.3 Explicación de las principales funcionalidades del módulo En este epígrafe se abordarán cuáles son las principales funcionalidades de la extensión. Este proceso brindará al usuario especializado un conocimiento general acerca de la capacidad y el alcance de la extensión realizada. Cuando el usuario se encuentra frente a una herramienta de tal complejidad, se preguntará como puede convertir un ráster a HDF, múltiples rásters a HDF, una tabla a HDF, un conjunto de datos de un HDF a ráster, entre otras operaciones dentro de GVSIG. A continuación se brindará información sobre estas operaciones. 33 Capítulo 2 Raster to HDF En este algoritmo, primero se implementa el método defineCharacteristics(), en él definimos el nombre del algoritmo y el grupo al que pertenecerá, esto se hace mediante el siguiente código: this.setName("Raster to HDF"); this.setGroup("Tools HDF"); Luego se definen los parámetros de entradas y de salidas m_Parameters.addInputRasterLayer("INPUT", "Entrada Raster", true); m_Parameters.addFilepath("Path", "URL", true, true, "HDF"); para este caso el parámetro de entrada será una capa raster que debe estar cargada en una vista del gvSIG y el parámetro de salida será la dirección donde se desea ubicar el archivo HDF resultante. Después se implementa el método processAlgorithm(), el cual tiene el mayor peso en el algoritmo. Aquí se toman las extensiones de la capa ráster, las cuales nos servirán para saber las dimensiones que tendrá el nuevo conjunto de datos dentro del archivo HDF y se pregunta por el número de bandas de esta, si es de una sola banda se llena una matriz de 2 dimensiones con los datos del ráster y luego se llama al método correspondiente de la clase manipuladora para crear el archivo, a continuación se muestra el código para un ráster de una banda: float matriz[][] = new float[iNX][iNY]; for (x = 0; x < iNX; x++) for (y = 0; y < iNY; y++) matriz[x][y] = layer.getCellValueAsInt(x, y); HDF_Handle.insertarDataSet(iNX, iNY, matriz, layer.toString(), rl); Para los ráster de múltiples bandas la diferencia es que la matriz que se crea tiene 3 dimensiones, ya que la tercera es el número de bandas, el correspondiente código es el siguiente: int nroB = layer.getBandsCount(); float matriz[][][] = new float[iNX][iNY][nroB]; for (int z = 0; (z < nroB && setProgress(z, nroB)); z++) { for (y = 0; y < iNY; y++) { for (x = 0; x < iNX; x++) { matriz[x][y][z] = layer.getCellValueAsInt(x, y, z); } } } HDF_Handle.insertarDataSet(iNX, iNY, nroB, matriz, layer.toString(), rl); 34 Capítulo 2 Rasters to HDF En el algoritmo primero se implementa el método defineCharacteristics(), en el definimos el nombre del algoritmo y el grupo al que pertenecerá, esto se hace mediante el siguiente código: this.setName("Rasters to HDF"); this.setGroup("Tools HDF"); Luego se definen los parámetros de entradas y de salidas m_Parameters.addMultipleInput(MULTIPLE, MULTIPLE, AdditionalInfoMultipleInput.DATA_TYPE_RASTER, true); m_Parameters.addFilepath("Path", "URL", true, true, "HDF"); m_Parameters.requiresMultipleRasterLayers(); para este caso los parámetros de entrada serán rásters que deben estar cargados en una Vista del gvSIG, el parámetro de salida será la dirección donde se desea ubicar el archivo HDF resultante. Después se implementa el método processAlgorithm(). Aquí se toman las capas rásters entrantes y se colocan dentro de un arreglo, para posteriormente recorrerlo. layerlist = m_Parameters.getParameterValueAsArrayList(MULTIPLE); final IRasterLayer window[] = new IRasterLayer[layerlist.size()]; for (int i = 0; i < layerlist.size(); i++) { window[i] = layerlist.get(i); } A continuación se procede a recorrer el arreglo de rásters, a cada ráster se les toma las extensiones, las cuales nos servirán para saber las dimensiones que tendrá el nuevo conjunto de datos dentro del archivo HDF y se pregunta por el número de bandas de esta, si es de una sola banda se llena una matriz de 2 dimensiones con los datos del ráster y luego se llama al método correspondiente de la clase manipuladora para crear el archivo. Para los ráster de múltiples bandas la diferencia es que la matriz que se crea tiene 3 dimensiones, ya que la tercera es el número de bandas, al terminar el análisis de ese ráster, se continuación el próximo y así sucesivamente hasta que se terminen los rásters. El correspondiente código es el siguiente: for (int i = 0; i < window.length; i++) { GridExtent gridExtent = new GridExtent(window[i]); window[i].setWindowExtent(gridExtent); iNX = gridExtent.getNX(); iNY = gridExtent.getNY(); float matriz[][] = new float[iNX][iNY]; 35 Capítulo 2 if (window[i].getBandsCount() == 1) { for (x = 0; x < iNX; x++) for (y = 0; y < iNY; y++) matriz[x][y] = window[i].getCellValueAsInt(x, y); HDF_Handle.insertarDataSet(iNX, iNY, matriz, window[i].toString(), rl); } else { int nroB = window[i].getBandsCount(); float matriz1[][][] = new float[iNX][iNY][nroB]; for (int z = 0; (z < nroB && setProgress(z, nroB)); z++) { for (y = 0; y < iNY; y++) { for (x = 0; x < iNX; x++) { matriz1[x][y][z] = window[i].getCellValueAsInt(x, y, z); } } } HDF_Handle.insertarDataSet(iNX, iNY, nroB, matriz1, window[i].toString(), rl); } Table to HDF En el algoritmo primero se implementa el método defineCharacteristics(), en el definimos el nombre del algoritmo y el grupo al que pertenecerá, esto se hace mediante el siguiente código: this.setName("Table to HDF"); this.setGroup("Tools HDF"); Luego se definen los parámetros de entradas y de salidas m_Parameters.addInputTable(TABLE, Sextante.getText("Table"), true); m_Parameters.addFilepath("Path", "URL", true, true, "HDF"); para este caso el parámetro de entrada será una tabla que debe estar cargada en una Tabla del gvSIG, el parámetro de salida será la dirección donde se desea ubicar el archivo HDF resultante. Después se implementa el método processAlgorithm(). Aquí se toman el número de filas y columnas de la tabla, las cuales nos servirán para saber las dimensiones que tendrá el nuevo conjunto de datos dentro del archivo HDF, a continuación se llena una matriz de 2 dimensiones con los datos de la tabla y luego se llama al método correspondiente de la clase manipuladora para crear el archivo, a continuación se muestra el código: 36 Capítulo 2 int i; int iField; long iCount; ITable table; String rl = m_Parameters.getParameter("Path").getParameterValueAsString(); table = m_Parameters.getParameterValueAsTable(TABLE); i = 0; iCount = table.getRecordCount(); iField = table.getFieldCount(); float matriz[][] = new float[(int) iCount][iField]; final IRecordsetIterator iter = table.iterator(); while (iter.hasNext() && setProgress(i, (int) iCount)) { final IRecord record = iter.next(); for (int j = 0; j < iField; j++) { try { matriz[i][j] = Float.parseFloat(record.getValue(j) .toString()); } catch (final NumberFormatException e) { } i++; } iter.close(); HDF_Handle.insertarDataSet((int) iCount, iField, matriz, table.toString(), rl); Tables to HDF En el algoritmo primero se implementa el método defineCharacteristics(), en el definimos el nombre del algoritmo y el grupo al que pertenecerá, esto se hace mediante el siguiente código: this.setName("Tables to HDF"); this.setGroup("Tools HDF"); Luego se definen los parámetros de entradas y de salidas m_Parameters.addMultipleInput(MULTIPLE, MULTIPLE, AdditionalInfoMultipleInput.DATA_TYPE_TABLE, true); m_Parameters.addFilepath("Path", "URL", true, true, "HDF"); m_Parameters.requiresMultipleTables(); 37 Capítulo 2 para este caso los parámetros de entrada serán tablas que deben estar cargadas en el gvSIG, el parámetro de salida será la dirección donde se desea ubicar el archivo HDF resultante. Después se implementa el método processAlgorithm(). Aquí se toman las tablas entrantes y se colocan dentro de un arreglo, para posteriormente recorrerlo. layerlist = m_Parameters.getParameterValueAsArrayList(MULTIPLE); final ITable window[] = new ITable[layerlist.size()]; for (int i = 0; i < layerlist.size(); i++) { window[i] = layerlist.get(i); } A continuación se procede a recorrer el arreglo de tablas, a cada tabla se les toma las dimensiones, las cuales nos servirán para crear el nuevo conjunto de datos dentro del archivo HDF, luego se llena una matriz de 2 dimensiones con los datos de la tabla y se llama al método insertarDataSet de la clase manipuladora para crear el archivo. Al terminar el análisis de esa tabla, se continua con el próximo y así sucesivamente hasta que se terminen de recorrer el arreglo de tablas. El correspondiente código es el siguiente: for (int i = 0; i < window.length; i++) { k = 0; iCount = window[i].getRecordCount(); iField = window[i].getFieldCount(); float matriz[][] = new float[(int) iCount][iField]; final IRecordsetIterator iter = window[i].iterator(); while (iter.hasNext() && setProgress(k, (int) iCount)) { final IRecord record = iter.next(); for (int j = 0; j < iField; j++) { try { matriz[k][j] = Float.parseFloat(record.getValue(j) .toString()); } catch (final NumberFormatException e) { } } k++; } iter.close(); HDF_Handle.insertarDataSet((int) iCount, iField, matriz, window[i].toString(), rl); 38 Capítulo 2 } Compress Raster to HDF Este algoritmo es prácticamente igual al Raster to HDF, la diferencia radica en el método a llamar en la clase controladora, este algoritmo toma un ráster como entrada, pero el archivo HDF que da como resultado tiene el máximo nivel de compresión que nos da la posibilidad la biblioteca HDF-JAVA. Se llaman dos métodos dependiendo del número de bandas del archivo. writeGzip(int DIM_X, int DIM_Y, float[][] arg, String DATASETNAME, String FILENAME) writeGzip(int DIM_X, int DIM_Y, int DIM_Z, float[][][] arg, String DATASETNAME, String FILENAME) El primero para el caso en que el raster de entrada sea de una banda y el segundo para el caso que sea de múltiples bandas. Compress Table to HDF Este algoritmo es prácticamente igual al Table to HDF, la diferencia radica en el método a llamar en la clase controladora, este algoritmo toma una tabla como entrada, pero el archivo HDF que da como resultado tiene el máximo nivel de compresión que nos da la posibilidad la biblioteca HDF-JAVA. El método a llamar sería el siguiente: writeGzip(int DIM_X, int DIM_Y, float[][] arg, String DATASETNAME, String FILENAME) Decompress HDF to Raster Este algoritmo es prácticamente igual al HDF to Raster, la diferencia radica en el método a llamar en la clase controladora, este algoritmo toma un archivo HDF y un conjunto de datos anteriormente comprimido como entrada, el resultado será un ráster descomprimido. El método a llamar sería el siguiente: readGzip(int DIM_X, int DIM_Y, String DATASETNAME, String FILENAME) Si es multibanda se llama a readGzip(int DIM_X, int DIM_Y, int DIM_Z, String DATASETNAME, String FILENAME) 39 Capítulo 2 Decompress HDF to Table Este algoritmo es prácticamente igual al HDF to Table, la diferencia radica en el método a llamar en la clase controladora, este algoritmo toma un archivo HDF y un conjunto de datos anteriormente comprimido como entrada, el resultado será una tabla descomprimida. El método a llamar sería el siguiente: readGzip(int DIM_X, int DIM_Y, String DATASETNAME, String FILENAME) HDF to Raster En el algoritmo primero se implementa el método defineCharacteristics(), en él definimos el nombre del algoritmo y el grupo al que pertenecerá, esto se hace mediante el siguiente código: this.setName("HDF to Raster "); this.setGroup("Tools HDF"); Luego se definen los parámetros de entradas y salidas m_Parameters.addFilepath("Path", "URL", true, true, "HDF"); m_Parameters.addString("DataSet", "DataSetNames"); los parámetros de entradas necesitan que se les especifique el archivo HDF y el nombre del conjunto de datos y los de salida, la dirección donde se ubicará el archivo ráster, el resultado también se mostrará en una vista de gvSIG. Después se implementa el método processAlgorithm(). En él se toman las dimensiones del conjunto de datos seleccionado, para poder crear el ráster de salida correcto, también se pregunta si el conjunto de datos es multibanda o no. Si es de una sola banda se llama al método getDataSet de la clase manipuladora HDF_Handle, este devuelve los datos en una matriz de 2 dimensiones, estos serán copiados hacia el raster resultante. El código es el siguiente: result = getNewRasterLayer(this.Resul, "Result", IRasterLayer.RASTER_DATA_TYPE_INT, gridExtent); float[][] datasetRes = HDF_Handle.getDataSet(iNX, iNY, dataset, h5file); for (x = 0; x < iNX; x++) for (y = 0; y < iNY; y++) { result.setCellValue(x, y, (int) datasetRes[x][y]); } En el caso de que el conjunto de datos sea multibanda, también se llama a un método llamado getDataSet, de la misma clase manipuladora, pero este devuelve los datos en una matriz de 3 dimensiones, estos son copiados al ráster resultante. El código es el siguiente: 40 Capítulo 2 result = getNewRasterLayer(this.Resul, "Result", IRasterLayer.RASTER_DATA_TYPE_INT, gridExtent, (int) dim[2]); result.setInterpolationMethod(IRasterLayer.INTERPOLATION_NearestNeighbour); float[][][] datasetRes = HDF_Handle.getDataSet(iNX, iNY, (int) dim[2], dataset, h5file); int c = 0; for (int z = 0; (z < (int) dim[2] && setProgress(z, (int) dim[2])); z++) { for (y = 0; y < iNY; y++) { for (x = 0; x < iNX; x++) { result.setCellValue(x, y, z, (int) datasetRes[x][y][z]); } } } HDF to Table En el algoritmo primero se implementa el método defineCharacteristics(), en él definimos el nombre del algoritmo y el grupo al que pertenecerá, esto se hace mediante el siguiente código: this.setName("HDF to Table "); this.setGroup("Tools HDF"); Luego se definen los parámetros de entradas y salidas m_Parameters.addFilepath("Path", "URL", true, true, "HDF"); m_Parameters.addString("DataSet", "DataSetNames"); los parámetros de entradas necesitan que se les especifique el archivo HDF y el nombre del conjunto de datos. Los de salida, la dirección donde se ubicará la tabla, el resultado también se mostrará en una tabla de gvSIG. Después se implementa el método processAlgorithm(). En él se toman las dimensiones del conjunto de datos seleccionado, para poder crear la tabla de salida correcta. Luego se inicializan las variables auxiliares, estas son importantes ya serán las que nos permitirán dar los nombres a los campos de la tabla y también el tipo de los datos que se almacenarán, entre otras funciones. A continuación se llama al método getDataSet de la clase manipuladora HDF_Handle, este devuelve los datos en una matriz de 2 41 Capítulo 2 dimensiones, estos serán copiados hacia la tabla resultante. Los datos se copian de fila en fila, ya que los datos se le pasan a la tabla de esta manera, una vez copiados los datos de una fila, estos se copian a la tabla. El código es el siguiente: dim = HDF_Handle.getDims(h5file, dataset); iNX = (int) dim[0]; iNY = (int) dim[1]; sFields = new String[iNY]; types = new Class[iNY]; values = new Object[iNY]; for (int i = 0; (i < iNY && setProgress(i, iNY)); i++) { sFields[i] = Float.toString(i); types[i] = Float.class; } result = getNewTable(this.Resul, "Result", types, sFields); float[][] datasetRes = HDF_Handle.getDataSet(iNX, iNY, dataset, h5file); for (int j = 0; (j < iNX) && setProgress(j, iNX); j++) { for (int k = 0; (k < iNY ); k++) { values[k] = new Float(datasetRes[j][k]); } result.addRecord(values); } Basic Statistics Raster En el algoritmo, al igual que en los anteriores, primero se implementa el método defineCharacteristics(), en él definimos el nombre del algoritmo y el grupo al que pertenecerá, esto se hace mediante el siguiente código: this.setName("Basic Statistics Raster "); this.setGroup("Tools HDF"); Luego se definen los parámetros de entradas y salidas m_Parameters.addInputRasterLayer("INPUT", "Entrada Raster", true); addOutputTable(Resul, "Table"); el parámetro de entrada necesita que se le especifique el archivo ráster, que debe estar cargado anteriormente en una vista de gvSIG. El de salida, la dirección donde se ubicará la tabla, el resultado también se mostrará en una tabla de gvSIG. 42 Capítulo 2 Después se implementa el método processAlgorithm(). En él se toman las dimensiones del ráster seleccionado, para poder crear la tabla de salida correcta y se pregunta por el número de bandas de esta, si es de una sola banda se toman los datos de uno en uno y se le pasan como parámetros a una instancia de la clase SimpleStats, que es la encargada de buscar las estadísticas básicas de un conjunto de datos. Luego se llena el arreglo con las estadísticas que se quieran almacenar en la tabla resultante, por último se le pasa este arreglo a la tabla, el siguiente código muestra lo antes descrito: IRasterLayer layer = m_Parameters.getParameterValueAsRasterLayer("INPUT"); GridExtent gridExtent = new GridExtent(layer); layer.setWindowExtent(gridExtent); layer.setInterpolationMethod(IRasterLayer.INTERPOLATION_NearestNeighbour); iNX = gridExtent.getNX(); iNY = gridExtent.getNY(); types = new Class[7]; values = new Object[7]; for (i = 0; i < sFields.length; i++) { types[i] = Float.class; } result = getNewTable(this.Resul, "Basic-Statistics-" + layer.toString(), types, sFields); if (layer.getBandsCount() == 1) { SimpleStats stats = new SimpleStats(); for (x = 0; x < iNX; x++) for (y = 0; y < iNY; y++) { dValue = layer.getCellValueAsInt(x, y); stats.addValue(dValue); } values[0] = new Float(stats.getMean()); values[1] = new Float(stats.getRMS()); values[2] = new Float(stats.getMin()); values[3] = new Float(stats.getMax()); values[4] = new Float(stats.getVariance()); values[5] = new Float(stats.getSum()); values[6] = new Float(stats.getCoeffOfVar()); 43 Capítulo 2 if (m_Task.isCanceled()) { return false; } result.addRecord(values); } Para el caso que el ráster es multibanda también se van tomando los datos de uno en uno, pero se almacenar en la tabla, en cada fila, las estadísticas de las bandas, es decir, cada fila de la tabla va a corresponder con las estadísticas de una banda, el código es el siguiente: int nroB = layer.getBandsCount(); for (int z = 0; (z < nroB && setProgress(z, nroB)); z++) { SimpleStats stats = new SimpleStats(); for (y = 0; y < iNY; y++) { for (x = 0; x < iNX; x++) { dValue = layer.getCellValueAsInt(x, y, z); stats.addValue(dValue); } } values[0] = new Float(stats.getMean()); values[1] = new Float(stats.getRMS()); values[2] = new Float(stats.getMin()); values[3] = new Float(stats.getMax()); values[4] = new Float(stats.getVariance()); values[5] = new Float(stats.getSum()); values[6] = new Float(stats.getCoeffOfVar()); if (m_Task.isCanceled()) { return false; } result.addRecord(values); } Basic Statistics Table En el algoritmo primero se implementa el método defineCharacteristics(), en él definimos el nombre del algoritmo y el grupo al que pertenecerá, esto se hace mediante el siguiente código: 44 Capítulo 2 this.setName("Basic Statistics Table "); this.setGroup("Tools HDF"); Luego se definen los parámetros de entradas y salidas m_Parameters.addInputTable(TABLE, Sextante.getText("Table"),true); addOutputTable(Resul, "Table"); el parámetro de entrada necesita que se le especifique la tabla a la que se le quiere aplicar el algoritmo, que debe estar cargada anteriormente en gvSIG. El de salida, la dirección donde se ubicará la tabla, el resultado también se mostrará en una tabla de gvSIG. Después se implementa el método processAlgorithm(). Aquí se toman el número de filas y columnas de la tabla, las cuales nos servirán poder crear la tabla de salida correcta, luego se toman los datos de uno en uno y se le pasan como parámetros a una instancia de la clase SimpleStats, que es la encargada de buscar las estadísticas básicas de un conjunto de datos. Luego se llena el arreglo con las estadísticas que se quieran almacenar en la tabla resultante, por último se le pasa este arreglo a la tabla, el siguiente código muestra lo antes descrito: table = m_Parameters.getParameterValueAsTable(TABLE); iCount = table.getRecordCount(); iField = table.getFieldCount(); types = new Class[7]; values = new Object[7]; for ( i = 0; i < sFields.length; i++) { types[i] = Float.class; } result = getNewTable(this.Resul, "Basic-Statistics-"+table.toString(), types, sFields); final IRecordsetIterator iter = table.iterator(); i = 0; while (iter.hasNext() && setProgress(i, (int) iCount)) { final IRecord record = iter.next(); for (int j = 0; j < iField; j++) { try { dValue = Float.parseFloat(record.getValue(j) .toString()); 45 Capítulo 2 stats.addValue(dValue); } catch (final NumberFormatException e) { } } i++; } iter.close(); values[0] = new Float(stats.getMean()); values[1] = new Float(stats.getRMS()); values[2] = new Float(stats.getMin()); values[3] = new Float(stats.getMax()); values[4] = new Float(stats.getVariance()); values[5] = new Float(stats.getSum()); values[6] = new Float(stats.getCoeffOfVar()); if (m_Task.isCanceled()) { return false; } result.addRecord(values); return true; } 2.4 Principales métodos de la clase manipuladora También es importante mencionar y explicar los principales métodos de la clase manipuladora HDF_Handle. Esta clase tiene implementada dos métodos con el mismo nombre, llamados insertarDataSet, ellos se utilizan con el mismo fin, que es crear un conjunto de datos dentro de un HDF, lo mismo sea en uno nuevo o en uno creado. La diferencia radica en el número de parámetros que tienen ambos, ya que uno es para crear un conjunto de datos de una banda y el otro para multibanda. El primero tiene 5 parámetros, el número de elementos por columnas, el número de elementos por fila, una matriz de 2 dimensiones con los datos, el nombre del conjunto de datos y el nombre del archivo HDF. El 46 Capítulo 2 segundo tiene un parámetro más que es el número de bandas y la matriz de los datos entrante es de 3 dimensiones, los demás parámetros son iguales. A continuación se describirá el método de 5 parámetros solamente por su similitud con el otro de igual nombre. Primeramente en el método se pregunta si el archivo HDF existe o si hay que crearlo, si existe hay que abrirlo, para ello se llama al método H5Fopen de la clase H5 y si hay que crearlo se llama a H5Fcreate de la misma clase, el código se muestra a continuación: File f = new File(FILENAME); if (f.exists()) { try { file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT); } catch (Exception e) { e.printStackTrace(); } } else { // Create a new file using default properties. try { file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT); } catch (Exception e) { e.printStackTrace(); } } Luego, se procede a crear el espacio de datos y el conjunto de datos, el espacio de datos se crea con el método H5Screate_simple y el conjunto de datos se crea con H5Dcreate, ambos métodos de la clase H5. try { filespace_id = H5.H5Screate_simple(2, dims, null); } catch (Exception e) { e.printStackTrace(); } // Create the dataset. We will use all default properties for this // example. try { if ((file_id >= 0) && (filespace_id >= 0)) dataset_id = H5.H5Dcreate(file_id, DATASETNAME, 47 Capítulo 2 HDF5Constants.H5T_STD_I32LE, filespace_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT); } catch (Exception e) { e.printStackTrace(); } Después se copian los datos que se entran por parámetro en la matriz arg para el conjunto de datos. El método utilizado es H5Dwrite, últimamente se cierra el conjunto de datos mediante el método H5Dclose, se cierra el espacio de datos y el archivo, mediante los métodos H5Sclose y H5Fclose, respectivamente. Este método no devuelve nada. Lo antes descrito se ve a continuación el código. // Write the data to the dataset. try { if (dataset_id >= 0) H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_FLOAT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT, arg); } catch (Exception e) { e.printStackTrace(); } // End access to the dataset and release resources used by it. try { if (dataset_id >= 0) H5.H5Dclose(dataset_id); } catch (Exception e) { e.printStackTrace(); } try { if (filespace_id >= 0) H5.H5Sclose(filespace_id); } catch (Exception e) { e.printStackTrace(); } // Close the file. 48 Capítulo 2 try { if (file_id >= 0) H5.H5Fclose(file_id); } catch (Exception e) { e.printStackTrace(); } En la clase HDF_Handle también existen 2 métodos con el nombre writeGzip, pasa exactamente lo mismo que con los métodos anteriores, uno para crear conjunto de datos de una banda y otro para multibanda, los parámetros son los mismos de los métodos insertarDataSet, la diferencia de estos dos métodos con los anteriores es que crean conjuntos de datos comprimidos, para ello crean una lista de propiedades en cual le da el nivel de compresión y se le define el tamaño del chunk, esto se hace mediante los métodos H5Pset_deflate y H5Pset_chunk, luego, se le pasa esta lista de propiedades al método que creará el conjunto de datos, en este caso H5Dcreate, todos de la clase H5, el código que se muestra a continuación aclara lo antes descrito: // Create the dataset creation property list, add the gzip compression // filter. try { dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE); if (dcpl_id >= 0) { H5.H5Pset_deflate(dcpl_id, 9); // Set the chunk size. H5.H5Pset_chunk(dcpl_id, 2, chunk_dims); } } catch (Exception e) { e.printStackTrace(); } // Create the dataset. try { if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0)) dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id, HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT); } catch (Exception e) { e.printStackTrace(); 49 Capítulo 2 } Otros de los métodos implementados son los getDataSet, estos dos métodos son bastante parecidos, uno es para leer los datos de un conjunto de datos de una banda y el otro para leer los datos de un conjunto de datos multibanda, a los dos se le pasan por parámetros las dimensiones de las columnas y las filas, el nombre del conjunto de datos y del fichero HDF, en el caso del último, también se le pasa el número de bandas. Ambos métodos primero confirman que el archivo pasado por parámetro exista, si existe, lo abre mediante el método H5FOpen y también abre el conjunto de datos requerido mediante el método H5Dopen, el código se muestra a continuación: // Open file using the default properties. File f = new File(FILENAME); if (f.exists()) { try { file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT); } catch (Exception e) { e.printStackTrace(); } } else System.out.println("El archivo especificado no existe"); // Open dataset using the default properties. try { if (file_id >= 0) dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT); } catch (Exception e) { e.printStackTrace(); } Luego, se procede a leer y copiar los datos del conjunto de datos hacia un arreglo de 2 o 3 dimensiones, en dependencia de este, esto se hace a través del método H5DRead, una vez terminado la lectura, se cierra el conjunto de datos y luego el archivo, por último se devuelven los datos almacenados en el arreglo. // Read the data using the default properties. try { if (dataset_id >= 0) 50 Capítulo 2 H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_FLOAT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT, dset_data); int c = 0; for (int x = 0; x < DIM_X; x++) { for (int y = 0; y < DIM_Y; y++) { setdat[x][y] = dset_data[c]; c++; } } } catch (Exception e) { e.printStackTrace(); } // Close the dataset. try { if (dataset_id >= 0) H5.H5Dclose(dataset_id); } catch (Exception e) { e.printStackTrace(); } // Close the file. try { if (file_id >= 0) H5.H5Fclose(file_id); } catch (Exception e) { e.printStackTrace(); } return dsetdat; Por último, describiremos los dos métodos readGZip, con ellos pasa exactamente lo mismo que con los dos métodos anteriores, uno para leer conjuntos de datos de una banda y otro para multibanda, los parámetros son los mismos de los métodos getDataSet, la diferencia de estos dos métodos con los anteriores es que ellos leen los conjuntos de datos comprimidos anteriormente, para ellos recuperan la lista de propiedades del conjunto de datos, en la cual está el nivel de compresión y el tamaño del chunk, esto lo hacemos mediante el métodos H5Dget_create_plist, luego se le pasa al método que leerá y 51 Capítulo 2 copiará el conjunto de datos, en este caso H5Dread, todos de la clase H5, después se cierra el conjunto de datos y el archivo y se retorna el arreglo con la información descomprimida, el código a continuación muestra la recuperación de la lista de propiedades y la lectura del conjunto de datos: // Retrieve the dataset creation property list. try { if (dataset_id >= 0) dcpl_id = H5.H5Dget_create_plist(dataset_id); } catch (Exception e) { e.printStackTrace(); } // Read the data using the default properties. try { if (dataset_id >= 0) { H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_FLOAT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT, dset_data); int c = 0; for (int x = 0; x < DIM_X; x++) { for (int y = 0; y < DIM_Y; y++) { dsetdat[x][y] = dset_data[c]; c++; } } } } catch (Exception e) { e.printStackTrace(); } 2.5 Conclusiones parciales La integración de técnicas de VisCi para el trabajo con archivos de datos científicos en el SIG gvSIG, siguiendo un enfoque mezclado entre estas dos disciplinas, le permite al usuario trabajar con conjuntos de datos, que no podían ser procesados dentro de sus funcionalidades, obteniendo una visión más general, y agregando nuevas facilidades para el procesamiento de grandes cantidades de información. Se incorporaron nuevas funcionalidades a gvSIG, que permiten el trabajo con grandes conjuntos de información a partir de trabajo con archivos HDF. La implementación de un módulo de este tipo ofrece 52 Capítulo 2 una gran cantidad de beneficios, los cuales hacen que este SIG sea una herramienta más completa y abarcadora, ofreciéndole al usuario especializado una manera más eficaz y dinámica para el trabajo con grandes volúmenes de datos. 53 Capítulo 3 Capítulo 3. Presentación de los resultados En este capítulo se expone lo referente al uso de la extensión, teniendo en cuenta las funcionalidades del trabajo con archivos de tipos de datos científicos y el procedimiento para crear un HDF con una estructura especializada. 3.1 Manual de usuario Para la correcta utilización de la herramienta integrada a gvSIG se requiere el desarrollo de un manual de usuario. Este epígrafe muestra el uso de cada una de las funcionalidades principales de la extensión. Se irá desglosando por partes para un mejor entendimiento. En nuestra herramienta el primer paso es solo para una parte de nuestras funcionalidades, como son las de llevar los datos desde un ráster a un HDF, de varios rásters a HDF y de almacenar los datos de un ráster en forma comprimida dentro de un HDF. Para poder hacer uso de estas funcionalidades es necesario tener preparados los ráster con anterioridad. Figura 17. Creación de una nueva vista 54 Capítulo 3 En la (Figura 17) se muestran los pasos para establecer una nueva vista, los cuales son: elegir el tipo de documento que se va a visualizar, identificado con el número uno; crear un documento nuevo, oprimiendo el botón Nuevo (número dos); seleccionar el documento nuevo (número tres) y oprimir el botón Abrir para abrirlo (número cuatro). Si se desea se puede cambiar el nombre del documento oprimiendo en Renombrar. Después de seguir estos pasos se mostrará una vista como la que se resalta con el número cinco. Luego de abrir el documento se procede a añadir las capas necesarias para ejecutar la operación, para lo cual se debe oprimir el botón señalado con el uno en la (Figura 18). En ese entonces se muestra un diálogo para seleccionar la ubicación de los archivos rásters y se cargarán como capas en el documento, para este caso cargaremos dos rásters, ya que haremos uso de la funcionalidad de convertir varios rásters a HDF. Figura 18. Adición de capas Una vez cargadas las capas se procede a ejecutar el algoritmo. Primero hay que oprimir el botón del Gestor de Extensiones de Sextante, señalado con el uno en la (Figura 19). Luego se selecciona el grupo de algoritmos nuevo, llamado Tools HDF, se muestra con el número 2 en la (Figura 19), se da clic sobre él y se muestran los algoritmos disponibles a utilizar. Dentro de ellos, Raster to HDF, Rasters to HDF, Basic Statistics Raster y Compress Raster to HDF, están disponibles ya que los datos necesarios para ellos están cargados en la vista. En el caso de HDF to Raster, Decompress HDF to Raster y Decompress HDF to Table, siempre están habilitados ya que los datos que necesitan como entrada se toman al ejecutarse, es decir, ellos no necesitan tener cargado ningún dato en el gvSIG anteriormente. Table to HDF, Tables to HDF, Compress Table to HDF y Basic Statistics Table, están deshabilitados porque ellos sí necesitan tener cargado al menos una tabla anteriormente, pero el proceso es similar al de cargar un ráster, solo que en lugar de crear una nueva vista, se crea una Tabla y posteriormente se carga. En este caso se escogió Rasters to HDF, como se muestra señalado con tres en la (Figura 19). 55 Capítulo 3 Figura 19. Selección del algoritmo Una vez escogido el algoritmo se muestra una nueva ventana, en la cual se definen los parámetros necesarios para este, como se muestra en la (Figura 20). Figura 20. Entrada de los parámetros del algoritmo 56 Capítulo 3 En la (Figura 20) se muestran la ventana donde se entran los parámetros necesarios. Oprimiendo el botón señalado con uno se muestra una ventana donde se pueden escoger dentro de los rásters cargados con anterioridad en la vista, los deseados para convertir a HDF, se seleccionan los archivos y se presiona el botón Aceptar, señalado con uno en la (Figura 21). Figura 21. Selección de las capas Una vez cargados los archivos se presiona el botón señalado con 2 en la (Figura 20), para introducir la dirección donde se guardará el fichero HDF, también es necesario escribir como se llamará este .h5. Luego se presiona el botón Aceptar señalado con 3 en la (Figura 20) y se ejecuta el algoritmo, el resultado de este se puede ver abriendo el fichero con el HDFView como se muestra en la (Figura 22). 57 Capítulo 3 Figura 22. Archivo HDF resultante 3.2 Caso de Estudio En el siguiente epígrafe se hará uso de las herramientas creadas para elaborar un archivo HDF con una estructura específica que permitirá que sus datos sean analizados por el módulo de Visualización Científica de gvSIG. Los datos se presentan en una rejilla de alta resolución con 203 puntos espaciados meridiana y zonalmente unos 50 y 60 Km respectivamente y distribuidos por el territorio de la España peninsular y Baleares (Figura 23). Esta rejilla fue obtenida por (Borén et al., 1997) a partir del banco de datos de la Agencia Estatal de Meteorología del Gobierno de España (AEMET) interpolando los datos diarios de los observatorios disponibles próximos a los puntos. Para el cálculo de las variables (precipitación, temperaturas máxima y mínima) en el punto se determinó la media ponderada de dichos datos de observatorios siendo las ponderaciones las inversas de las distancias observatorio-punto y tomando las distancias inferiores o iguales a 10 km en cualquier caso; de esta manera el dato de cada punto de la rejilla viene a ser una representación promedio de su área de influencia. Las series así obtenidas y homogeneizadas para cada punto constituyen una base de datos sin ninguna laguna. 58 Capítulo 3 Figura 23. Mapa con la numeración de cada punto de la rejilla de interpolación. Cada fichero de cada variable contiene un registro por cada día de cada mes y de cada año ordenados ascendentemente: el primer registro corresponde al 1-1-1961 y el último al 31-12-1990. En cada registro aparecen todos los datos de la variable de que se trate en los 203 puntos de rejilla para ese día. Para crear el archivo HDF primeramente se creó un archivo ráster correspondiente a la rejilla de que se muestra en la (Figura 23), este quedó como se observa en la (Figura 24). Figura 24. Raster creado como índice 59 Capítulo 3 A continuación se cargan los tres archivos en forma de tabla en el gvSIG, cada archivo corresponde con las variables del problema, además se carga el ráster mostrado anteriormente, ya que este formará parte del archivo HDF. Una vez cargado los todos los datos se procede a hacer uso de las herramientas. Este proceso de creación del HDF se puedo hacer totalmente automático utilizando el Modeler de Sextante, en el mismo se hizo un flujo de trabajo como se muestra en la (Figura 25), siempre utilizando las herramientas creadas. Figura 25. Modelo para crear el archivo ESPANA.h5 de manera automática dentro del Modeler de Sextante. En los componentes de Tablas, se le asigna a cada uno, una tabla como entrada que serán las tres variables del problema, la capa ráster tomará como entrada el archivo ráster que nos servirá de índice en el HDF. A cada tabla se le aplica el algoritmo Basic Statistics Table, que este devuelve una tabla con las estadísticas básicas, esto se hace ya que es necesario para el futuro análisis que se podrán hacer con el módulo de Visualización Científica del gvSIG de estos datos. Tanto a las tablas que contienen los datos de las variables, como a las de las estadísticas, se les aplica el algoritmo Tables to HDF, dándole como salida a este algoritmo en ambos casos al aplicarse, el mismo nombre de salida, para este caso ESPANA.h5. Por último se aplica al ráster el algoritmo Raster to HDF, también dándole como salida el 60 Capítulo 3 mismo nombre, ya que se quiere que todos estos datos estén dentro del mismo archivo HDF. Como resultado se muestra este archivo en la (Figura 26). Figura 26. Archivo ESPANA.h5 3.3 Conclusiones parciales En el presente capítulo se expusieron los aspectos fundamentales para el uso de las herramientas de trabajo con datos científicos dentro de gvSIG. Esto constituye una importante guía para el uso eficiente de las herramientas por parte de los usuarios. Se presentó un ejemplo para ilustrar a los potenciales usuarios en el uso de la extensión, se analizó el mismo y se constataron las ventajas que ofrece la implementación de un módulo para este tipo de trabajo dentro de un SIG. 61 Conclusiones Conclusiones Como resultado de esta investigación, se desarrolló un grupo de herramientas para el trabajo con archivos de formatos de datos científicos, específicamente HDF, que, mediante la integración entre la Visualización Científica y los SIG, permite las operaciones sobre datos de formato HDF desde gvSIG, cumpliéndose el objetivo general planteado. Además, se presentaron los siguientes aspectos: Se analizaron las principales herramientas para la manipulación de formatos de datos científicos HDF, NetCDF, etc., con el objetivo de valorar las ventajas de la integración de estas herramientas a los SIG. Se seleccionó el SIG gvSIG para la incorporación de estas herramientas de trabajo con archivos HDF implementado mediante el enfoque mezclado de las VisCi y los SIG. Se desarrolló un diseño detallado de las principales clases que componen la extensión con el objetivo de agregarle otras funcionalidades en caso de necesitarse en un futuro cercano. Se desarrolló un manual de usuario donde se exponen las principales funciones implementadas, brindando una forma eficaz para el trabajo especializado con la herramienta creada. La herramienta implementada es de propósito general, permitiendo su utilización en diferentes esferas de la vida cotidiana, donde se necesite manipular grandes volúmenes de información, para poder analizar y dar un buen uso a esta. 62 Recomendaciones Recomendaciones Al concluir la presente investigación, solo resta hacer algunas recomendaciones, tales como: Implementar otras funcionalidades que amplíen el uso de esta herramienta por usuarios especializados. Probar la efectividad del módulo implementado en otro dominio de aplicación. 63 Bibliografía Bibliografía ANGUIX, A. 2009. gvSIG: un proyecto global Casos de éxito. Primera jornada de Latinoamérica y el caribe de usuarios de gvSIG [Online]. ANGUIX, A. & CARRIÓN, G. gvSIG: Soluciones Open Source en las tecnologías espaciales. GISPLANET 2005, 2005. BOLSTAD, P. 2005. GIS Fundamentals: A first text on Geographic Information Systems, White Bear Lake, Minnesota, Eider Press. BORÉN, R., RIBALAYGUA, J. & BALAIRÓN, L. 1997. Método analógico de simulación de escenarios climáticos a escala comarcal. Informe Técnico. CLARKE, K. 1990. Analytical and Computer Cartography, Prentice Hall Professional Technical Reference. COOK, D., SYMANZIK, J., MAJUREA, J. J. & CRESSIEB, N. 1997. Dynamic graphics in a GIS: more examples using linked software. Computers & Geosciences, 23, 371-385. COWEN, D. 1989. NCGIA lecture. GAHEGAN, M., TAKATSUKA, M., WHEELER, M. & HARDISTY, F. 2002. Introducing GeoVISTA Studio: an integrated suite of visualization and computational methods for exploration and knowledge construction in geography. , Oxford, ROYAUME-UNI, Elsevier. GRASS. 2008. Geographic Resources Analysis Support System [Online]. Available: http://grass.itc.it [Accessed 15 de Febrero de 2010. GREAT BRITAIN. COMMITTEE OF ENQUIRY INTO THE HANDLING OF GEOGRAPHIC INFORMATION 1987. Handling geographic information: report to the Secretary of State for the Environment of the Committee of Enquiry into the Handling of Geographic Information / Chairman, Lord Chorley, London, H.M.S.O. GUTIERREZ PUEBLA, J. G., M. 1997. "SIG: Sistemas de Información Geográfica". Madrid. HEARNSHAW, H. M. & UNWIN, D. J. 1994. Visualization in geographical information systems, Chichester. LONG, Q., ZHANG, Q., VILHJALMSSON, B. J., FORAI, P., SEREN, Ü. & NORDBORG, M. 2013. JAWAMix5: an out-of-core HDF5-based java implementation of whole-genome association studies using mixed models. Bioinformatics. MITAS, L., BROWN, W. M. & MITASOVA, H. 1997. Role of dynamic cartography in simulations of landscape processes based on multi-variate fields. Computers & Geosciences, 23, 437- 446 MORELL, A. & PÉREZ, C. 2006. Biblioteca de módulos de visualización de fluidos para OpenDX. NORTH, C. & SHNEIDERMAN, B. 2000. Snap-Together visualization: Can users construct and operate coordinated visualizations? Int. J. Hum.-Comput. Stud., 53, 715-739. POINOT, M. 2010. Five good reasons to use the hierarchical data format. Computing in Science & Engineering, 12, 84-90. RHYNE, T. M. 1997a. Going virtual with geographic information and scientific visualization. Computers & Geosciences, 23, 489-491. RHYNE, T. M. 1997b. Going virtual with Geographic Information and Scientific Visualization Computers & Geosciences, 23, 489 - 491. Bibliografía RHYNE, T. M., IVEY, W., KNAPP, L., KOCHEVAR, P. & MACE, T. 1994. Visualization and Geographic Information System integration: What are the needs and requirements, if any ? (Panel). IEEE Computer Society. RUMBAUGH, J. & BOOCH, G. 2000. El Lenguaje Unificado de Modelado. Manual de Referencia, Madrid, Addison Wesley. SETTELMAIER, J. B. 2008. 4B. 2 USE OF A GEOGRAPHIC INFORMATION SYSTEMS (GIS) TO ASSESS GRIDDED WEATHER FORECASTS. ams.confex.com [Online]. TAKATSUKA, M. & GAHEGAN, M. 2002. GeoVISTA Studio: a codeless visual programming environment for geoscientific data analysis and visualization. Computers & Geosciences, 28(10), 1131-1144. TREINISH, L. A. & ROGOWITZ, B. E. 1993. An Architecture for Perceptual Rule-Based Visualization. ULLMAN, R. & DENNING, M. HDF5 for NPP sensor and environmental data records. Geoscience and Remote Sensing Symposium (IGARSS), 2012 IEEE International, 2012. IEEE, 1100-1103. YEH, P.-S., XIA-SERAFINO, W., MILES, L., KOBLER, B. & MENASCE, D. Implementation of CCSDS lossless data compression in HDF. Earth Science Technology Conference, 2002. ZHAO, J., WANG, Y. & ZHANG, H. Automated batch processing of mass remote sensing and geospatial data to meet the needs of end users. Geoscience and Remote Sensing Symposium (IGARSS), 2011 IEEE International, 2011. IEEE, 3464-3467.