Personal tools
You are here: Home Development Documents gvSIG desktop 1.0 / 1.1 FMap MapControl ToolListener
Document Actions

ToolListener

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

''Listeners'' utilizados para tratar los eventos generados por el ''Behavior'' seleccionado en MapControl, y así permitir la interacción con éste simulando una determinada herramienta.

Introducción
-------------

Según el tipo de capas visibles y activas, gvSIG_ nos proporcionará una serie de herramientas con las que el usuario podrá interaccionar con el objeto MapControl que contiene las capas.

Al seleccionar cualquiera de las herramientas disponibles, lo que se está haciendo es seleccionar un comportamiento para trabajar con MapControl_, que puede ser el resultado de múltiples comportamientos denominados cada uno Behavior_, cada uno con una *ToolListener*.

La librería *libFMap* define cada uno de estos comportientos básicos, que procesan los eventos de ratón producidos en MapControl, generando otros eventos_ con la información necesaria según su naturaleza. Estos eventos serán los que se envíen a la herramienta actualmente seleccionada para interactuar con MapControl.

Dicha herramienta tendrá un icono que verá el usuario en su cursor, y una serie de métodos que serán invocados según el tipo de evento que se produzca.

Las *ToolListener* incluyen la lógica que complementa a los *Behavior* para simular una herramienta con la que interactuar con un objeto de tipo MapControl.

En la librería *libFMap* se definen las *ToolListener* básicas, pero existen otras muchas que heredan de estas, y están definidas en otros proyectos. Destacar las que proporciona el proyecto *appgvSIG*, que, en general, solo agregan como funcionalidad el actualizar las herramientas disponibles en la GUI de gvSIG_ , una ejecutada la lógica de la herramienta de la que hereda *(en libFMap)*.


Diagramas
----------

Existe multitud de herramientas definidas en la librería *libFMap*, todas implementan la interfaz *ToolListener*, y se agrupan en 5 tipos, según se puede observar en el *diagrama 1*: selección por área circular, rectangular, polinínea, por punto, o de tipo *drag & drop* (arrastrar y soltar).

Todas reciben eventos fruto de acciones realizadas con el ratón sobre la vista *(MapControl)* .


Diagrama con las interfaces para todas las herramientas
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. figure:: images/mapcontrol/dcinterfacesbasetoolslibfmap.png
   :height: 153
   :width: 638
   :align: center

   *Diagrama 1: diagrama de clases con las interfaces base que implementan todos los listeners de las herramientas definidas en libFMap. El color morado representa un elemento del diagrama global de MapContext.*


Diagrama con herramientas que implementan CircleListener
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

El *diagrama 2* muestra los *tool listener* definidos en la librería *libFMap*  
asociados a una selección por área circular.

.. figure:: images/mapcontrol/dclistenersimplcirclelistener.png
   :height: 164
   :width: 346
   :align: center

   *Diagrama 2: diagrama de clases: Listeners de herramientas de libFMap que implementan CircleListener.*


+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **Tipo**                          | **Proyecto**    | **Descripción**                                                                    | **Cancelable**   | **Eventos a los que responde** | **Icono**                                                                                             |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
+===================================+=================+====================================================================================+==================+================================+=======================================================================================================+
| **CircleMeasureListener**         | *appgvSIG*      | Calcula el radio del círculo y lo muestra en el la barra de estado de              | *No.*            | *MeasureEvent*                 | .. figure:: images/mapcontrol/toollistenericons/ictlrulercursor.png                                   |
|                                   |                 | *gvSIG* como distancias parcial y total.                                           |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+


Diagrama con herramientas que implementan PanListener
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

El *diagrama 3* muestra los *tool listener* definidos en la librería *libFMap*  
asociados a una selección de tipo *drag & drop* (arrastrar y soltar).


.. figure:: images/mapcontrol/dclistenerstypepanlistener.png
   :height: 283
   :width: 455
   :align: center

   *Diagrama 3: diagrama de clases: Listeners de herramientas de libFMap que implementan PanListener.*


+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **Tipo**                          | **Proyecto**    | **Descripción**                                                                    | **Cancelable**   | **Eventos a los que responde** | **Icono**                                                                                             |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
+===================================+=================+====================================================================================+==================+================================+=======================================================================================================+
| **MapOverviewChangeZoomListener** | *appgvSIG*      | Actualiza el *extent* del *ViewPort* del *MapControl* con el área                  | *Sí.*            | *RectangleEvent*, *MoveEvent*  | .. figure:: images/mapcontrol/toollistenericons/ictlzoomincursor.gif                                  |
|                                   |                 | rectangular seleccionada, o dibuja en el *MapOverview* asociado                    |                  |                                |                                                                                                       |
|                                   |                 | un rectángulo delimitando dicha área.                                              |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | De este segundo modo establece dicha área como el *extent* a visualizar en         |                  |                                |                                                                                                       |
|                                   |                 | el objeto *MapControl* asociado al *MapOverview*.                                  |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **MapOverviewPanListener**        | *appgvSIG*      | Desplaza el área rectangular bajo el cursor del ratón en el objeto                 | *Sí.*            | *MoveEvent*                    | .. figure:: images/mapcontrol/toollistenericons/ictlcruxcursor.png                                    |
|                                   |                 | *MapOverview* según se arrastra éste mientras se mantiene pulsado su               |                  |                                |                                                                                                       |
|                                   |                 | botón derecho.                                                                     |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | De este modo se establece dicha área como el *extent* a visualizar en              |                  |                                |                                                                                                       |
|                                   |                 | el objeto *MapControl* asociado al *MapOverview*.                                  |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **PanListenerImpl**               | *libFMap*       | Actualiza el *ViewPort* del objeto *MapControl* asociado con un nuevo              | *Sí.*            | *MoveEvent*                    | .. figure:: images/mapcontrol/toollistenericons/ictlhand.png                                          |
|                                   |                 | *extent*.                                                                          |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **PanListener**                   | *appgvSIG*      | Igual a *PanListenerImpl*, actualizando los controles disponibles de la            | *Sí.*            | *MoveEvent*                    | .. figure:: images/mapcontrol/toollistenericons/ictlhand.png                                          |
|                                   |                 | interfaz gráfica de *gvSIG* para trabajar con la información actual en el          |                  |                                |                                                                                                       |
|                                   |                 | objeto *MapControl* asociado.                                                      |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+


Diagrama con herramientas que implementan PointListener
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

El *diagrama 4* muestra los *tool listener* definidos en la librería *libFMap* asociados a una selección por punto.

.. figure:: images/mapcontrol/smalldclistenerstypepointlistener.png
   :height: 275
   :width: 800
   :align: center

   *Diagrama 4: diagrama de clases: Listeners de herramientas de libFMap que implementan PointListener.*


Pulse aquí_ para ver el *diagrama 4* en tamaño completo.


