[Gvsig_desarrolladores] Actualizar un solo layer sin redibujar el resto

Francisco José Peñarrubia fpenarru en gmail.com
Jue Dic 27 13:51:52 CET 2007


Hola Panchazo (lo siento, no he podido evitarlo, no te molestes ;-).

Mejor intenta utilizar la clase GraphicLayer.java para ese tipo de 
cosas. Y usa el método drawGraphics() del mapControl para evitar el 
refresco indeseado.
Un pequeño ejemplo:


            // Prueba de graficos
            theImgObserver = new MyImageObserver(m_MapControl);

            GraphicLayer lyr = 
m_MapControl.getMapContext().getGraphicsLayer();
            lyr.clearAllGraphics();
            lyr.clearSymbolsGraphics();

            FSymbol theSymbol = new FSymbol(FConstant.SYMBOL_TYPE_POINT);
            File fIcon = new File("d:/sonic.gif");
            theSymbol.setSizeInPixels(true);

            theSymbol.setIconURI(fIcon.toURI());
            theSymbol.setSize(theSymbol.getIcon().getHeight(null));

            theSymbol.setStyle(FConstant.SYMBOL_STYLE_MARKER_IMAGEN);
            theSymbol.setImgObserver(theImgObserver);

            int idSymbol = lyr.addSymbol(theSymbol);
            IGeometry geom = ShapeFactory.createPoint2D(500000, 4499980);
            FGraphic theGraphic = new FGraphic(geom, idSymbol);
            lyr.addGraphic(theGraphic);
            FGraphicLabel theLabel = new FGraphicLabel(geom, idSymbol,
                    "Hola colega");
            // lyr.addGraphic(theLabel);
            m_MapControl.drawGraphics();

Otra posible solución sería marcar la capa para que cachee la imagen 
anterior a su dibujado, pero no estoy seguro de que eso te funcione 
bien. De todas formas, miralo por si acaso:

FLayer.setCachingDrawnLayers(boolean bCacheDrawnLayers); (El método 
viene documentado en las fuentes).

Saludos, y suerte.

Fran.
gvSIG team.


Francisco SC escribió:
> Que tal, antes que nada saludos a todos ya que soy nuevo en el 
> desarrollo de gvSig.
>
> Llendo al punto, estoy desarrollando un plugin para hacer rastreo de 
> flotas que lee feeds geoRSS a partir del plugin de 
> http://geomaticblog.net/gb2/es/2007-08-15-georss_gvsig_%282a_parte%29 .
>
> El punto es que cada X tiempo necesito tomar el layer donde estan los 
> íconos que representan los vehìculos y actualizarlo con las nuevas 
> ubicaciones. Pero sucede que cuando tomo el layer, lo borro y vuelvo a 
> agregar el actualizado TODOS los layers desaparecen una fraccion de 
> segundo y se redibujan generando un parpadeo del mapa que resulta ser 
> muy molesto. De más está señalar que todo esto corre en un thread 
> independiente.
>
> El còdigo que uso actualmente para eliminar el layer "viejo" y agregar 
> el actualizado es:
>
>         MapContext mapcontext = ((View) 
> iwin).getMapControl().getMapContext();
>
>         FLayer lyrTemp = mapcontext.getLayers().getLayer(layer.getName());
>
>         if (lyrTemp != null)
>             mapcontext.getLayers().removeLayer(lyrTemp);
>
>         if (!layer.isVisible())
>             layer.setVisible(true);
>
>         mapcontext.getLayers().addLayer(layer);
>
> Desde ya muchas gracias y feliz año nuevo para todos.
>
> Francisco Sanchez Clariá
> Córdoba, Argentina.
> ------------------------------------------------------------------------
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>   



Más información sobre la lista de distribución gvSIG_desarrolladores