viernes, octubre 15, 2010

Una solución para el problema de los rasters grandes

Como muchos ya sabéis, SEXTANTE no hace gestión de datos (lectura, escritura y creación de capas) por sí mismo, sino que delega en la aplicación que tiene debajo para estas tareas. Esto quiere decir que, por ejemplo, si se va a crear una capa raster de gran tamaño, SEXTANTE no la crea, sino que se la pide al SIG que tiene debajo y después la rellena de valores, y es el SIG quien luego se encarga de guardarla en el fichero correspondiente.

Como muchos ya sabréis, esto también significa que, si el SIG no es capaz de hacer estas cosas eficientemente, el uso de este tipo de funcionalidades en SEXTANTE no va a salir bien. El problema es que, por el momento, esto no parece estar solucionado en los SIG que usan SEXTANTE, así que se presentan frecuentemente problemas de memoria.

En el caso de gvSIG, se ha hecho algo para manejo de grandes capas en escritura, pero la solución está por mejorarse para contemplar más casos posibles (los algoritmos de SEXTANTE tienen una casuística variada en lo que al acceso en escritura respecta), y por el momento no se está usando desde SEXTANTE. Existe, asimismo, el problema en lectura, en el que espero un día de estos poder ponerme a trabajar junto a la gente de gvSIG para solucionarlo.

Intentando dar una solución genérica a esto, he empezado a pensar en una alternativa en la que, saltándome un poco la arquitectura independiente de SEXTANTE, sea el propio SEXTANTE quien escriba los datos y los gestione cuando estos son muy voluminosos. Para ello estoy usando una librería que permite imágenes tileadas con caché en disco, de forma que, combinada con JAI, me permitiría hacer yo mismo todo eso. Despues, cuando SEXTANTE le pida a la InputFactory correspondiente una capa raster, si esta es grande, devuelva una de estas imágenes tileadas.

No sé muy bien como va a quedar esto, pero es interesante probar. Obviamente, el rendimiento será peor, pero si funciona, va a permitir crear capas de gran tamaño sin los problemas actuales.

Iré contando por aquí como va la cosa.