miércoles, noviembre 19, 2008

SEXTANTE en Kosmo

Kosmo es otra de las aplicaciones SIG de escritorio relativamente populares, basada en OpenJUMP aunque con bastantes modificaciones. La Junta de Extremadura utiliza indistintamente gvSIG y Kosmo, así que nos han encargado que implementemos también SEXTANTE en Kosmo, de forma que puedan disfrutar de las capacidades de análisis del programa en ambos SIG.

Por el momento, la parte vectorial está resuelta, ya que es muy similar a la de OpenJUMP y existían bindings que se han podido aprovechar bastante. Ahora falta la conexión con la parte raster y algunas piezas genéricas, y esto lo iremos haciendo poco a poco a lo largo de las próximas semanas.

El encargado de desarrollar este enlace entre Kosmo y SEXTANTE no soy yo, sino que por primera vez en la historia de SEXTANTE tenemos un programador más. El nuevo miembro del equipo SEXTANTE, que esperemos que pueda seguir trabajando con nosotros durante mucho tiempo (inicialmente van a ser 3 meses), es Nacho Varela, perteneciente al Cartolab de la Universidad de A Coruña. Nacho estuvo por aquí en aquel curso de programación de SEXTANTE que organizamos hace algún tiempo, así que esto de SEXTANTE no le resulta desconocido.

Ademas de esto, tiene también su propio blog sobre SIG, y seguro que irá comentando las novedades de su trabajo con SEXTANTE, así que no lo perdáis de vista porque la cosa promete ;-)

Si hay suerte y el trabajo se da bien, se publicará un paquete de instalación de SEXTANTE para Kosmo antes de fin de año, probablemente cuando lancemos la nueva versión (0.15). Ésta irá acompañada de novedades como la ayuda en inglés o algunos algoritmos nuevos, y corregirá todos los errores que se han detectado en la primera versión de la librería.

jueves, noviembre 13, 2008

Más algoritmos

Hacía tiempo que no escribía nuevos algoritmos y sólo trabajaba en el núcleo de SEXTANTE y en otras cosas para poder sacar una versión más estable para las jornadas de gvSIG, así que hoy me he relajado un poco y he añadido un par de ellos, para así romper la monotonía.

El primero es un algoritmo para pasar un test de normalidad a una variable de una capa vectorial, en particular el test de Shapiro-Wilk. Como suponía que ya alguien lo habría implementado antes que yo, y probablemente en Java existiera algo ya hecho, he buscado un poco y he reutilizado codigo...de LimeWire! Ventajas del software libre ;-)

El segundo es una ampliación del anteriormente denominado "sinuosidad", que ahora se llama "propiedades geométricas de lineas" y ademas de medir las variables que medía antes, hace también algunos análisis estadísticos de los ángulos entre segmentos de cada línea.

Nada demasiado importante, pero poco a poco la colección de algoritmos de SEXTANTE va creciendo y mejorando, que es lo que en el fondo importa

lunes, noviembre 10, 2008

Algo de personalizacion

Sigo dándole vueltas a la forma ideal de disponer los algoritmos disponibles para que al usuario le resulte lo mas sencillo posible acceder a ellos y encontrarlos, al mismo tiempo que permita a los desarrolladores darle algo de identidad propia a su trabajo de forma sencilla, teniendo más posibilidades que simplemente incorporarlos a la gran masas de otros algoritmos ya existentes.

Una idea que acabo de implementar es la posibilidad de incorporar filtros en el panel que presenta el árbol de extensiones. Se puede crear cualquier filtro sin mas que implementar la interfaz IGeoAlgorithmFilter, y después se le pasa al constructor del panel, que sólo añadirá aquellos algoritmos que pasen dicho filtro.

De esta forma, se puede crear una caja de herramientas más personalizada, que contenga sólo unos algoritmos dados, o replicar el comportamiento de la antigua caja de herramientas, con varias pestañas (utilizando sencillamente varios paneles, cada uno de ellos con un filtro distinto). Asimismo, pueden crearse varias cajas de herramientas, lo cual puede ayudar a localizar mejor las extensiones (cada caja podría accederse desde un botón), así como a dar identidad propia a un grupo de algoritmos desarrollados por una empresa o bien a un conjunto de ellos que tengan algún rasgo común.

De cualquier forma, no es la solución definitiva, y la interfaz puede aún mejorar bastante. Seguiré dándole vueltas a la idea. Cualquier sugerencia por parte de los usuarios es, por supuesto, bienvenida.

miércoles, noviembre 05, 2008

Más allá de los ficheros

La concepción de SEXTANTE era hasta ahora muy fichero-céntrica. Esto se podía entender estando dentro del contexto de un SIG como gvSIG (a pesar de que gvSIG se conecta a bases de datos e incluso ya tiene capacidades para publicar cartografía), pero en la actual situación de librería es necesario que las salidas se puedan manejar de un modo más flexible, no necesariamente metiéndolas en un fichero.

Andrea Aime (GeoTools/GeoServer) está trabajando en integrar GeoServer y SEXTANTE, y apuntaba hace algunos días que él necesitaría poder hacer algún tipo de streaming con los resultados que va generando SEXTANTE, a medida que éstos se van calculando. Con todo esto, estaba claro que había llegado el momento de darle una nueva visión a SEXTANTE en lo que a gestión de salidas respecta.

He sustituido el nombre de fichero que iba asociado a cada salida (y que si era nulo implicaba que se guardaría en un archivo temporal) por un objecto que implementa la interfaz IOutputChannel. Básicamente se trata de un objecto que dice "dónde" hay que poner los datos. Hay un FileOutputChannel, que replica el comportamiento anterior, pero la arquitectura permite ya desarrollar muchos otros, según las necesidades.

En los bindings de GeoTools hay una clase de prueba que testea la clase StreamOutputChannel, la cual define la salida con un simple PrintStream. El ejecutar alguna operación que vaya generando entidades vectoriales, a medida que éstas se añaden a la capa correspondiente, en lugar de añadirlas a un archivo lo que hace es imprimirlas al PrintStream, imprimiendo la descripción WKT de la geometría y después los valores de los atributos.

Es un cambio pequeño que no ha de afectar nada a los antiguos usuarios, pero que abre muchas nuevas posibilidades para otros, que espero sepan aprovecharlas.