Personal tools
gvSIG Desktop
gvSIG Desktop

Cached time 11/21/13 17:45:09 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.

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:

    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:

    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:

    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:

    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:

    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 Get permanent link


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: