Personal tools
gvSIG Desktop
gvSIG Desktop

Cached time 11/22/13 07:47:19 Clear cache and reload

 
Document Actions

Una aplicación de pruebas

by Joaquin Jose del Cerro Murciano last modified 2012-03-12 15:22
Hasta ahora hemos ido viendo piezas sueltas que configuraban los distintos
componentes que íbamos a necesitar para realizar nuestro pequeño visor. Vamos a ver
ahora cómo podemos juntar todas esas piezas y alguna más para crear un sencillo visor
que nos permita probarlo todo sin necesidad de arrancar todo gvSIG.

Para ello, nos centraremos en el proyecto **org.gvsig.visor.main**. En él podemos
encontrar una clase *main* con todo lo que necesitamos para presentar nuestro
mapa y probar nuestros componentes.

Nuestro programa presentará una ventana con un mapa y unos cuantos botones para
hacer zoom, o activar las herramientas de pan o nuestra herramienta de información
sobre las parcelas de una manzana.

..  Tip::
    Puede ser de utilidad consultar la documentación existente 
    sobre el componente MapControl_ Esta documentación no
    ha sido actualizada con los cambios que se han
    realizado en dicho componente en la versión 2 de gvSIG,
    pero a grandes lineas sigue aportando la misma funcionalidad
    y ayudara a entender mejor la herramienta.

.. _MapControl : https://gvsig.org/web/reference_catalog/lookupObject?uuid=416853bc5bfba13f4c14bd1c71049170

Para ello tendremos que:

- Crear nuestro componente swing para presentar un mapa::

    mapControlManager = MapControlLocator.getMapControlManager();

    mapControl = mapControlManager.createJMapControlPanel();
    
- Le añadiremos las herramientas estándar de zoom y pan y fijaremos
  la herramienta de pan como la herramienta activa:
  
  .. code-block:: java

    mapControl.addBehavior(
      "zoom", 
      new Behavior[] {	
        new RectangleBehavior(new ZoomInListenerImpl(mapControl)),
        new PointBehavior(new ZoomOutRightButtonListener(mapControl))
      }
    );
    mapControl.addBehavior(
      "pan", 
      new MoveBehavior(
        new PanListenerImpl(mapControl)
      )
    );
    mapControl.setTool("pan");

- Añadiremos los botones y los enlazaremos a las herramientas que acabamos de
  registrar en nuestro mapa:

  .. code-block:: java

    toolBar.add(
      new JButton(
        new AbstractAction("Zoom") {
          public void actionPerformed(ActionEvent e) {
            mapControl.setTool("zoom");
          }
        }
      )
    );

- Crearemos nuestra capa de manzanas y la añadiremos al mapa:

  .. code-block:: java

    FLyrVect layer = (FLyrVect) MapContextLocator.getMapContextManager().createLayer(
      "Blocks", 
      manager.getBlocks()
    );
    mapControl.getMapContext().getLayers().addLayer(layer);

- Y por último crearemos nuestra propia herramienta de información y la registraremos
  en el mapa:
  
  .. code-block:: java

    PropertiesOfBlockListener listener = new PropertiesOfBlockListener();
    mapControl.addBehavior(SHOWINFO_TOOL_NAME, new PointBehavior(listener));

  Para ello registraremos un comportamiento de tipo punto, al que asociaremos un *listener*
  particular para que realice las acciones que no interesen. El código del *listener*
  sería:

  .. code-block:: java
  
    public class PropertiesOfBlockListener extends AbstractPointListener {

      public void point(PointEvent event) throws BehaviorException {
        VisorSwingManager swingManager = VisorSwingLocator.getSwingManager();

        VisorBlock block;
        try {
          block = swingManager.getManager().getBlock(event.getMapPoint());
          if( block == null ) {
            return;
          }
          JPanel panel = swingManager.createJVisorBlockPanel(block);
          ToolsLocator.getWindowManager().showWindow(panel, "Block information", WindowManager.MODE.TOOL);
        } catch (VisorException e) {
          // FIXME: Process exception
          throw new RuntimeException("Can't show properties of selected block.",e);
        }
      }

    }

  Básicamente derivaremos de *AbstractPointListener* sobre-escribiendo el método *point* que
  es llamado para realizar la acción asociada a esta herramienta. Este método se limitará a llamar
  a nuestro método *getBlocks* a partir de la posición del mapa sobre la que se hizo clic, y si
  se obtiene alguna manzana en ese punto se creará nuestro panel para presentar esa información 
  en una ventana.
  
  Lo mas destacable tal vez sería que cuando consultemos en el parámetro *event* por las 
  coordenadas del punto sobre el que se ha hecho clic se haga a través del método *getMapPoint*
  para asegurarnos que nos lo devuelve en coordenadas del mapa y no de pantalla.

View source document

View source document Get permanent link


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: