[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