[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