+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **Tipo**                          | **Proyecto**    | **Descripción**                                                                    | **Cancelable**   | **Eventos a los que responde** | **Icono**                                                                                             |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
+===================================+=================+====================================================================================+==================+================================+=======================================================================================================+
| **DwgEntityListener**             | *extDWG*        | Selecciona una geometría que tenga un punto en la posición                         | *No.*            | *PointEvent*                   | *Cursor.CROSSHAIR_CURSOR*                                                                             |
|                                   |                 | seleccionada por el cursor, en una capa con información DWG.                       |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **InfoListener**                  | *appgvSIG*      | Muestra la información alfanumérica disponible para el punto seleccionado          | *No.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlinfocursor.gif                                    |
|                                   |                 | y un área alrededor de 7 unidades equivalentes en coordenadas del mapa, en         |                  |                                |                                                                                                       |
|                                   |                 | todas las capas activas del *MapControl* asociado.                                 |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Dicha información se muestra en forma de tabla.                                    |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **LinkListener**                  | *appgvSIG*      | Muestra en un panel información (imagen, texto, etc) asociada a cualquier          | *No.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictllink.png                                          |
|                                   |                 | *feature* de las capas activas cuya área intersecte con el punto                   |                  |                                |                                                                                                       |
|                                   |                 | seleccionado.                                                                      |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **MapOverviewListener**           | *appgvSIG*      | Crea un rectángulo centrado en el punto seleccionado con el botón                  | *Sí.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlcruxcursor.png                                    |
|                                   |                 | izquierdo del ratón sobre el objeto *MapOverview* asociado.                        |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | De este modo se establece dicha área como el *extent* a visualizar en              |                  |                                |                                                                                                       |
|                                   |                 | el objeto *MapControl* asociado al *MapOverview*.                                  |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **PointSelectionListener**        | *libFMap*       | Selecciona todas las *features* de capas vectoriales activas del objeto            | *No.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlpointselectcursor.png                             |
|                                   |                 | *MapControl* asociado cuya área intersecte con el punto seleccionado por           |                  |                                |                                                                                                       |
|                                   |                 | un simple *click* de cualquier botón del ratón.                                    |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **PointSelectListener**           | *appgvSIG*      | Igual a *PointSelectionListener* actualizando los controles disponibles de         | *No.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlpointselectcursor.png                             |
|                                   |                 | la interfaz gráfica de *gvSIG* para trabajar con la información actual en          |                  |                                |                                                                                                       |
|                                   |                 | el objeto *MapControl* asociado.                                                   |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **SelectImageListenerImpl**       | *libFMap*       | *ToolListener* anticuado que permitía tener *SelectImageListener* en               | *Sí.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlpointselectcursor.png                             |
|                                   |                 | *appgvSIG* para la selección de capa raster.                                       |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **SelectImageListener**           | *appgvSIG*      | Selecciona la capa *raster* situada más arriba en el TOC con información           | *Sí.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlpointselectcursor.png                             |
|                                   |                 | en la posición indicada en el objeto *MapControl* asociado. Dicha capa             |                  |                                |                                                                                                       |
|                                   |                 | pasará a estar *activa*, mientras que el resto estará como *no activas*.           |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Posteriormente actualiza los controles disponibles de                              |                  |                                |                                                                                                       |
|                                   |                 | la interfaz gráfica de *gvSIG* para trabajar con la información actual en          |                  |                                |                                                                                                       |
|                                   |                 | el objeto *MapControl* asociado.                                                   |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Esta *ToolListener* también está anticuada.                                        |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **StatusBarListener**             | *appgvSIG*      | Muestra en la barra de estado de la interfaz gráfica de *gvSIG* las                | *No.*            | *PointEvent*                   | *No utiliza icono.*                                                                                   |
|                                   |                 | coordenadas equivalentes al punto sobre el objeto *MapControl* asociado,           |                  |                                |                                                                                                       |
|                                   |                 | llamémosle *m*.                                                                    |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Sigue las siguientes reglas para obtener las expresiones de las                    |                  |                                |                                                                                                       |
|                                   |                 | coordenadas:                                                                       |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Si *m* no está proyectado, expresa las coordenadas como distancia en               |                  |                                |                                                                                                       |
|                                   |                 | píxeles respecto la esquina superior izquierda (0, 0).                             |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Si estando proyectado, las unidades de medida de distancia del *ViewPort*          |                  |                                |                                                                                                       |
|                                   |                 | de *m* están en *grados*, calcula las coordenadas geográficas.                     |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | En cualquier otro caso expresa las coordenadas como números decimales              |                  |                                |                                                                                                       |
|                                   |                 | teniendo en cuenta la proyección actual.                                           |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | En caso de no estar proyectado *m*, expresará las coordenadas como                 |                  |                                |                                                                                                       |
|                                   |                 | latitud: *Lat =* y longitud: *Long =*, sino como X: *X =* e Y: *Y =*, como         |                  |                                |                                                                                                       |
|                                   |                 | prefijo, mientras que como sufijo:                                                 |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | *En caso de utilizar números decimales: 8 decimales si la proyección de            |                  |                                |                                                                                                       |
|                                   |                 | *m* es *EPSG: 4230* ó *EPSG: 4326*, o 2 decimales con cualquier otra               |                  |                                |                                                                                                       |
|                                   |                 | proyección.                                                                        |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | En caso de no utilizar números decimales, seguirá este patrón:                     |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | **S?Gº M' S''**, con:                                                              |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | - *S?*: opcionalmente, el símbolo *-* en caso de ser negativa.                     |                  |                                |                                                                                                       |
|                                   |                 | - *G*: grados equivalentes.                                                        |                  |                                |                                                                                                       |
|                                   |                 | - *M*: minutos equivalentes.                                                       |                  |                                |                                                                                                       |
|                                   |                 | - *S*: segundos equivalentes.                                                      |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **ToolSelectGraphic**             | *extCAD*        | Selecciona ítems de la capa *GraphicLayer* de objeto *MapControl*                  | *No.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlpointselectcursor.png                             |
|                                   |                 | asociado, cuya área intersecta con el punto indicado.                              |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **WCSZoomPixelCursorListener**    | *extWCS*        | Realiza una operación de *zoom acercar* en el objeto *MapControl*                  | *No.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlzoompixelcursor.gif                               |
|                                   |                 | asociado, tomando como centro el punto seleccionado.                               |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | El factor de *zoom* dependerá de la resolución máxima de las capas activas         |                  |                                |                                                                                                       |
|                                   |                 | con información *WCS*                                                              |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **ZoomOutListenerImpl**           | *libFMap*       | Realiza una operación de *zoom alejar* sobre el objeto *MapControl*                | *Sí.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlzoomoutcursor.gif                                 |
|                                   |                 | asociado. Para ello calcula el nuevo *extent* de su *ViewPort* según               |                  |                                |                                                                                                       |
|                                   |                 | las siguientes ecuaciones:                                                         |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | ::                                                                                 |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 |  ViewPort vp = mapControl.getMapContext().getViewPort();                           |                  |                                |                                                                                                       |
|                                   |                 |  Point2D p2 = vp.toMapPoint(event.getPoint());                                     |                  |                                |                                                                                                       |
|                                   |                 |  double factor = 1/MapContext.ZOOMOUTFACTOR;                                       |                  |                                |                                                                                                       |
|                                   |                 |  Rectangle2D.Double r = new Rectangle2D.Double();                                  |                  |                                |                                                                                                       |
|                                   |                 |  double nuevoX = p2.getX() - ((vp.getExtent().getWidth() * factor) / 2.0);         |                  |                                |                                                                                                       |
|                                   |                 |  double nuevoY = p2.getY() - ((vp.getExtent().getHeight() * factor) / 2.0);        |                  |                                |                                                                                                       |
|                                   |                 |  r.x = nuevoX;                                                                     |                  |                                |                                                                                                       |
|                                   |                 |  r.y = nuevoY;                                                                     |                  |                                |                                                                                                       |
|                                   |                 |  r.width = vp.getExtent().getWidth() * factor;                                     |                  |                                |                                                                                                       |
|                                   |                 |  r.height = vp.getExtent().getHeight() * factor;                                   |                  |                                |                                                                                                       |
|                                   |                 |  vp.setExtent(r);                                                                  |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Hay que contar que el *extent* calculado no tendrá porqué coincidir con            |                  |                                |                                                                                                       |
|                                   |                 | el que en última instancia se visualize, dado que *ViewPort*                       |                  |                                |                                                                                                       |
|                                   |                 | se encargará de calcular el *extent ajustado* a partir de éste.                    |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **ZoomOutListener**               | *appgvSIG*      | Igual a *ZoomOutListenerImpl* actualizando los controles disponibles de            | *Sí.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlzoomoutcursor.gif                                 |
|                                   |                 | la interfaz gráfica de *gvSIG* para trabajar con la información actual en          |                  |                                |                                                                                                       |
|                                   |                 | el objeto *MapControl* asociado.                                                   |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **ZoomOutRightButtonListener**    | *libFMap*       | Funciona igual que  *ZoomOutListenerImpl*, pero sólo como respuesta                | *Sí.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlzoomoutcursor.gif                                 |
|                                   |                 | al pulsado del botón derecho del ratón.                                            |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **ZoomPixelCursorListener**       | *appgvSIG*      | Realiza una operación de *zoom acercar* calculando el nuevo *extent* del           | *No.*            | *PointEvent*                   | .. figure:: images/mapcontrol/toollistenericons/ictlzoompixelcursor.gif                               |
|                                   |                 | *ViewPort* del objeto *MapControl* asociado centrado en su pixel más               |                  |                                |                                                                                                       |
|                                   |                 | al punto seleccionado.                                                             |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+


