[Gvsig_usuarios] Problemas con copiado de geometrias en gvSIG 1.9

Vicente Caballero Navarro vicente.caballero en iver.es
Jue Nov 11 13:04:16 CET 2010


Hola Domingo.

Creo que tu consulta es más apropiada hacerla en la lista de desarrollo, 
pero de todas formas puedes ver este proyecto que funciona sobre la 
versión de gvSIG 1.10 que no varía demasiado respecto de la 1.1.2 y 
trata de copiar geometrías de una capa y pegarlas en otra diferente a 
través del portapapeles.

Un saludo.

-- 
Vicente Caballero Navarro
Analista/Programador.
IVER Tecnología de la Información S.A.
C/ Lérida, 20
46005-Valencia
Tlf.+34963354983
www.iver.es
www.gvsig.com




El 11/11/2010 10:33, Domingo Baeza escribió:
>
> 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_ _geometri_a 
> _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*
>
>
> _______________________________________________
> gvSIG_usuarios mailing list
> gvSIG_usuarios en listserv.gva.es
>
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:
>
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios

-- 
Vicente Caballero Navarro
Analista/Programador.
IVER Tecnología de la Información S.A.
C/ Lérida, 20
46005-Valencia
Tlf.+34963354983
www.iver.es
www.gvsig.com



Este mensaje y sus archivos son confidenciales. No está permitida su reproducción o distribución sin la autorización expresa de "IVER Tecnologías de la Información". Si usted no es el destinatario previsto, queda desautorizado cualquier uso, acceso o copia de este mensaje. Si ha recibido este mensaje por error, por favor bórrelo e infórmenos por esta misma vía.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20101111/8b88f5ee/attachment.htm 


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