[Gvsig_usuarios] Problemas con copiado de geometrias en gvSIG 1.9

Domingo Baeza Domingo.Baeza en blomasa.com
Jue Nov 11 10:33:25 CET 2010


Buenos d铆as a todos.

Tengo un problema con una funcionalidad que necesito que es copiar geometr铆as de una shapefile a otro shapefile. Para este caso uso el siguiente c贸digo.

            View vista = (View) PluginServices.getMDIManager().getActiveWindow();
            ProjectView model = (ProjectView) vista.getModel();
            MapContext mapa = model.getMapContext();
            MapControl mapCtrl = vista.getMapControl();

            //recorrer la capa activa, para generar la geometria uni贸n de las seleccionadas
            FLayer lActive = vista.getModel().getMapContext().getLayers().getActives()[0];
            VectorialAdapter adapter = (VectorialAdapter) ((SingleLayer) lActive).getSource();
            try {
                  dataSource = adapter.getRecordset();
            } catch (ReadDriverException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }

            if (lActive instanceof FLyrVect){
                  BitSet sel = ((FLyrVect)lActive).getSelectionSupport().getSelection();
                  for (int i = sel.nextSetBit(0); i >= 0; i = sel.nextSetBit(i+1)) {
                        try {
                             ig = ((FLyrVect)lActive).getSource().getShape(i);
                             Geometry geometriaJts1 = ig.toJTSGeometry();

                             if (union == null){
                                   gTemp =geometriaJts1;
                             }else{
                                   gTemp = EnhancedPrecisionOp.union(geometriaJts1, union);
                             }
                             union = gTemp;
                        } catch (ExpansionFileReadException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                        } catch (ReadDriverException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                        }
                  }
                  if (union==null){
                        JOptionPane.showMessageDialog(null, "union null");
                  }
                  IGeometry unionGvSig = FConverter.jts_to_igeometry (union);
                  /////
                  FLayer[] selected = mapa.getLayers().getActives();
                  FLayer lyrActive = selected[0];
                  lyrActive.setActive(false);

                  // buscar el indice de la capa
                  for (int i = 0; i < mapa.getLayers().getLayersCount(); i++) {
                        if (mapa.getLayers().getLayer(i).getName().toUpperCase().equals(sCapaDestino)){
                             iIndiceCapa = i;
                        }
                  }
                  //
                  FLayer lyrMont = mapa.getLayers().getLayer(sCapaDestino);
                  try {
                        lyrMont.setActive(true);
                        lyrMont.setEditing(true);
                  } catch (StartEditionLayerException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                  }
                  try {
                        writer =(ShpWriter) LayerFactory.getWM().getWriter("Shape Writer");
                        writer.setFile(new File(fg.obtenerRutaProyecto() +"\\Shapes\\"  + sCapaDestino2));
                        writer.initialize(lyrMont);
                        writer.preProcess();

                        ReadableVectorial rv2=((FLyrVect)lyrMont).getSource();

                        for (int i=0; i < rv2.getShapeCount(); i++)
                        {
                             IFeature feat = rv2.getFeature(i);
                             IRowEdited editFeat = new DefaultRowEdited(feat, IRowEdited.STATUS_MODIFIED, i);
                             writer.process(editFeat);
                        }

                        //Ahora hay que crear la nueva Feature
                        IFeature xx =null;
                        Value[] featureAttr= null;
                        xx = FeatureFactory.createFeature(featureAttr,unionGvSig);
                        DefaultRowEdited edRow;
                        iNumFeat = rv2.getShapeCount();
                        //JOptionPane.showMessageDialog(null, iNumFeat);
                        edRow = new DefaultRowEdited(xx,DefaultRowEdited.STATUS_ADDED, (rv2.getShapeCount()+1));
                        if (edRow == null){
                             JOptionPane.showMessageDialog(null, "edRow null");
                        }

                        writer.process(edRow);
                        writer.postProcess();




Este c贸digo funciona, porque veo en la nueva capa la geometr铆a (que en este caso viene de una uni贸n de dos features de otro shape). Pero cuando con el punto de informaci贸n pido la informaci贸n de esta nueva geometr铆a no la reconoce.
Sin embargo si edito la capa, no hago ning煤n cambio, y salvo la capa de nuevo, entonces es cuando vuelvo a pedir informaci贸n de la nueva feature y ahora si me da la informaci贸n.

Alguien sabe a que se debe, o que me falta en el c贸digo. (Este c贸digo est谩 basado en la versi贸n 1.1.2).

Un saludo

Domingo Baeza

------------ pr髕ima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20101111/44db98f1/attachment.htm 


M醩 informaci髇 sobre la lista de distribuci髇 gvSIG_usuarios