Diagrama con herramientas que implementan PolylineListener
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

El *diagrama 5* muestra los *tool listener* definidos en la librería *libFMap* asociados a una selección por polilínea.

.. figure:: images/mapcontrol/dclistenerstypepolylinelistener.png
   :height: 291
   :width: 546
   :align: center

   *Diagrama 5: diagrama de clases: Listeners de herramientas de libFMap que implementan PolylineListener.*


+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **Tipo**                          | **Proyecto**    | **Descripción**                                                                    | **Cancelable**   | **Eventos a los que responde** | **Icono**                                                                                             |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
+===================================+=================+====================================================================================+==================+================================+=======================================================================================================+
| **AreaListenerImpl**              | *libFMap*       | Calcula perímetro y área de la selección rectangular definida con dos vértices     | *No.*            | *MeasureEvent*                 | .. figure:: images/mapcontrol/toollistenericons/ictlareacursor.png                                    |
|                                   |                 | de una de sus diagonales.                                                          |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Si el objeto *MapControl* no está proyectado, toma las coordenadas como            |                  |                                |                                                                                                       |
|                                   |                 | geográficas (latitud - longitud), sino, las calcula teniendo en cuenta su          |                  |                                |                                                                                                       |
|                                   |                 | proyección y unidades de medida.                                                   |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **AreaListener**                  | *appgvSIG*      | Igual que *AreaListenerImpl* actualizando la información de perímetro y área       | *No.*            | *MeasureEvent*                 | .. figure:: images/mapcontrol/toollistenericons/ictlareacursor.png                                    |
|                                   |                 | en la barra de estado de la GUI de *gvSIG*.                                        |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **MeasureListenerImpl**           | *libFMap*       | Calcula y muestra por la *salida estándar* el valor de la longitud total y la del  | *No.*            | *MeasureEvent*                 | .. figure:: images/mapcontrol/toollistenericons/ictlrulercursor.png                                   |
|                                   |                 | último segmento de la polilínea definida por una serie de puntos.                  |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **MeasureListener**               | *appgvSIG*      | Calcula y muestra por en el *statusbar* de *gvSIG* el valor de la longitud total   | *No.*            | *MeasureEvent*                 | .. figure:: images/mapcontrol/toollistenericons/ictlrulercursor.png                                   |
|                                   |                 | y la del último segmento de la polilínea definida por una serie de puntos.         |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **PolygonSelectionListener**      | *libFMap*       | Selecciona todas las *features* de las capas activas y vectoriales que             | *No.*            | *MeasureEvent*                 | .. figure:: images/mapcontrol/toollistenericons/ictlpolygoncursor.png                                 |
|                                   |                 | intersecten con el área poligonal definida sobre el objeto *MapControl* asociado.  |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | La selección se producirá una vez se finalice la creacción de la polilínea.        |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **PolygonSelectListener**         | *appgvSIG*      | Igual a *PolygonSelectionListener* actualizando los controles disponibles de       | *No.*            | *MeasureEvent*                 | .. figure:: images/mapcontrol/toollistenericons/ictlpolygoncursor.png                                 |
|                                   |                 | la interfaz gráfica de *gvSIG* para trabajar con la información actual en          |                  |                                |                                                                                                       |
|                                   |                 | el objeto *MapControl* asociado.                                                   |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+


Diagrama con herramientas que implementan RectangleListener
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

El *diagrama 6* muestra los *tool listener* definidos en la librería *libFMap*  
asociados a una selección por área rectangular.


.. figure:: images/mapcontrol/dclistenerstyperectanglelistener.png
   :height: 300
   :width: 702
   :align: center

   *Diagrama 6: diagrama de clases: Listeners de herramientas de libFMap que implementan RectangleListener.*


+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **Tipo**                          | **Proyecto**    | **Descripción**                                                                    | **Cancelable**   | **Eventos a los que responde** | **Icono**                                                                                             |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
+===================================+=================+====================================================================================+==================+================================+=======================================================================================================+
| **MapOverviewChangeZoomListener** | *appgvSIG*      | Permite realizar un cambio de *extent* según un área rectangular definida sobre    | *Sí.*            | *MoveEvent*, *RectangleEvent*  | .. figure:: images/mapcontrol/toollistenericons/ictlzoomincursor.gif                                  |
|                                   |                 | un objeto de tipo *MapOverview*.                                                   |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Si la acción es un *movimiento*, y el objeto asociado es de tipo *MapOverview*     |                  |                                |                                                                                                       |
|                                   |                 | actualiza el *extent* manteniendo el *zoom*.                                       |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Si la acción es la selección de un área rectangular, y supera los 3x3 píxeles,     |                  |                                |                                                                                                       |
|                                   |                 | realiza una operación de *zoom in* adaptando el *ViewPort* de *MapOverview*        |                  |                                |                                                                                                       |
|                                   |                 | al *extent* equivalente en coordenadas del mundo al área seleccionada.             |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **RectangleSelectionListener**    | *libFMap*       | De las capas vectoriales que estén activas, selecciona todas las *features* que    | *No.*            | *RectangleEvent*               | .. figure:: images/mapcontrol/toollistenericons/ictlrectselectcursor.gif                              |
|                                   |                 | intersecten con el área rectangular definida.                                      |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **RectangleSelectListener**       | *appgvSIG*      | Igual a *RectangleSelectionListener* actualizando los controles disponibles de     | *No.*            | *RectangleEvent*               | .. figure:: images/mapcontrol/toollistenericons/ictlrectselectcursor.gif                              |
|                                   |                 | la interfaz gráfica de *gvSIG* para trabajar con la información actual en          |                  |                                |                                                                                                       |
|                                   |                 | el objeto *MapControl* asociado.                                                   |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **SaveRasterListenerImpl**        | *libFMap*,      | Almacena el área rectangular definida, en coordenadas del mapa y del mundo.        | *Sí.*            | *RectangleEvent*               | .. figure:: images/mapcontrol/toollistenericons/ictlrectselectcursor.gif                              |
|                                   | *extRasterTools*|                                                                                    |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **SaveRasterListener**            |*extRasterTools* | Permite guardar el área rectangular seleccionada, como un fichero *raster*, vía un | *Sí.*            | *RectangleEvent*               | .. figure:: images/mapcontrol/toollistenericons/ictlrectselectcursor.gif                              |
|                                   |                 | panel cone opciones de salvado.                                                    |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **ExportToGeoRasterToolListener** |*extRasterTools* | El diálogo de recorte raster utiliza esta herramienta para permitir al usuario     | *Sí.*            | *RectangleEvent*               | .. figure:: images/mapcontrol/toollistenericons/ictlrectselectcursor.gif                              |
|                                   |                 | seleccionar una nueva área y con ello actualizar las coordenadas de recorte.       |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **ZoomInListenerImpl**            | *libFMap*       | Realiza una operación de *zoom acercar* sobre el objeto *MapControl*               | *Sí.*            | *RectangleEvent*               | .. figure:: images/mapcontrol/toollistenericons/ictlzoomincursor.gif                                  |
|                                   |                 | asociado. Para ello calcula el nuevo *extent* de su *ViewPort* según               |                  |                                |                                                                                                       |
|                                   |                 | las siguientes ecuaciones:                                                         |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | ::                                                                                 |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 |  double factor = 1/MapContext.ZOOMINFACTOR;                                        |                  |                                |                                                                                                       |
|                                   |                 |  Rectangle2D rect = event.getWorldCoordRect();                                     |                  |                                |                                                                                                       |
|                                   |                 |  Rectangle2D.Double r = new Rectangle2D.Double();                                  |                  |                                |                                                                                                       |
|                                   |                 |  ViewPort vp = mapCtrl.getMapContext().getViewPort()"                              |                  |                                |                                                                                                       |
|                                   |                 |  double nuevoX = rect.getMaxX() - ((vp.getExtent().getWidth() * factor) / 2.0);    |                  |                                |                                                                                                       |
|                                   |                 |  double nuevoY = rect.getMaxY() - ((vp.getExtent().getHeight() * factor) / 2.0);   |                  |                                |                                                                                                       |
|                                   |                 |  Rectangle2D.Double r;                                                             |                  |                                |                                                                                                       |
|                                   |                 |  r.x = nuevoX;                                                                     |                  |                                |                                                                                                       |
|                                   |                 |  r.y = nuevoY;                                                                     |                  |                                |                                                                                                       |
|                                   |                 |  r.width = vp.getExtent().getWidth() * factor;                                     |                  |                                |                                                                                                       |
|                                   |                 |  r.height = vp.getExtent().getHeight() * factor;                                   |                  |                                |                                                                                                       |
|                                   |                 |  vp.setExtent(r);                                                                  |                  |                                |                                                                                                       |
|                                   |                 |                                                                                    |                  |                                |                                                                                                       |
|                                   |                 | Hay que contar que el *extent* calculado no tendrá porqué coincidir con            |                  |                                |                                                                                                       |
|                                   |                 | el que en última instancia se visualize, dado que que *ViewPort*                   |                  |                                |                                                                                                       |
|                                   |                 | se encargará de calcular el *extent ajustado* a partir de éste.                    |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+
| **ZoomInListener**                | *appgvSIG*      | Igual a *ZoomInListenerImpl* actualizando los controles disponibles de             | *Sí.*            | *RectangleEvent*               | .. figure:: images/mapcontrol/toollistenericons/ictlzoomincursor.gif                                  |
|                                   |                 | la interfaz gráfica de *gvSIG* para trabajar con la información actual en          |                  |                                |                                                                                                       |
|                                   |                 | el objeto *MapControl* asociado.                                                   |                  |                                |                                                                                                       |
+-----------------------------------+-----------------+------------------------------------------------------------------------------------+------------------+--------------------------------+-------------------------------------------------------------------------------------------------------+


.. _`tipos de eventos`: ./toollistenersevents
.. _aquí: images/mapcontrol/dclistenerstypepointlistener.png
.. _MapControl: ./mapcontrol
.. _Behavior: ./behavior
.. _gvSIG: http://www.gvsig.gva.es/
.. _eventos: ./toollistenersevents/

View source document


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: