[Gvsig_desarrolladores] juntar 2 polígonos

Gertrude Pieper gertrude.pieper en hotmail.com
Mar Ene 22 08:33:11 CET 2008


Buenos días a todos, soy nueva en el desarrollo de gvSIG pero con ganas de aprender.
He usado gvSIG por algún tiempo y me gusta mucho el programa, pero necesitaría funciones para juntar (merge) polígonos. He visto que eso ya esta hecho en OpenJUMP. Hay alguien aquí con experiencia de usar código de otros proyectos en Java y hacerlo funcionar en gvSIG? Agradezco cualquier sugestión de por donde puedo empezar.
Gertrude Pieper
 
Este es el código que se usa en JUMP para hacer el merge:
 /*****************************************************
 * created:                    07.12.2004
 * last modified:            
 * 
 * description: 
 *  Merges two selected polygons if they intersect each other in more than one point.
 *  The first feature in the selection gets the new geometry while the second feature is deleted.
 *****************************************************/
 
package org.openjump.core.ui.plugin.tools;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
 
import org.openjump.core.geomutils.algorithm.PolygonMerge;
 
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jump.I18N;
import com.vividsolutions.jump.feature.Feature;
import com.vividsolutions.jump.workbench.WorkbenchContext;
import com.vividsolutions.jump.workbench.model.Layer;
import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
import com.vividsolutions.jump.workbench.plugin.PlugInContext;
import com.vividsolutions.jump.workbench.ui.EditTransaction;
import com.vividsolutions.jump.workbench.ui.MenuNames;
import com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller;
 
import de.fho.jump.pirol.utilities.apiTools.FeatureCollectionTools;
import de.fho.jump.pirol.utilities.apiTools.LayerTools;
 
/**
 * @author sstein
 * 
 **/
public class MergeTwoSelectedPolygonsPlugIn extends AbstractPlugIn{
 
 
            private String sMergeTwoPolys = I18N.get("org.openjump.core.ui.plugin.tools.MergeTwoSelectedPolygonsPlugIn.Merge-Two-Polygons");
            //private String sMergeTwoPolys = "MergeTwoPolygons";
            
    public void initialize(PlugInContext context) throws Exception {
        FeatureInstaller featureInstaller = new FeatureInstaller(context.getWorkbenchContext());
            featureInstaller.addMainMenuItem(
                    this,                                                                                              //exe
                new String[] {MenuNames.TOOLS, MenuNames.TOOLS_EDIT_GEOMETRY}, //menu path
                this.getName(), //name methode .getName recieved by AbstractPlugIn 
                false,                                    //checkbox
                null,                          //icon
                createEnableCheck(context.getWorkbenchContext())); //enable check        
    }
    
    public String getName() {
        return sMergeTwoPolys;
    }
    
    public static MultiEnableCheck createEnableCheck(WorkbenchContext workbenchContext) {
        EnableCheckFactory checkFactory = new EnableCheckFactory(workbenchContext);
 
        return new MultiEnableCheck()
                        .add(checkFactory.createWindowWithLayerNamePanelMustBeActiveCheck())
                        .add(checkFactory.createSelectedLayersMustBeEditableCheck())
                        .add(checkFactory.createAtLeastNItemsMustBeSelectedCheck(2));
    }
    
            public boolean execute(PlugInContext context) throws Exception{       
                                    
                Collection features = context.getWorkbenchContext().getLayerViewPanel().getSelectionManager().getFeaturesWithSelectedItems();
                if (features.size() == 2){
                        Iterator iter = features.iterator();
                        Feature f1 = (Feature)iter.next();
                        Feature f2 = (Feature)iter.next();
                        PolygonMerge merge = new PolygonMerge(f1.getGeometry(), f2.getGeometry()); 
                        if(merge.isMergeSuccesfull()==1){
                                    //-- merge using an edit transaction to enable undo
                                    ArrayList fToEdit = new ArrayList();
                                    fToEdit.add(f1);
                                    Map layer2FeatList = LayerTools.getLayer2FeatureMap(fToEdit, context);                          
                            Layer[] layersWithFeatures = (Layer[])layer2FeatList.keySet().toArray(new Layer[0]);                      
                                    EditTransaction edtr = new EditTransaction(fToEdit,"setgeom",layersWithFeatures[0],true,false,context.getLayerViewPanel());
                                    Geometry g = merge.getOutPolygon();
                                    //f1.setGeometry(g);
                                    edtr.setGeometry(f1,g);
                        edtr.commit();
                        edtr.clearEnvelopeCaches();
                        //-- delete other feature
                                    ArrayList fToDelete = new ArrayList();
                                    fToDelete.add(f2);
                                    FeatureCollectionTools.deleteFeatures(fToDelete,context);
                        }
                }
                        else{
                                    context.getWorkbenchFrame().warnUser("more than 2 objects selected");
                        }
            //context.getWorkbenchContext().getLayerViewPanel().getSelectionManager().clear();
                return true;
    }      
            
                
  
}
 
_________________________________________________________________
Shed those extra pounds with MSN and The Biggest Loser!
http://biggestloser.msn.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20080122/1f92d0ed/attachment-0001.htm


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