Ferramentas Pessoais
Você está aqui: Entrada Desarrollo Manual para desarrolladores gvSIG v1.1 GVSIG Vistas View MapOverview
Acções do Documento

MapOverview

por Grupo gvSIGúltima modificação 2010-06-01 22:52

Un MapOverview es una subclase de un MapControl, con la particularidad de que está enlazado con un MapControl denro del documento View. Por defecto está abajo a la izquierda y en él se puede cargar cualquier tipo de capas y gestionar su leyenda. Se emplea normalmente como localizador, mostrando unas capas de situación y un rectángulo que indica el rectángulo visible del MapControl asociado.

El MapOverview es un escucha (listener) del MapControl, de forma que cualquer cambio en la visualización de una zona hace que el MapOverview se actualice y refleje la correspondiente zona que muestra el MapControl.

El código responsable de este comportamiento:

public void setModel(MapContext model) {
    this.setMapContext(model);
    model.setProjection(m_MapAssoc.getMapContext().getProjection());
    m_MapAssoc.getMapContext().getViewPort().addViewPortListener(this);
    getMapContext().getViewPort().addViewPortListener(this);
}

Al asociar el modelo del MapOverview, éste se añade como listener al viewPort del MapControl principal.

public void extentChanged(ExtentEvent evExtent) {
    // Nos llega el nuevo extent del FMap asociado, así que dibujamos nuestro
    // rectángulo para mostrar la zona de dibujo del otro mapa.
    repaint();
}

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
        if ((m_MapAssoc.getMapContext().getViewPort().getExtent() != null) &&
                (getMapContext().getViewPort().getExtent() != null)) {
            if (first) {
                first = false;
                repaint();
                return;
            }
            image = new BufferedImage(this.getWidth(), this.getHeight(),
                        BufferedImage.TYPE_INT_ARGB);
            ViewPort vp = getMapContext().getViewPort();
            Rectangle2D extentView=vp.getAdjustedExtent();
            ViewPort vpOrig = m_MapAssoc.getMapContext().getViewPort();
            if (extent==null)
                extent=vpOrig.getAdjustedExtent();
            // Dibujamos el extent del mapa asociado.
            Graphics2D g2 = (Graphics2D) image.getGraphics();
            g2.setTransform(vp.getAffineTransform());

            g2.setStroke(new BasicStroke((float) vp.getDist1pixel()));

            g2.setColor(Color.red);
            g2.draw(extent);
            g2.setColor(new Color(100,100,100,100));
            g2.fill(extent);
            // dibujamos las líneas vertical y horizontal
            Point2D pRightUp = vp.toMapPoint(getWidth(), 0);

            Line2D.Double linVert = new Line2D.Double(extent.getCenterX(),
                    extentView.getMinY(), extent.getCenterX(),
                    pRightUp.getY());
            Line2D.Double linHoriz = new Line2D.Double(extentView.getMinX(),
                    extent.getCenterY(), pRightUp.getX(),
                    extent.getCenterY());

            g2.setColor(Color.darkGray);
            g2.draw(linVert);
            g2.draw(linHoriz);
            g.drawImage(image,0,0,this);
            g2.setTransform(new AffineTransform());
            extent=null;
        }

}

MapOverview implementa el interfaz ViewPortListener:

/**
 * <p>Defines the interface for an object that listens to changes in a view port.</p>
*/
public interface ViewPortListener {
    /**
     * <p>Called when the <i>extent</i> of the view port has changed.</p>
     *
     * @param e an extend event object
     */
    void extentChanged(ExtentEvent e);

    /**
     * <p>Called when the background color of the view port has changed.</p>
     * 
     * @param e a color event object
     */
    void backColorChanged(ColorEvent e);

    /**
     * <p>Called when the projection of the view port has changed.</p>
     *
     * @param e a projection event object
     */
    void projectionChanged(ProjectionEvent e);
}

de forma que puede responder a los eventos de cambio de extent del MapControl principal.


Feito com Plone CMS, o Software Livre para Gestão de Conteúdos

Este sítio está em conformidade com as seguintes normas: