[Gvsig_desarrolladores] Editar tabla de un shape

Eduardo Cristóbal Enríquez edu_ce_1988 en hotmail.com
Mie Mayo 26 16:05:18 CEST 2010


Hola Virginia, creo que estás programando en la versión 1.9, que es en la 
que yo programo...aunque lamentablemente yo tampoco se modificar los 
registros de un shape... si alguien lo sabe que conteste por favor.
Lo de crear la capa y lo de acceder a ella creo que lo has sacado de este 
manual:
ftp://downloads.gvsig.org/gva/descargas/manuales/Crear_extensiones_en_gvSIG.pdf
al menos los métodos creo que hacen eso.

Yo de momento lo que hago es acceder a las tablas de un shape, en vez de con 
un listener y  queryByPoint hago la query sobre la capa que seleccione el 
usuario:
FBitSet selection = 
capaSeleccionada.queryByRect(capaSeleccionada.getFullExtent());   pero 
únicamente accedo a los datos
A ver si alguien contesta y nos aclara la duda.

Un saludo.

Edu.


From: Virginia Portillo Ramos
Sent: Wednesday, May 26, 2010 10:32 AM
To: gvsig_desarrolladores en listserv.gva.es
Subject: Re: [Gvsig_desarrolladores] Editar tabla de un shape


Hola,

Te pongo el codigo que utilizo para crear el shape y el que he probado para 
cambiar el registro de la tabla pero que no me funciona, creo que es por el 
tipo de driver que no es de escritura pero no se como cambiar esto.

Creo capa :

                ArrayList XY = new ArrayList();

                XY.add("0"); 'ID
                XY.add("200"); 'X
                XY.add("200"); 'Y
                XY.add("Valencia"); 'CIUDAD

                XY.add("1");
                XY.add("300");
                XY.add("300");
                XY.add("Madrid");

                XY.add("2");
                XY.add("400");
                XY.add("400");
                XY.add("Leon");

                XY.add("3");
                XY.add("500");
                XY.add("500");
                XY.add("Murcia");


               // DRIVER DEFINITION (SHAPE TYPE AND FIELDS)
                ConcreteMemoryDriver driver = new ConcreteMemoryDriver();
                driver.setShapeType(FShape.POINT);

                ArrayList arrayFields = new ArrayList();

                arrayFields.add("ID");
                arrayFields.add("CIUDAD");

                Value[] auxRow = new Value[2];

                driver.getTableModel().setColumnIdentifiers(arrayFields.toArray());

                View v = (View) 
PluginServices.getMDIManager().getActiveWindow();
                MapControl mapCtrl = v.getMapControl();

                Double x;
                Double y;

                FShape shp1 = null;
                FShape shpT = null;


                for (int j = 0;j<XY.size(); j+=4){

                    // ATRIBUTES
                    auxRow[0] = 
ValueFactory.createValue(XY.get(j).toString());
                    auxRow[1] = 
ValueFactory.createValue(XY.get(j+3).toString());

                    // GEOMETRY DEFINITION

                    x = Double.parseDouble(XY.get(j+1).toString());
                    y = Double.parseDouble(XY.get(j+2).toString());

                    shp1 = new FPoint2D(x,y);

                    driver.addShape(shp1, auxRow);

                }

                // CREATE AND ADD LAYER
                FLayer lyr;
                String layerName = "Ciudades";

                lyr = LayerFactory.createLayer(layerName,driver, 
mapCtrl.getProjection());

Modificar registro :

                            MapControl mapControl = null;

                            IWindow view = 
PluginServices.getMDIManager().getActiveWindow();
                            if (!(view instanceof View))
                                return;

                            View vista=(View)view;

                            IProjectView model = vista.getModel();
                            MapContext mapa = model.getMapContext();
                            mapControl = vista.getMapControl();

                            double tol = 
mapControl.getViewPort().toMapDistance(10);

                            FLayers lyrs = 
mapControl.getMapContext().getLayers();
                            FLyrVect lyrCiudades = 
(FLyrVect)lyrs.getLayer("Ciudades");

                            Double x;
                            Double y;

                            x = Double.parseDouble("200");
                            y = Double.parseDouble("200");

                            Point2D mapPoint = 
mapControl.getViewPort().toMapPoint(0,0);

                            mapPoint.setLocation(x, y);

                            FBitSet fb = lyrCiudades.queryByPoint(mapPoint, 
tol);

                            if (!fb.isEmpty()){

                                EditableAdapter vea = new EditableAdapter();
                                vea.setOriginalDataSource(lyrCiudades.getRecordset());
                                vea.setSelection(fb);

                                FBitSet fbs = vea.getSelection();

                                int ix = fbs.nextSetBit(0);
                                IRowEdited row = vea.getRow(ix);
                                Value[] values = row.getAttributes();

                                values[0] = ValueFactory.createValue("0");
                                values[1] = 
ValueFactory.createValue("Bilbao");


                                IRow newRow = null;
                                if (row.getLinkedRow() instanceof IFeature) 
{
                                     IGeometry geometry = 
((DefaultFeature)row.getLinkedRow()).getGeometry();
                                     newRow = new DefaultFeature(geometry, 
values,row.getID());
                                } else {
                                     newRow = new DefaultRow(values, 
row.getID());
                                }

                                if (vea instanceof IWriteable){

                                    IWriteable w = (IWriteable) vea;
                                    IWriter writer = w.getWriter();

                                    if (writer == null){
                                    }else{
                                        vea.startEdition(EditionEvent.ALPHANUMERIC);
                                        vea.modifyRow(ix, newRow, "Editar 
valor", EditionEvent.ALPHANUMERIC);
                                        vea.stopEdition(writer,EditionEvent.ALPHANUMERIC);
                                    }
                                }
                            }

                            vista.repaintMap();

No se si lo estoy haciendo bien, no se si hay otra manera de crear la capa 
para poder modificar los registros.

Muchas gracias de antemano.

Un saludo.

Virginia





> Date: Tue, 25 May 2010 14:35:51 -0700
> From: agirrearri en hotmail.com
> To: gvsig_desarrolladores en listserv.gva.es
> Subject: Re: [Gvsig_desarrolladores] Editar tabla de un shape
>
>
> Hola, como es el codigo? Porque yo hace poco he creado un shape desde 
> código
> y si creas el featureStore ya lo tienes, tienes que crear un nuevo 
> feature.
> Para meter un nuevo registro.
> Si puedes poner el codigo te puedo orientar donde editar la tabla.
>
> Atentamente, Eñaut
> -- 
> View this message in context: 
> http://osgeo-org.1803224.n2.nabble.com/Editar-tabla-de-un-shape-tp5097908p5100585.html
> Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores



¿Sabes que La Gente de Hoy tiene GUARDAESPALDAS contra el Spam?



_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores en listserv.gva.es
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores 



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