Al comenzar el desarrollo del proyecto, se había decidido emplear la biblioteca de HDF-Java 2.9, la cual tiene soporte para archivos HDF4, HDF5 y NetCDF. Luego de realizado un estudio sobre el API de HDF-Java se detectó que internamente esta biblioteca emplea el API para el formato NetCDF que provee UNIDATA. La versión 2.9 de HDF-Java emplea la versión 4.0 del API de NetCDF. Esta versión ya se encuentra en desuso, y ya no se encuentra disponible en los servidores de UNIDATA.
Se decidió no emplear la biblioteca HDF-Java para el desarrollo del proyecto, y en lugar de esta emplear el API para archivos NetCDF en su versión 4.2, del cual se cuenta con el código fuente y la documentación del API en la dirección URL:
Se decidió no emplear la biblioteca HDF-Java para el desarrollo del proyecto, y en lugar de esta emplear el API para archivos NetCDF en su versión 4.2, del cual se cuenta con el código fuente y la documentación del API en la dirección URL:
ftp://ftp.unidata.ucar.edu/pub/netcdf-java/v4.2/
Se descargó el archivo mínimo del API de NetCDF desde la URL:
ftp://ftp.unidata.ucar.edu/pub/netcdf-java/v4.2/netcdf-4.2.jar
Fue necesario descargar el API de SLF4J para Logs desde la URL:
http://www.slf4j.org/dist/slf4j-1.7.5.tar.gz
Del cual se empleó la biblioteca:
slf4j-api-1.7.5.jar
Usando el API 4.2 de UNIDATA
El API 4.2 de UNIDATA brinda una serie de ventajas sobre el API 4.0 empleado por la biblioteca HDF-Java 2.9. En esta nueva versión del API se incorpora el concepto de sistemas de coordenadas mediante la clase CoordinateSystem. Un sistema de coordenadas no es más que una abstracción compuesta por un conjunto de ejes de coordenadas o dimensiones (CoordinateAxis) y se encuentra asociado a una o más variables de datos. Esta nueva abstracción permite la identificación automática de los diferentes ejes de coordenadas que pueden incidir en la representación gráfica de la información del archivo NetCDF (latitud, longitud, tiempo, altura,...).
Para obtener todos los sistemas de coordenadas asociados a un archivo NetCDF, podemos ejecutar el siguiente fragmento de código:
Para obtener todos los sistemas de coordenadas asociados a un archivo NetCDF, podemos ejecutar el siguiente fragmento de código:
// Abre el archivo NetCDF
NetcdfFile file = NetcdfFile.open(filename);
NetcdfDataset fileDataSet = new NetcdfDataset(file);
// Inicializa las estructuras para almacenar los ejes coordenados
datas = new ArrayList<CoordinateSystem>();
// Obtiene todos los sistemas de coordenadas
List<CoordinateSystem> coordSystems = fileDataSet.getCoordinateSystems();
Para acceder a los ejes de coordenadas o dimensiones que componen el sistema de coordenadas se emplean los métodos en función del eje de coordenadas que queremos obtener:
- getCoordinateAxes(): Devuelve una lista con todos los ejes de coordenadas.
- getAzimuthAxis(): Sistema de coordenadas polares
- getElevationAxis(): Sistema de coordenadas polares
- getHeightAxis(): Sistema de coordenadas verticales
- getLatAxis(): Devuelve el eje de coordenadas asociado a la latitud en un sistema geográfico
- getLonAxis(): Devuelve el eje de coordenadas asociado a la longitud en un sistema geográfico
- getPressureAxis(): Sistema de coordenadas verticales
- getRadialAxis(): Sistema de coordenadas polares
- getTaxis(): Devuelve el eje de coordenadas asociado a una variable de tiempo
- getXaxis(): Transformación de los ejes de coordenadas de latitud
- getYaxis(): Transformación de los ejes de coordenadas de longitud
- getZaxis(): Transformación de los ejes de coordenadas verticales
En la extensión solo emplearemos los ejes de coordenadas de latitud, longitud y tiempo, así como sus transformaciones X e Y en caso de existir. Para obtener más información puede consultar el modelo de datos.
Para determinar si una variable de datos está asociada a un sistema de coordenadas, o sea, si se puede acceder a los datos de la variable utilizando las dimensiones que componen el sistema de coordenadas, ejecutamos el siguiente fragmento de código:
Para determinar si una variable de datos está asociada a un sistema de coordenadas, o sea, si se puede acceder a los datos de la variable utilizando las dimensiones que componen el sistema de coordenadas, ejecutamos el siguiente fragmento de código:
CoordinateSystem system = ...
// Obtenemos todas las variables del archivo NetCDF
List<Variable> vars = file.getVariables();
// Recorre todas las variables para encontrar las asociadas al sistema de coordenadas
for (Variable var : vars) {
// Verifica si la variable está asociada al sistema de coordenadas
if (system.isCoordinateSystemFor(var)) {
...
}
}
No hay comentarios.:
Publicar un comentario