[Gvsig_desarrolladores] Editar tabla de un shape

Virginia Portillo Ramos vir_portillo en hotmail.com
Mie Mayo 26 10:32:27 CEST 2010


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
 		 	   		  
_________________________________________________________________
¿Quieres conocer trucos de Windows 7? ¡Los que ya lo usan te los cuentan!
http://www.sietesunpueblodeexpertos.com/index_windows7.html
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20100526/253d7642/attachment.htm 


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