[Gvsig_desarrolladores] Pintarsólo algunos elementos de un shape

Francisco José Peñarrubia fpenarru en gmail.com
Vie Ene 16 12:57:59 CET 2009


Hola María.

El GraphicLayer funciona de manera distinta al resto de capas. Es el 
equivalente a un acetato que pones encima del mapa, y donde puedes 
añadir shapes y etiquetas. Los símbolos funcionan de manera distinta al 
resto de capas.
Si quieres ver ejemplos de uso del GraphicLayer (solo hay uno) puedes 
mirar la extensión extGraph (la de redes). De todas formas, aquí tienes 
un pequeño ejemplo:

            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();


Como puedes ver, solo existe una capa GraphicLayer, y ya está puesta 
encima de todas las demás.

Espero que te sirva.

Saludos.

Fran.

Maria Arias de Reyna escribió:
> El Jueves 15 Enero 2009 18:09, Francisco José Peñarrubia escribió:
>   
>> Hola María (y al resto :-) ).
>>
>> Hay una forma más sencilla de acceder a todo junto. La interfaz
>> IReadableVectorial tiene un método IFeature getFeature(numReg).
>>     
>
> Gracias Fran, la verdad que me ha simplificado mucho el código.
>
> Ahora estoy con la última parte, la de dibujar la geometría que he obtenido, 
> per no consigo que me la muestre. 
>
> Lo que hago es que primero creo una capa y la añado a la lista de capas:
>
> 			GraphicLayer l = new GraphicLayer();
> 			l.setName("Route");
> 			l.setActive(true);
> 			l.setVisible(true);
> 			l.setProjection(CRSFactory.getCRS("EPSG:23030"));
> 			mapControl.getMapContext().getLayers().addLayer(l);
>
> Y después de procesar y elegir las geometrías que quiero dibujar (que mirando 
> en tiempo de ejecución parece que son correctas), las intento añadir a la 
> capa:
>
> 				GraphicLayer gLayer = (GraphicLayer) mapControl.getMapContext()
> 											.getLayers().getLayer("Route");
>
> 				IGeometry geomGvSig = FConverter.jts_to_igeometry(geometria_obtenida);
>
> 				FGraphic fgraph = new FGraphic(geomGvSig,
> 						FConstant.SHAPE_TYPE_POLYLINE);
>
> 				gLayer.addGraphic(fgraph);
> 				// Dibujamos la capa
> 				mapControl().drawGraphics();
>
> Pero no me muestra nada. Otras capas que cargo directamente de ficheros sí que 
> me las muestra. Y salvo que al convertir de IGeometry a JTSGeometry haga una 
> traslación sin que yo se lo pida, tampoco es porque no esté haciendo zoom 
> correctamente.
>
> No me lanza ninguna excepción.
>
> ¿Me estoy saltando algún paso?
>
> En verdad me da igual el tipo de capa a utilizar, escogí GraphicLayer porque 
> me pareció la más simple. 
>
> He probado a poner un layer.setDirty(true) justo antes de llamar a 
> drawGraphics(), pero tampoco funciona.
>
> Un saludo,
> Maria.
>
> _______________________________________________
> 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