Personal tools
You are here: Home Development Documents gvSIG desktop 1.0 / 1.1 FMap Layers Layers - FLayer, FlyrDefault, FLayers
Document Actions

Layers - FLayer, FlyrDefault, FLayers

by Pablo Piqueras last modified 2010-06-01 22:46

Con "Layers" se engloba la definición genérica de las capas usadas en gvSIG. FLayer: funcionalidad básica para trabajar con cualquier tipo de capa. FlyrDefault: capa genérica de la que heredan el resto. FLayers: conjunto genérico de capas.

Introducción
-------------
Toda capa utilizada en gvSIG_ hereda de la clase *FlyrDefault*, que implementa la declaración genérica y común de capa: el interfaz *FLayer* .

*FlyrDefault*, es una clase abstracta, con métodos genéricos para trabajar con capas definidos en la interfaz *FLayer*, métodos genéricos para trabajar con *drivers* (para utilizar la capa), definidos en la interfaz *Driver*, y otros métodos propios.

*FLayer*, incluye los métodos necesarios para trabajar con proyecciones, definidos en la interfaz *Projected*, con otros para trabajar con capas.

Por otro lado, es posible tener una colección de capas como nodo de un árbol de capas, y así poder trabajar con distintos niveles. Para ello, se definió la clase *FLayers*, que hereda de *FlyrDefault*, e implementa la interfaz *LayerCollection* con los métodos para trabajar con un conjunto de capas.

Dado que las capas de un mismo nodo pueden ser de distinto tipo, *FLayers* implementa, por compatibilidad, las interfaces *InfoByPoint* y *VectorialData*. Así, es posible que algunas capas trabajen con datos vectoriales, por ello se implementa la interfaz *VectorialData*; y/o a la vez es posible que soporten la operación de obtención de información a partir de un punto, por ello se implementa la interfaz *InfoByPoint*.

El siguiente *diagrama* muestra gráficamente lo explicado, sin entrar en detalles acerca de métodos ni atributos, pero sí *listeners* que se pueden asociar a una capa, con los correspondientes eventos que pueden recibir, y los tipos de excepciones que se pueden llegar a lanzar en caso de producirse algún error trabajando con una capa:

.. figure:: images/layers/dclayers.png
   :height: 842
   :width: 923
   :align: center

   *Diagrama 1: relación entre las clases e interfaces del grupo Layers.*




Descripción y funcionalidad
----------------------------


El interfaz Projected
~~~~~~~~~~~~~~~~~~~~~~
Permite obtener la proyección actual de la capa, o reproyectar a partir de unas coordenadas de transformación.


El interfaz FLayer
~~~~~~~~~~~~~~~~~~~
Define la funcionalidad básica para trabajar con cualquier tipo de capa:

* *Persistencia*: obtener o agregar información completa o solo parcial de la capa.
* *Estado*: hay posibilidad de obtener o insertar el estado completo, o solo de algún atributo:

  * *Activa*: si está o no seleccionada en el *TOC*.
  * *Visible*: una capa es visible si está seleccionado su *checkbox* asociado en el TOC, lo que implica que se intentará pintar la capa a no ser que no estén disponibles los datos necesarios, cosa que sucede a veces con capas de servicios remotos.
  * *Disponible*: si la fuente de datos está *on-line*.
  * *Sucia*: si requiere o no actualizarse.
  * *En TOC*: si está o no en el árbol de capas del *TOC*.
  * *Editándose*: si la capa está siendo o no modificada en este momento.
  * *Puede escribirse*: si hay o no *driver* de escritura para esa capa, y tiene permisos para modificarla.
  * *Caché de capas dibujadas*: si usa o no una imagen con bandas.
* *Identidad*: nombre o descripción de la capa.
* *Carga/Recarga*: leer la información de la capa y agregarla o actualizarla.
* *Dibujado*: lógica de dibujado de la capa.
* *Proyección*:

  * Si es o no reproyectable la capa.
  * Uso de coordenadas de transformación, o información de proyección para proyectarla.
  * Uso de la lógica de control para reproyectarla.
* *Listeners*: lógica a ejecutar cuando se producen ciertos eventos sobre la capa. Permite agregar, obtener, o eliminar listeners a la capa.
* *Escalas visibles*: rango de escalas de *zoom* en que se verá la capa.
* *Gestión de errores*: agregar, u obtener los errores producidos al cargar o trabajar con la capa.
* *Nuevas propiedades*: agregar u obtener nuevas propiedades asociadas a la capa.
* *Clonación*: obtener otra capa idéntica e independiente de la actual.
* *Otra funcionalidad*:

  * Estado correcto.
  * Obtener el modelo de la capa.
  * Obtener posición y dimensiones de la capa.
  * Obtener la imagen de estado en el *TOC*.
  * Obtener una capa compuesta a partir de esta capa (este método está pensado para utilizarse solo en ciertas capas, de tipo *FLayers*).
  * Establecer u obtener el nodo padre de esta capa.
  * Establecer u obtener una imagen en el *TOC* que represente el estado actual de la capa.


El interfaz Driver
~~~~~~~~~~~~~~~~~~~~
Ubicado en la biblioteca *libDriverManager*, define un método para que todos los *drivers* puedan devolver su nombre identificativo.


La clase abstracta FlyrDefault
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mientras que *FLayer* es una definición de funcionalidad genérica para cualquier tipo de capa, *FlyrDefault* representa la capa genérica de la que se particularizará para WMS, WCS, raster, vectorial, capa de texto, colección de capas, etc.

Posee la misma funcionalidad que *FLayer*, y además agrega:

* *Estrategia*: establecer u obtener la estrategia para recorrer la información de la capa.
* *Transparencia*: establecer u obtener el nivel de transparencia.
* *Capas virtuales*: gestionar capas virtuales asociadas a la actual.
* *Capa de texto*: gestionar una capa de texto asociada a la actual.
* *Otra funcionalidad*:

  * Notificar a la capa que va a ser añadida.
  * Establecer la imagen de estado de la capa en el *TOC*.


El interfaz LayerCollection
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Define métodos para trabajar con una colección de capas:

* Agregar, eliminar, mover, u obtener capas.
* Agregar, o eliminar *listeners* de eventos producidos sobre la colección de capas.
* Cambiar la visibilidad de todas las capas de la colección.
* Activar / desativar todas las capas de la colección.
* Obtener las capas visibles.


El interfaz InfoByPoint
~~~~~~~~~~~~~~~~~~~~~~~~
Define un método para obtener información de un área de tolerancia centrada en un punto de la capa o capas.


El interfaz VectorialData
~~~~~~~~~~~~~~~~~~~~~~~~~~
Permite utilizar el patrón software *Visitor* con la lógica que indica cómo procesar datos vectoriales. Además permite procesar todas las geometrías, solo aquellas indicadas, o solo aquellas que corten el perímetro de un rectángulo determinado.


La clase FLayers
~~~~~~~~~~~~~~~~~
Representa un conjunto genérico de capas *(FLayer)*. Posee el mismo  comportamiento que *FLyrDefault*, pero adaptándolo para soportar un árbol de nodos que puede ser cada uno, una sola capa, u otro conjunto *(otro nodo de tipo FLayers)*. Además, incluye la funcionalidad de *LayerCollection*, *InfoByPoint*, y *VectorialData*, y permite:

* Agregar, reemplazar, o eliminar una capa del conjunto.
* Agregar una capa a partir de una entidad XML.
* Dibujar un conjunto de capas, o una capa compuesta.


Excepciones
~~~~~~~~~~~~
El *diagrama* anterior nos muestra los tipos de excepciones que puede lanzar por defecto cualquier tipo de capa, siempre que se haya producido algún tipo de error. Se indica aquí un breve resumen de cada uno de ellas:

* **CancelationException**: problema cuando el usuario cancela una tarea.
* **DriverException**: problema en el código encargado de trabajar con un tipo de fuente de datos determinada.
* **DriverIOException**: similar a *DriverException*, pero particularizado a cuando se realiza una operación de lectura o escritura sobre la fuente de datos.
* **EditionException**: problema cuando una capa o tabla está en estado editable.
* **Exception**: cualquier tipo de exceptión producida.
* **VisitException**: problema utilizando el patrón software *Visitor* accediendo a la información las capas.
* **XMLException**: problema realizando el proceso un *marshall* [#Ma]_ o *unmarshall*.


.. [#Ma] **Marshall** es como se denomina al proceso por el que un objecto se serializa usando XML, es decir, devuelve su información de modo que se pueda transmitir por una conexión, o persistir en un fichero o memoria, siguiendo el estándar XML para estructurar dicha información. Al proceso inverso se le denomina **Unmarshall**.

Enlaces relacionados
--------------------
- En este enlace se muestran unas capturas de gvSIG con las que un usuario puede conocer el `estatus de una capa`_.
- Este otro enlace es una recopilación de los `tipos de capas`_ que se utilizan en gvSIG, o en proyectos relacionados, con una explicación de cada una.
- Visitor_: información de este tipo de patrón software.


.. _gvSIG: http://www.gvsig.gva.es
.. _`estatus de una capa`: ./estatusdelascapas
.. _`tipos de capas`: ./layertypes
.. _Visitor: http://es.wikipedia.org/wiki/Visitor_%28patr%C3%B3n_de_dise%C3%B1o%29

View source document


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: