Revision 1184

View differences:

org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.intersection/src/main/java/org/gvsig/geoprocess/algorithm/intersection/IntersectionOperation.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.geoprocess.algorithm.intersection;
25

  
26
import java.util.Iterator;
27
import java.util.List;
28

  
29
import org.gvsig.fmap.dal.exception.DataException;
30
import org.gvsig.fmap.dal.feature.EditableFeature;
31
import org.gvsig.fmap.dal.feature.Feature;
32
import org.gvsig.fmap.dal.feature.FeatureSet;
33
import org.gvsig.fmap.dal.feature.FeatureStore;
34
import org.gvsig.fmap.geom.GeometryLocator;
35
import org.gvsig.fmap.geom.GeometryManager;
36
import org.gvsig.fmap.geom.Geometry.TYPES;
37
import org.gvsig.fmap.geom.exception.CreateGeometryException;
38
import org.gvsig.fmap.geom.operation.GeometryOperationContext;
39
import org.gvsig.fmap.geom.operation.GeometryOperationException;
40
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
41
import org.gvsig.fmap.geom.operation.fromjts.FromJTS;
42
import org.gvsig.fmap.geom.primitive.Curve;
43
import org.gvsig.fmap.geom.primitive.Surface;
44
import org.gvsig.geoprocess.algorithm.base.core.GeometryOperation;
45
import org.gvsig.geoprocess.algorithm.base.util.GeometryUtil;
46
import org.gvsig.geoprocess.lib.sextante.AbstractSextanteGeoProcess;
47
import org.slf4j.Logger;
48
import org.slf4j.LoggerFactory;
49

  
50
import com.vividsolutions.jts.geom.Geometry;
51
import com.vividsolutions.jts.geom.GeometryCollection;
52
import com.vividsolutions.jts.geom.LineString;
53
import com.vividsolutions.jts.geom.MultiLineString;
54
import com.vividsolutions.jts.geom.MultiPoint;
55
import com.vividsolutions.jts.geom.MultiPolygon;
56
import com.vividsolutions.jts.geom.Point;
57
import com.vividsolutions.jts.geom.Polygon;
58
import com.vividsolutions.jts.precision.EnhancedPrecisionOp;
59

  
60
import es.unex.sextante.core.Sextante;
61

  
62
/**
63
 * Builds a geometry with the intersection between two layers
64
 *
65
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
66
 */
67
public class IntersectionOperation extends GeometryOperation {
68
	private FeatureStore                     storeOverlay     = null;
69
	protected GeometryManager                geomManager      = GeometryLocator.getGeometryManager();
70
	private Logger                           log              = LoggerFactory.getLogger(IntersectionOperation.class);
71
	private boolean                          errorInfo        = false;
72

  
73
	public IntersectionOperation(FeatureStore overlayLayer, AbstractSextanteGeoProcess p) {
74
		super(p);
75
		this.storeOverlay = overlayLayer;
76
	}
77

  
78
	public boolean getErrorInfo() {
79
		return errorInfo;
80
	}
81

  
82
	/**
83
	 * Computes intersection between the geometry and the overlay layer. The fields of the
84
	 * intersected features will be added.
85
	 * @param g
86
	 * @param featureInput
87
	 * @return
88
	 */
89
	@SuppressWarnings({ "unchecked", "deprecation" })
90
	public EditableFeature invoke(org.gvsig.fmap.geom.Geometry g, Feature featureInput) {
91
		if(g == null)
92
			return lastEditFeature;
93

  
94
		FeatureSet features = null;
95
		Iterator it = null;
96
		try {
97
			if(selectedGeomOverlay) {
98
				features = (FeatureSet)storeOverlay.getSelection();
99
			} else {
100
				features = storeOverlay.getFeatureSet();
101
			}
102
			it = features.iterator();
103
		} catch (DataException e) {
104
			Sextante.addErrorToLog(e);
105
			return lastEditFeature;
106
		}
107

  
108
		while( it.hasNext() ) {
109
			Feature featureOverlay = (Feature)it.next();
110
			List<org.gvsig.fmap.geom.Geometry> geomList = featureOverlay.getGeometries();
111
			if(geomList == null) {
112
				org.gvsig.fmap.geom.Geometry geom = featureOverlay.getDefaultGeometry();
113
				lastEditFeature = intersection(g, geom, featureInput, featureOverlay);
114
				continue;
115
			}
116

  
117
			Iterator<org.gvsig.fmap.geom.Geometry> itGeom = geomList.iterator();
118
			while(itGeom.hasNext()) {
119
				org.gvsig.fmap.geom.Geometry geom = itGeom.next();
120
				lastEditFeature = intersection(g, geom, featureInput, featureOverlay);
121
			}
122
		}
123
//		it.dispose();
124
		return lastEditFeature;
125
	}
126

  
127
	private EditableFeature intersection(	org.gvsig.fmap.geom.Geometry g1,
128
											org.gvsig.fmap.geom.Geometry g2,
129
											Feature featureInput,
130
											Feature featureOverlay) {
131
	    if(g1 == null || g2 == null){
132
	        return null;
133
	    }
134
		Geometry overlaysGeom = null;
135
		Geometry jtsGeom = null;
136
		int outPutType = TYPES.SURFACE;
137

  
138
		try {
139
			outPutType = persister.getOutputFeatureStore().getDefaultFeatureType()
140
							.getDefaultGeometryAttribute().getGeomType().getType();
141
		} catch (DataException e2) {
142
			Sextante.addErrorToLog(e2);
143
		}
144

  
145
		try {
146
			if( ((g1 instanceof Surface && g2 instanceof Curve) ||
147
				 (g2 instanceof Surface && g1 instanceof Curve)) &&
148
				 outPutType == TYPES.MULTIPOINT) {
149
				org.gvsig.fmap.geom.Geometry overGeom = (g1 instanceof Surface) ? g1 : g2;
150
				jtsGeom = (g1 instanceof Surface) ? GeometryUtil.geomToJTS(g2) : GeometryUtil.geomToJTS(g1);
151
				overlaysGeom =  (Geometry)overGeom.invokeOperation("toJTSLineString", null);
152
			} else {
153
				if( g1 instanceof Surface &&
154
					g2 instanceof Surface &&
155
					(outPutType == TYPES.MULTIPOINT)) {
156
					jtsGeom =  (Geometry)g1.invokeOperation("toJTSLineString", null);
157
					overlaysGeom =  (Geometry)g2.invokeOperation("toJTSLineString", null);
158
				} else {
159
					jtsGeom = GeometryUtil.geomToJTS(g1);
160
					overlaysGeom = GeometryUtil.geomToJTS(g2);
161
				}
162
			}
163

  
164
			if(!jtsGeom.getEnvelope().intersects(overlaysGeom.getEnvelope()))
165
				return lastEditFeature;
166

  
167
			if(jtsGeom.intersects(overlaysGeom)) {
168
				Geometry newGeom = EnhancedPrecisionOp.intersection(jtsGeom, overlaysGeom);
169
				if(!newGeom.isEmpty()) {
170
					if(typesMatch(outPutType, newGeom) || newGeom instanceof GeometryCollection) {
171
						lastEditFeature = persister.addFeature(featureInput, featureOverlay, newGeom);
172
					} else {
173
						//Para intersecciones entre pol?gonos cuando la salida es de tipo l?nea
174
						//la generamos a partir del pol?gono resultante de la intersecci?n
175
						if( g1 instanceof Surface &&
176
								g2 instanceof Surface &&
177
								outPutType == TYPES.MULTICURVE &&
178
								(newGeom instanceof Polygon || newGeom instanceof MultiPolygon)) {
179
							GeometryOperationContext ctx = new GeometryOperationContext();
180
							ctx.setAttribute(FromJTS.PARAM, newGeom);
181
							org.gvsig.fmap.geom.Geometry newDalGeom = (org.gvsig.fmap.geom.Geometry)geomManager.invokeOperation(FromJTS.NAME, ctx);
182
							newGeom = (Geometry)newDalGeom.invokeOperation("toJTSLineString", null);
183
						}
184

  
185
						lastEditFeature = persister.addFeature(featureInput, featureOverlay, newGeom);
186
					}
187
				}
188
			}
189
		} catch (CreateGeometryException e) {
190
			Sextante.addErrorToLog(e);
191
		} catch (DataException e) {
192
			Sextante.addErrorToLog(e);
193
		} catch (GeometryOperationNotSupportedException e1) {
194
			Sextante.addErrorToLog(e1);
195
		} catch (GeometryOperationException e1) {
196
			Sextante.addErrorToLog(e1);
197
		} catch (com.vividsolutions.jts.geom.TopologyException e) {
198
			errorInfo = true;
199
			log.info("Problems operating intersection: ", e);
200
		}
201
		return lastEditFeature;
202
	}
203

  
204
	private boolean typesMatch(int dalType, Geometry newGeom) {
205

  
206
		return
207
		   ((geomManager.isSubtype(TYPES.MULTICURVE, dalType) &&
208
		   (newGeom instanceof MultiLineString || newGeom instanceof LineString)) ||
209
		   (geomManager.isSubtype(TYPES.MULTIPOINT, dalType) &&
210
		   (newGeom instanceof MultiPoint || newGeom instanceof Point)) ||
211
		   (geomManager.isSubtype(TYPES.MULTISURFACE, dalType) &&
212
	       (newGeom instanceof Polygon || newGeom instanceof MultiPolygon)) ||
213
	       (geomManager.isSubtype(TYPES.CURVE, dalType) && newGeom instanceof LineString) ||
214
	       (geomManager.isSubtype(TYPES.SURFACE, dalType) && newGeom instanceof Polygon) ||
215
	       (geomManager.isSubtype(TYPES.POINT, dalType) && newGeom instanceof Point));
216

  
217
	}
218

  
219
	/**
220
	 * clips feature's geometry with the clipping geometry, preserving
221
	 * feature's original attributes.
222
	 * If feature's geometry doesn't touch clipping geometry, it will be
223
	 * ignored.
224
	 */
225
	public void invoke(org.gvsig.fmap.geom.Geometry g, EditableFeature featureInput) {
226
	}
227

  
228
}
229

  
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.intersection/src/main/java/org/gvsig/geoprocess/algorithm/intersection/IntersectionLibrary.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.geoprocess.algorithm.intersection;
25

  
26
import org.gvsig.geoprocess.algorithm.base.core.AlgorithmAbstractLibrary;
27
import org.gvsig.i18n.Messages;
28
import org.gvsig.tools.library.LibraryException;
29

  
30
/**
31
 * Initialization of IntersectionLibrary library.
32
 * 
33
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
34
 */
35
public class IntersectionLibrary extends AlgorithmAbstractLibrary {
36

  
37
    @Override
38
    protected void doInitialize() throws LibraryException {
39

  
40
    }
41

  
42
    @Override
43
    protected void doPostInitialize() throws LibraryException {
44
        Messages.addResourceFamily(
45
            "org.gvsig.geoprocess.algorithm.intersection.intersection",
46
            IntersectionLibrary.class.getClassLoader(),
47
            IntersectionLibrary.class.getClass().getName());
48
        registerGeoProcess(new IntersectionAlgorithm());
49
    }
50

  
51
}
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.intersection/src/main/java/org/gvsig/geoprocess/algorithm/intersection/IntersectionAlgorithm.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.geoprocess.algorithm.intersection;
25

  
26
import javax.swing.JOptionPane;
27

  
28
import org.gvsig.fmap.dal.exception.DataException;
29
import org.gvsig.fmap.dal.feature.FeatureStore;
30
import org.gvsig.fmap.dal.feature.FeatureType;
31
import org.gvsig.geoprocess.lib.sextante.AbstractSextanteGeoProcess;
32
import org.gvsig.geoprocess.lib.sextante.dataObjects.FlyrVectIVectorLayer;
33

  
34
import es.unex.sextante.core.Sextante;
35
import es.unex.sextante.dataObjects.IVectorLayer;
36
import es.unex.sextante.exceptions.GeoAlgorithmExecutionException;
37
import es.unex.sextante.exceptions.RepeatedParameterNameException;
38
import es.unex.sextante.outputs.OutputVectorLayer;
39

  
40
/**
41
 * Intersection algorithm
42
 * <UL>
43
 * <LI>Pol-Pol: 3 layers (polygon, point, line)</LI>
44
 * <LI>Pol-Line: 2 layers (point, line)</LI>
45
 * <LI>Pol-Point: 1 layer (point)</LI>
46
 * <LI>Line-Point: 1 layer (point)</LI>
47
 * <LI>Line-Line: 2 layers (point, line)</LI>
48
 * <LI>Point-Point: 1 layer (point)</LI>
49
 * </UL>
50
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
51
 */
52
public class IntersectionAlgorithm extends AbstractSextanteGeoProcess {
53

  
54
	public static final String  RESULT_POL            = "RESULT_POL";
55
	public static final String  RESULT_POINT          = "RESULT_POINT";
56
	public static final String  RESULT_LINE           = "RESULT_LINE";
57
	public static final String  LAYER                 = "LAYER";
58
	public static final String  INTER                 = "INTER";
59
	public static final String  SELECTGEOM_INPUT      = "SELECTGEOM_INPUT";
60
	public static final String  SELECTGEOM_OVERLAY    = "SELECTGEOM_OVERLAY";
61

  
62
	/*
63
	 * (non-Javadoc)
64
	 * @see es.unex.sextante.core.GeoAlgorithm#defineCharacteristics()
65
	 */
66
	public void defineCharacteristics() {
67
        setName(getTranslation("Intersection"));
68
        setGroup(getTranslation("basic_vect_algorithms"));
69
        // setGeneratesUserDefinedRasterOutput(false);
70

  
71
		try {
72
			m_Parameters.addInputVectorLayer(LAYER,
73
                getTranslation("Input_layer"),
74
												IVectorLayer.SHAPE_TYPE_WRONG,
75
												true);
76
			m_Parameters.addInputVectorLayer(INTER,
77
                getTranslation("Overlays_layer"),
78
												IVectorLayer.SHAPE_TYPE_WRONG,
79
												true);
80
            m_Parameters.addBoolean(SELECTGEOM_INPUT,
81
            		getTranslation("Selected_geometries_input_layer_inters"), false);
82
            m_Parameters.addBoolean(SELECTGEOM_OVERLAY,
83
            		getTranslation("Selected_geometries_overlay_layer_inters"), false);
84
		} catch (RepeatedParameterNameException e) {
85
			Sextante.addErrorToLog(e);
86
		}
87
		addOutputVectorLayer(RESULT_POL, getTranslation("Intersection_polygon"),
88
								OutputVectorLayer.SHAPE_TYPE_POLYGON);
89
		addOutputVectorLayer(RESULT_LINE, getTranslation("Intersection_line"),
90
								OutputVectorLayer.SHAPE_TYPE_LINE);
91
		addOutputVectorLayer(RESULT_POINT, getTranslation("Intersection_point"),
92
								OutputVectorLayer.SHAPE_TYPE_POINT);
93
	}
94

  
95
	/*
96
	 * (non-Javadoc)
97
	 * @see es.unex.sextante.core.GeoAlgorithm#processAlgorithm()
98
	 */
99
	public boolean processAlgorithm() throws GeoAlgorithmExecutionException {
100
		if(existsOutPutFile(IntersectionAlgorithm.RESULT_LINE, 0)) {
101
    		throw new GeoAlgorithmExecutionException(getTranslation("file_exists"));
102
    	}
103
		if(existsOutPutFile(IntersectionAlgorithm.RESULT_POINT, 0)) {
104
    		throw new GeoAlgorithmExecutionException(getTranslation("file_exists"));
105
    	}
106
		if(existsOutPutFile(IntersectionAlgorithm.RESULT_LINE, 0)) {
107
    		throw new GeoAlgorithmExecutionException(getTranslation("file_exists"));
108
    	}
109
		IVectorLayer inter = m_Parameters.getParameterValueAsVectorLayer(INTER);
110
		IVectorLayer layer = m_Parameters.getParameterValueAsVectorLayer(LAYER);
111
		boolean selectedGeomInput = m_Parameters.getParameter(SELECTGEOM_INPUT).getParameterValueAsBoolean();
112
		boolean selectedGeomOverlay = m_Parameters.getParameter(SELECTGEOM_OVERLAY).getParameterValueAsBoolean();
113
		boolean error = false;
114

  
115
		try {
116
			error = computesIntersection(layer, inter, layer.getShapeType(), selectedGeomInput, selectedGeomOverlay);
117
		} catch (DataException e) {
118
			Sextante.addErrorToLog(e);
119
			return false;
120
		}
121

  
122
		if(getTaskMonitor().isCanceled())
123
			return false;
124
		if(error)
125
			JOptionPane.showMessageDialog(null,
126
	                getTranslation("problems_with_some_geometries"), "Error",
127
	                JOptionPane.WARNING_MESSAGE);
128
		return true;
129
	}
130

  
131
	/**
132
	 * Builds a layer with the intersection between the input layer and the templateGeometry
133
	 * @param layer
134
	 *        Input layer
135
	 * @param templateGeometry
136
	 * @param shapeType
137
	 *        Output shape type
138
	 * @param selectedGeom
139
	 *        If it's true only selected geometries will be computed
140
	 * @throws GeoAlgorithmExecutionException
141
	 */
142
	private boolean computesIntersection(IVectorLayer layer,
143
								IVectorLayer overlay,
144
								int shapeType,
145
								boolean selectedGeomInput,
146
								boolean selectedGeomOverlay) throws DataException, GeoAlgorithmExecutionException {
147
		FeatureStore storeLayer = null;
148
		FeatureStore storeOverlay = null;
149
		if(layer instanceof FlyrVectIVectorLayer &&
150
			overlay instanceof FlyrVectIVectorLayer) {
151
			storeLayer = ((FlyrVectIVectorLayer)layer).getFeatureStore();
152
			storeOverlay = ((FlyrVectIVectorLayer)overlay).getFeatureStore();
153
		} else
154
			return false;
155

  
156
		FeatureType featureType1 = storeLayer.getDefaultFeatureType();
157
		FeatureType featureType2 = storeOverlay.getDefaultFeatureType();
158

  
159
		FeatureStore outFeatStorePol = null;
160
		FeatureStore outFeatStoreLine = null;
161
		FeatureStore outFeatStorePoint = null;
162

  
163
		IntersectionOperation operation = new IntersectionOperation(storeOverlay, this);
164
		operation.setTaskStatus(getStatus());
165

  
166
		//La de puntos se genera siempre
167
		outFeatStorePoint =
168
			buildOutPutStoreFromUnion(featureType1, featureType2,
169
					IVectorLayer.SHAPE_TYPE_POINT,
170
					getTranslation("Intersection_point"), RESULT_POINT);
171

  
172
        if (outFeatStorePoint != null) {
173
            getStatus().setTitle("Point");
174
            operation.computesGeometryOperation(storeLayer, outFeatStorePoint,
175
                attrNames, selectedGeomInput, selectedGeomOverlay, true);
176
        }
177
		//La de pol?gonos solo si es intersecci?n entre pol?gonos
178
		if (isPolygon(storeLayer) && isPolygon(storeOverlay)) {
179
			outFeatStorePol =
180
              buildOutPutStoreFromUnion(featureType1, featureType2,
181
            		  IVectorLayer.SHAPE_TYPE_POLYGON, getTranslation("Intersection_polygon"), RESULT_POL);
182
            if (outFeatStorePol != null) {
183
                getStatus().setTitle("Polygon");
184
                operation.computesGeometryOperation(storeLayer,
185
                    outFeatStorePol, attrNames, selectedGeomInput,
186
                    selectedGeomOverlay, true);
187
            }
188
		}
189

  
190
		//La capa de l?neas se genera cuando ning?na de las dos es de puntos
191
		if (!isPoint(storeLayer) && !isPoint(storeOverlay)) {
192
			outFeatStoreLine =
193
              buildOutPutStoreFromUnion(featureType1, featureType2,
194
            		  IVectorLayer.SHAPE_TYPE_LINE, getTranslation("Intersection_line"), RESULT_LINE);
195
            if (outFeatStoreLine != null) {
196
                getStatus().setTitle("Line");
197
                operation.computesGeometryOperation(storeLayer,
198
                    outFeatStoreLine, attrNames, selectedGeomInput,
199
                    selectedGeomOverlay, true);
200
            }
201
		}
202

  
203
		if(outFeatStorePol == null) {
204
			getNewVectorLayer(RESULT_POL, getTranslation("Null_polygon"),
205
                    OutputVectorLayer.SHAPE_TYPE_POLYGON, new Class[]{Integer.class}, new String[]{""});
206
		}
207

  
208
		if(outFeatStoreLine == null) {
209
			getNewVectorLayer(RESULT_LINE, getTranslation("Null_line"),
210
                    OutputVectorLayer.SHAPE_TYPE_LINE, new Class[]{Integer.class}, new String[]{""});
211
		}
212

  
213
		if(outFeatStorePoint == null) {
214
			getNewVectorLayer(RESULT_POINT, getTranslation("Null_point"),
215
                    OutputVectorLayer.SHAPE_TYPE_POINT, new Class[]{Integer.class}, new String[]{""});
216
		}
217

  
218
		return operation.getErrorInfo();
219
	}
220

  
221
}
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.intersection/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.geoprocess.algorithm.intersection.IntersectionLibrary
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.intersection/src/main/resources/org/gvsig/geoprocess/algorithm/intersection/intersection.properties
1
#
2
# gvSIG. Desktop Geographic Information System.
3
#
4
# Copyright (C) 2007-2012 gvSIG Association.
5
#
6
# This program is free software; you can redistribute it and/or
7
# modify it under the terms of the GNU General Public License
8
# as published by the Free Software Foundation; either version 2
9
# of the License, or (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
# MA  02110-1301, USA.
20
#
21
# For any additional information, do not hesitate to contact us
22
# at info AT gvsig.com, or visit our website www.gvsig.com.
23
#
24

  
25
basic_vect_algorithms=Capas vectoriales
26
Input_layer=Capa de entrada
27
Overlays_layer=Capa de intersecci?n
28
Selected_geometries=Geometrias seleccionadas
29
Intersection=Intersecci?n
30
Selected_geometries_input_layer_inters=Geom. seleccionadas (Capa entrada)
31
Selected_geometries_overlay_layer_inters=Geom. seleccionadas (Capa intersecci?n)
32
problems_with_some_geometries=El proceso ha terminado pero ocurri? un error en alguna geometr?a. Es posible que el resultado no sea del todo exacto. Consulte el log.
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.intersection/src/main/resources/org/gvsig/geoprocess/algorithm/intersection/intersection_en.properties
1
#
2
# gvSIG. Desktop Geographic Information System.
3
#
4
# Copyright (C) 2007-2012 gvSIG Association.
5
#
6
# This program is free software; you can redistribute it and/or
7
# modify it under the terms of the GNU General Public License
8
# as published by the Free Software Foundation; either version 2
9
# of the License, or (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
# MA  02110-1301, USA.
20
#
21
# For any additional information, do not hesitate to contact us
22
# at info AT gvsig.com, or visit our website www.gvsig.com.
23
#
24

  
25
basic_vect_algorithms=Vector layers tools
26
Input_layer=Input cover
27
Overlays_layer=Intersection cover
28
Selected_geometries=Selected geometries
29
Intersection=Intersection
30
Selected_geometries_input_layer_inters=Selected features (Input cover)
31
Selected_geometries_overlay_layer_inters=Selected features (Intersection cover)
32
problems_with_some_geometries=The process has ended but an error happened in some geometry. Maybe the result not be totally accuracy. See the log.
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.intersection/src/main/resources/help/IntersectionAlgorithm.xml
1
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
2
<!--
3

  
4
    gvSIG. Desktop Geographic Information System.
5

  
6
    Copyright (C) 2007-2012 gvSIG Association.
7

  
8
    This program is free software; you can redistribute it and/or
9
    modify it under the terms of the GNU General Public License
10
    as published by the Free Software Foundation; either version 2
11
    of the License, or (at your option) any later version.
12

  
13
    This program is distributed in the hope that it will be useful,
14
    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
    GNU General Public License for more details.
17

  
18
    You should have received a copy of the GNU General Public License
19
    along with this program; if not, write to the Free Software
20
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
    MA  02110-1301, USA.
22

  
23
    For any additional information, do not hesitate to contact us
24
    at info AT gvsig.com, or visit our website www.gvsig.com.
25

  
26
-->
27
	<help>
28
		<element name="DESCRIPTION" text='Este geoproceso opera sobre dos capas, la "capa de entrada" y la "capa de solape", las geometr&#237;as de estas capas pueden ser de pol&#237;gonos, l&#237;neas o puntos.&#10;&#10;Para cada geometr&#237;a de la capa de entrada, calcula la interseccion con las diferentes geometr&#237;as de la capa de solape, originando un nuevo elemento por cada intersecci&#243;n. Este elemento tomar&#225; todos los atributos alfanum&#233;ricos de las geometr&#237;as que lo originaron (de entrada y solape). Por este motivo (modela zonas del espacio que cumplen la condici&#243;n de pertenecer a los dos pol&#237;gonos que lo han originado) a este geoproceso se le conoce como operador AND espacial.&#10;&#10;Un ejemplo de aplicaci&#243;n de este geoproceso ser&#237;a para, dada una capa de usos del suelo Corine 2000, y una capa del mapa geol&#243;gico nacional, obtener una capa de pol&#237;gonos con informaci&#243;n homog&#233;nea de uso del suelo y material geol&#243;gico.' description="Descripci&#243;n" type="0">
29
			<image description="" file="intersectdesc.png">
30
			</image>
31
		</element>
32
		<element name="ADDITIONAL_INFO" text="" description="Informaci&#243;n adicional" type="0">
33
		</element>
34
		<element name="EXTENSION_AUTHOR" text="Nacho Brodin" description="Algoritmo creado por" type="0">
35
		</element>
36
		<element name="HELP_AUTHOR" text="" description="Ayuda creada por" type="0">
37
		</element>
38
		<element name="USER_NOTES" text="" description="Notas de usuario" type="0">
39
		</element>
40
		<element name="LAYER" text="" description="Capa de entrada" type="3">
41
		</element>
42
		<element name="INTER" text="" description="Capa de revestimiento" type="3">
43
		</element>
44
		<element name="CHECK" text="" description="Geometrias seleccionadas" type="3">
45
		</element>
46
		<element name="OUTPUT_DESCRIPTION" text="" description="Descripci&#243;n" type="2">
47
		</element>
48
		<element name="RESULT" text="" description="Intersecci&#243;n" type="2">
49
		</element>
50
	</help>
51
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.intersection/src/main/resources/help/IntersectionAlgorithm_en.xml
1
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
2
<!--
3

  
4
    gvSIG. Desktop Geographic Information System.
5

  
6
    Copyright (C) 2007-2012 gvSIG Association.
7

  
8
    This program is free software; you can redistribute it and/or
9
    modify it under the terms of the GNU General Public License
10
    as published by the Free Software Foundation; either version 2
11
    of the License, or (at your option) any later version.
12

  
13
    This program is distributed in the hope that it will be useful,
14
    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
    GNU General Public License for more details.
17

  
18
    You should have received a copy of the GNU General Public License
19
    along with this program; if not, write to the Free Software
20
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
    MA  02110-1301, USA.
22

  
23
    For any additional information, do not hesitate to contact us
24
    at info AT gvsig.com, or visit our website www.gvsig.com.
25

  
26
-->
27
	<help>
28
		<element name="DESCRIPTION" text='This geoprocess works with two layers: the input layer and the overlay layer.&#10;&#10;For each geometry in the input layer, it computes its intersections with the geometries of the overlay layer. For each intersection, it adds a new feature with the intersection as geometry and all attributes of the features which originates it. It is called "Spatial AND", because features of the result layer models a space common to both layers.' description="Descripci&#243;n" type="0">
29
			<image description="" file="intersectdesc.png">
30
			</image>
31
		</element>
32
		<element name="ADDITIONAL_INFO" text="" description="Informaci&#243;n adicional" type="0">
33
		</element>
34
		<element name="EXTENSION_AUTHOR" text="Nacho Brodin" description="Algoritmo creado por" type="0">
35
		</element>
36
		<element name="HELP_AUTHOR" text="" description="Ayuda creada por" type="0">
37
		</element>
38
		<element name="USER_NOTES" text="" description="Notas de usuario" type="0">
39
		</element>
40
		<element name="LAYER" text="" description="Capa de entrada" type="3">
41
		</element>
42
		<element name="INTER" text="" description="Capa de revestimiento" type="3">
43
		</element>
44
		<element name="CHECK" text="" description="Geometrias seleccionadas" type="3">
45
		</element>
46
		<element name="OUTPUT_DESCRIPTION" text="" description="Descripci&#243;n" type="2">
47
		</element>
48
		<element name="RESULT" text="" description="Intersecci&#243;n" type="2">
49
		</element>
50
	</help>
51
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.intersection/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
  <modelVersion>4.0.0</modelVersion>
4
  <artifactId>org.gvsig.geoprocess.algorithm.intersection</artifactId>
5
  <packaging>jar</packaging>
6
  <name>org.gvsig.geoprocess.algorithm.intersection</name>
7
	
8
	<parent>
9
		<groupId>org.gvsig</groupId>
10
		<artifactId>org.gvsig.geoprocess.algorithm</artifactId>
11
		<version>2.2.111</version>
12
	</parent>
13
	
14
	<dependencies>
15
		<dependency>
16
		    <groupId>org.gvsig</groupId>
17
   			<artifactId>org.gvsig.geoprocess.algorithm.base</artifactId>
18
            <scope>compile</scope>
19
   		</dependency>
20
	</dependencies>
21
	
22
</project>
0 23

  
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
  <modelVersion>4.0.0</modelVersion>
4
  <artifactId>org.gvsig.geoprocess.algorithm.buffer</artifactId>
5
  <packaging>jar</packaging>
6
  <name>org.gvsig.geoprocess.algorithm.buffer</name>
7
	
8
	<parent>
9
		<groupId>org.gvsig</groupId>
10
		<artifactId>org.gvsig.geoprocess.algorithm</artifactId>
11
		<version>2.2.111</version>
12
	</parent>
13
	
14
	<dependencies>
15
		<dependency>
16
		    <groupId>org.gvsig</groupId>
17
   			<artifactId>org.gvsig.geoprocess.algorithm.base</artifactId>
18
            <scope>compile</scope>
19
   		</dependency>
20
   		<dependency>
21
		    <groupId>org.gvsig</groupId>
22
   			<artifactId>org.gvsig.geoprocess.algorithm.dissolve</artifactId>
23
            <scope>compile</scope>
24
   		</dependency>
25
   		<dependency>
26
		    <groupId>org.gvsig</groupId>
27
   			<artifactId>org.gvsig.geoprocess.algorithm.fusespatially</artifactId>
28
            <scope>compile</scope>
29
   		</dependency>
30
   		<dependency>
31
		    <groupId>org.gvsig</groupId>
32
   			<artifactId>org.gvsig.andami</artifactId>
33
            <scope>compile</scope>
34
   		</dependency>
35
        <dependency>
36
            <groupId>org.gvsig</groupId>
37
            <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
38
            <scope>compile</scope>
39
        </dependency>
40
        <dependency>
41
            <groupId>org.gvsig</groupId>
42
            <artifactId>org.gvsig.fmap.mapcontext.impl</artifactId>
43
            <scope>runtime</scope>
44
        </dependency>
45
		<dependency>
46
            <groupId>org.gvsig</groupId>
47
            <artifactId>org.gvsig.fmap.dal.api</artifactId>
48
            <scope>compile</scope>
49
        </dependency>
50
        <dependency>
51
            <groupId>org.gvsig</groupId>
52
            <artifactId>org.gvsig.fmap.dal.impl</artifactId>
53
            <scope>runtime</scope>
54
        </dependency>
55
        <dependency>
56
            <groupId>org.gvsig</groupId>
57
            <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
58
            <scope>compile</scope>
59
        </dependency>
60
        <dependency>
61
            <groupId>org.gvsig</groupId>
62
            <artifactId>org.gvsig.fmap.dal.spi</artifactId>
63
            <scope>compile</scope>
64
        </dependency>
65
	</dependencies>
66
	
67
</project>
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/java/org/gvsig/geoprocess/algorithm/buffer/BufferParametersPanel.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.geoprocess.algorithm.buffer;
25

  
26
import java.awt.BorderLayout;
27
import java.awt.GridBagConstraints;
28
import java.awt.GridBagLayout;
29
import java.awt.Insets;
30
import java.awt.event.ActionEvent;
31
import java.awt.event.ActionListener;
32
import java.util.ArrayList;
33
import java.util.List;
34

  
35
import javax.swing.BorderFactory;
36
import javax.swing.ButtonGroup;
37
import javax.swing.ComboBoxModel;
38
import javax.swing.DefaultComboBoxModel;
39
import javax.swing.JCheckBox;
40
import javax.swing.JComboBox;
41
import javax.swing.JLabel;
42
import javax.swing.JPanel;
43
import javax.swing.JRadioButton;
44
import javax.swing.JScrollPane;
45
import javax.swing.JTextField;
46

  
47
import org.gvsig.geoprocess.lib.api.GeoProcessLocator;
48
import org.gvsig.geoprocess.sextante.gui.algorithm.AlgorithmOutputPanel;
49

  
50
import es.unex.sextante.core.GeoAlgorithm;
51
import es.unex.sextante.core.ObjectAndDescription;
52
import es.unex.sextante.core.OutputObjectsSet;
53
import es.unex.sextante.core.ParametersSet;
54
import es.unex.sextante.core.Sextante;
55
import es.unex.sextante.dataObjects.IVectorLayer;
56
import es.unex.sextante.gui.algorithm.GeoAlgorithmParametersPanel;
57
import es.unex.sextante.gui.algorithm.OutputChannelSelectionPanel;
58
import es.unex.sextante.gui.core.SextanteGUI;
59
import es.unex.sextante.outputs.Output;
60

  
61
/**
62
 * Panel for buffer algorithm
63
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
64
 */
65
public class BufferParametersPanel extends GeoAlgorithmParametersPanel implements ActionListener {
66
	private static final long                serialVersionUID   = 1L;
67
	private final int                        marginSides        = 15;
68
	private final int                        marginBottom       = 8;
69
	private GeoAlgorithm                     m_Algorithm        = null;
70
	private JComboBox                        layers             = null;
71
	private JComboBox                        fields             = null;
72
	private JComboBox                        influenceAreas     = null;
73
	private JComboBox                        radialBuffers      = null;
74
	private JCheckBox                        selectionOnly      = null;
75
	private JCheckBox                        dissolveEntities   = null;
76
	private JCheckBox                        roundBorder        = null;
77
	private JTextField                       distance           = null;
78
	private JRadioButton                     selectDistance     = null;
79
	private JRadioButton                     selectField        = null;
80
	
81
	private List<String>                     fieldList             = new ArrayList<String>();
82
	private AlgorithmOutputPanel             algorithmOutputPanel  = null;
83
	private OutputChannelSelectionPanel      outputChannelSelectionPanel;
84
	private JPanel                           outputPanel;
85
 	
86
	public BufferParametersPanel() {
87
		super();
88
	}
89

  
90
    public void init(GeoAlgorithm algorithm) {
91
    	m_Algorithm = algorithm;
92
    	initGUI();
93
    }
94

  
95
	private void initGUI() {
96
		this.setLayout(new BorderLayout());
97
		this.add(getMainJScrollPane(), BorderLayout.CENTER);
98
	}
99
	
100
	private JScrollPane getMainJScrollPane() {
101
		JPanel panel = new JPanel();
102
		GridBagLayout gbl = new GridBagLayout();
103
		panel.setLayout(gbl);
104
		
105
		GridBagConstraints gbc = new GridBagConstraints();
106
		gbc.fill = GridBagConstraints.HORIZONTAL;
107
		gbc.weightx = 1.0;
108
		gbc.gridx = 0;
109
		gbc.gridy = 0;
110
		gbc.insets = new Insets(0, marginSides, 0, marginSides);
111
		panel.add(getInputPanel(), gbc);
112
		
113
		gbc.gridy = 1;
114
		panel.add(getOptionsPanel(), gbc);
115
		
116
		gbc.gridy = 2;
117
		panel.add(getOutputsPanel(), gbc);
118
		JScrollPane scrollPane = new JScrollPane(panel);
119
		return scrollPane;
120
	}
121
	
122
	/**
123
	 * Gets the output panel (SEXTANTE)
124
	 * @return
125
	 */
126
	private JPanel getOutputChannelSelectionPanel() {
127
		if(outputPanel == null) {
128
			try {
129
				outputPanel = new JPanel();
130
				outputPanel.setLayout(new BorderLayout());
131
				final OutputObjectsSet ooSet = m_Algorithm.getOutputObjects();
132
				final Output out = ooSet.getOutput(BufferAlgorithm.RESULT);
133
				outputChannelSelectionPanel = new OutputChannelSelectionPanel(out, m_Algorithm.getParameters());
134
				outputPanel.add(new JLabel(" " + GeoProcessLocator.getGeoProcessManager().getTranslation("Buffer") +
135
						" [" + GeoProcessLocator.getGeoProcessManager().getTranslation("Vectorial") +
136
						"]               "), BorderLayout.WEST);
137
				outputPanel.add(outputChannelSelectionPanel, BorderLayout.CENTER);
138
			} catch (final Exception e) {
139
				Sextante.addErrorToLog(e);
140
			}
141
		}
142
		return outputPanel;
143
	}
144
	
145
	/**
146
	 * Gets the output panel
147
	 * @return
148
	 */
149
	@SuppressWarnings("unused")
150
	private AlgorithmOutputPanel getAlgorithmOutputPanel() {
151
		if(algorithmOutputPanel == null)
152
		    algorithmOutputPanel = new AlgorithmOutputPanel();
153
		return algorithmOutputPanel;
154
	}
155
	
156
	/**
157
	 * Gets a new input panel
158
	 * @param text
159
	 * @param combo
160
	 * @return
161
	 */
162
	public JPanel getOutputsPanel() {
163
		JPanel panel = new JPanel();
164
		GridBagLayout gbl = new GridBagLayout();
165
		panel.setLayout(gbl);
166
		panel.setBorder(BorderFactory.createTitledBorder(GeoProcessLocator.getGeoProcessManager().getTranslation("outputs")));
167
		
168
		GridBagConstraints gbc = new GridBagConstraints();
169
		gbc.fill = GridBagConstraints.HORIZONTAL;
170
		gbc.weightx = 1.0;
171
		gbc.insets = new Insets(0, marginSides, marginBottom, marginSides);
172
		panel.add(getOutputChannelSelectionPanel(), gbc);
173
		
174
		return panel;
175
	}
176
	
177
	/**
178
	 * Gets a new input panel
179
	 * @param text
180
	 * @param combo
181
	 * @return
182
	 */
183
	public JPanel getInputPanel() {
184
		JPanel panel = new JPanel();
185
		GridBagLayout gbl = new GridBagLayout();
186
		panel.setLayout(gbl);
187
		panel.setBorder(BorderFactory.createTitledBorder(GeoProcessLocator.getGeoProcessManager().getTranslation("input")));
188
		
189
		GridBagConstraints gbc = new GridBagConstraints();
190
		gbc.fill = GridBagConstraints.HORIZONTAL;
191
		gbc.weightx = 1.0;
192
		gbc.insets = new Insets(0, marginSides, marginBottom, marginSides);
193
		panel.add(getComboLayers(), gbc);
194
		
195
		return panel;
196
	}
197
	
198
	/**
199
	 * Gets a new options panel
200
	 * @param text
201
	 * @param combo
202
	 * @return
203
	 */
204
	public JPanel getOptionsPanel() {
205
		JPanel panel = new JPanel();
206
		GridBagLayout gbl = new GridBagLayout();
207
		panel.setLayout(gbl);
208
		panel.setBorder(BorderFactory.createTitledBorder(GeoProcessLocator.getGeoProcessManager().getTranslation("options")));
209
		
210
		ButtonGroup group = new ButtonGroup();
211
		group.add(getRadioSelectDistance());
212
	    group.add(getRadioSelectField());
213

  
214
		GridBagConstraints gbc = new GridBagConstraints();
215
		gbc.fill = GridBagConstraints.HORIZONTAL;
216
		gbc.weightx = 1.0;
217
		gbc.insets = new Insets(0, marginSides, marginBottom, marginSides);
218
		panel.add(getRadioSelectField(), gbc);
219
		
220
		gbc.gridy = 1;
221
		gbc.insets = new Insets(0, marginSides + 10, marginBottom, marginSides);
222
		panel.add(getComboFields(), gbc);
223
		
224
		gbc.gridy = 2;
225
		gbc.insets = new Insets(0, marginSides, marginBottom, marginSides);
226
		panel.add(getRadioSelectDistance(), gbc);
227
		
228
		gbc.gridy = 3;
229
		gbc.insets = new Insets(0, marginSides + 10, marginBottom, marginSides);
230
		panel.add(getTextDistance(), gbc);
231
		
232
		gbc.gridy = 4;
233
		gbc.insets = new Insets(0, marginSides, marginBottom, marginSides);
234
		panel.add(getCheckSelectedGeom(), gbc);
235
		
236
		gbc.gridy = 5;
237
		panel.add(getCheckDissolveEntities(), gbc);
238
		
239
		gbc.gridy = 6;
240
		panel.add(getCheckRoundBorder(), gbc);
241
		
242
		gbc.gridy = 7;
243
		panel.add(getComboInfluenceAreas(), gbc);
244
		
245
		gbc.gridy = 8;
246
		panel.add(getComboRadialBuffers(), gbc);
247
		
248
		checkLineLayer();
249
		
250
		return panel;
251
	}
252
	
253
	/**
254
	 * Gets a ComboBox
255
	 * @return
256
	 */
257
	public JComboBox getComboLayers() {
258
		if(layers == null) {
259
			layers = new JComboBox();
260
			ComboBoxModel comboModel = new DefaultComboBoxModel(getLayerList());
261
			layers.setModel(comboModel);
262
			layers.addActionListener(this);
263
		}
264
		return layers;
265
	}
266
	
267
	/**
268
	 * Gets a influence areas ComboBox
269
	 * @return
270
	 */
271
	public JComboBox getComboInfluenceAreas() {
272
		if(influenceAreas == null) {
273
			influenceAreas = new JComboBox();
274
			for (int i = 0; i < BufferAlgorithm.sOptions.length; i++) {
275
				influenceAreas.addItem(BufferAlgorithm.sOptions[i]);
276
			}
277
			influenceAreas.addActionListener(this);
278
		}
279
		return influenceAreas;
280
	}
281
	
282
	/**
283
	 * Gets a influence areas ComboBox
284
	 * @return
285
	 */
286
	public JComboBox getComboRadialBuffers() {
287
		if(radialBuffers == null) {
288
			radialBuffers = new JComboBox();
289
			radialBuffers.addItem(BufferAlgorithm.BUFFER_OUTSIDE_POLY + 1 + "");
290
			radialBuffers.addItem(BufferAlgorithm.BUFFER_INSIDE_POLY + 1 + "");
291
			radialBuffers.addItem(BufferAlgorithm.BUFFER_INSIDE_OUTSIDE_POLY + 1 + "");
292
			radialBuffers.addActionListener(this);
293
		}
294
		return radialBuffers;
295
	}
296
	
297
	/**
298
	 * Gets a CheckBox
299
	 * @return
300
	 */
301
	public JCheckBox getCheckSelectedGeom() {
302
		if(selectionOnly == null) {
303
			selectionOnly = new JCheckBox(GeoProcessLocator.getGeoProcessManager().getTranslation("Selected_geometries"));
304
		}
305
		return selectionOnly;
306
	}
307
	
308
	/**
309
	 * Gets a CheckBox
310
	 * @return
311
	 */
312
	public JCheckBox getCheckDissolveEntities() {
313
		if(dissolveEntities == null) {
314
			dissolveEntities = new JCheckBox(GeoProcessLocator.getGeoProcessManager().getTranslation("Dissolve_entities"));
315
		}
316
		return dissolveEntities;
317
	}
318
	
319
	/**
320
	 * Gets a CheckBox
321
	 * @return
322
	 */
323
	public JCheckBox getCheckRoundBorder() {
324
		if(roundBorder == null) {
325
			roundBorder = new JCheckBox(GeoProcessLocator.getGeoProcessManager().getTranslation("Round_border"));
326
		}
327
		return roundBorder;
328
	}
329
	
330
	/**
331
	 * Gets a ComboBox
332
	 * @return
333
	 */
334
	public JComboBox getComboFields() {
335
		if(fields == null) {
336
			fields = new JComboBox();
337
			loadFieldsInAreaCombo();
338
			fields.setEnabled(true);
339
		}
340
		return fields;
341
	}
342
	
343
	private void loadFieldsInAreaCombo() {
344
		List<String> fieldList = getFieldList();
345
		getComboFields().removeAllItems();
346
		for (int i = 0; i < fieldList.size(); i++) 
347
			getComboFields().addItem(fieldList.get(i));
348
	}
349
	
350
	private void checkLineLayer() {
351
		IVectorLayer vectorLyr = getSelectedVectorLayer();
352
		if(vectorLyr.getShapeType() == IVectorLayer.SHAPE_TYPE_LINE || vectorLyr.getShapeType() == IVectorLayer.SHAPE_TYPE_POINT) {
353
			getComboInfluenceAreas().setSelectedIndex(BufferAlgorithm.BUFFER_OUTSIDE_POLY);
354
			getComboInfluenceAreas().setEnabled(false);
355
		} else {
356
			getComboInfluenceAreas().setEnabled(true);
357
		}
358
	}
359
	
360
	/**
361
	 * Gets a CheckBox
362
	 * @return
363
	 */
364
	public JTextField getTextDistance() {
365
		if(distance == null) {
366
			distance = new JTextField("0.0");
367
			distance.setEnabled(false);
368
		}
369
		return distance;
370
	}
371
	
372
	/**
373
	 * Gets a JRadioButton
374
	 * @return
375
	 */
376
	public JRadioButton getRadioSelectDistance() {
377
		if(selectDistance == null) {
378
			selectDistance = new JRadioButton(GeoProcessLocator.getGeoProcessManager().getTranslation("area_distance"));
379
			selectDistance.addActionListener(this);
380
			selectDistance.setSelected(false);
381
		}
382
		return selectDistance;
383
	}
384
	
385
	/**
386
	 * Gets a JRadioButton
387
	 * @return
388
	 */
389
	public JRadioButton getRadioSelectField() {
390
		if(selectField == null) {
391
			selectField = new JRadioButton(GeoProcessLocator.getGeoProcessManager().getTranslation("area_field"));
392
			selectField.addActionListener(this);
393
			selectField.setSelected(true);
394
		}
395
		return selectField;
396
	}
397
	
398
	//------------------------------------------------------------
399
	
400
	/*
401
	 * (non-Javadoc)
402
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
403
	 */
404
	public void actionPerformed(ActionEvent e) {
405
		if(e.getSource() == getRadioSelectDistance()) {
406
			getTextDistance().setEnabled(true);
407
			getComboFields().setEnabled(false);
408
		}
409
		
410
		if(e.getSource() == getRadioSelectField()) {
411
			getTextDistance().setEnabled(false);
412
			getTextDistance().setText("0.0");
413
			getComboFields().setEnabled(true);
414
		}
415
		
416
		if(e.getSource() == getComboLayers()) {
417
			loadFieldsInAreaCombo();
418
			checkLineLayer();
419
		}
420
	}
421
	
422
	@Override
423
    public void assignParameters() {
424
		try {
425
			ParametersSet params = m_Algorithm.getParameters();
426
			params.getParameter(BufferAlgorithm.LAYER).setParameterValue(getSelectedVectorLayer());
427
			params.getParameter(BufferAlgorithm.FIELD).setParameterValue(getFieldPosition());
428
			params.getParameter(BufferAlgorithm.FIELD).setParameterValue(getFieldName());
429
			params.getParameter(BufferAlgorithm.SELECTED_GEOM).setParameterValue(getCheckSelectedGeom().isSelected());
430
			double dist = 0;
431
			try {
432
				dist = new Double(getTextDistance().getText());
433
			} catch(NumberFormatException e) {
434
			}
435
			params.getParameter(BufferAlgorithm.DISTANCE).setParameterValue(dist);
436
			params.getParameter(BufferAlgorithm.DISSOLVE).setParameterValue(getCheckDissolveEntities().isSelected());
437
			params.getParameter(BufferAlgorithm.ROUND_BORDER).setParameterValue(getCheckRoundBorder().isSelected());
438
			params.getParameter(BufferAlgorithm.AREA).setParameterValue(getComboInfluenceAreas().getSelectedIndex());
439
			params.getParameter(BufferAlgorithm.RING_NUMBER).setParameterValue(getComboRadialBuffers().getSelectedIndex());
440
			
441
			OutputObjectsSet ooSet = m_Algorithm.getOutputObjects();
442
			Output out = ooSet.getOutput(BufferAlgorithm.RESULT);
443
			
444
			//Reponer estas l?neas para cambiar el panel de salida y comentar la siguiente
445
			//AlgorithmOutputPanel fsp = getAlgorithmOutputPanel();
446
			//out.setOutputChannel(new CompositeSourceOutputChannel(fsp.getOutputParameters()));
447
	         out.setOutputChannel(outputChannelSelectionPanel.getOutputChannel());
448
		} catch (Exception e) {
449
			Sextante.addErrorToLog(e);
450
		}
451
	}
452
	
453
	
454

  
455
	@Override
456
	public void setOutputValue(String arg0, String arg1) {
457
		
458
	}
459

  
460
	@Override
461
	public void setParameterValue(String arg0, String arg1) {
462
		
463
	}
464
	
465
	/**
466
	 * Gets the input layer list
467
	 * @return
468
	 */
469
	private ObjectAndDescription[] getLayerList() {
470
		IVectorLayer[] layers = SextanteGUI.getInputFactory()
471
					.getVectorLayers(IVectorLayer.SHAPE_TYPE_WRONG);
472
		ObjectAndDescription[] oad = new ObjectAndDescription[layers.length];
473
		for (int i = 0; i < layers.length; i++)
474
			oad[i] = new ObjectAndDescription(layers[i].getName(), layers[i]);
475
		return oad;
476
	}
477
	
478
	/**
479
	 * Gets the selected vector layer in the JComboBox
480
	 * @return
481
	 */
482
	private IVectorLayer getSelectedVectorLayer() {
483
		if(layers.getSelectedItem() != null)
484
			return (IVectorLayer)((ObjectAndDescription)layers.getSelectedItem()).getObject();
485
		return null;
486
	}
487
	
488
	/**
489
	 * Gets the field list of the selected layer
490
	 * @return
491
	 */
492
	@SuppressWarnings("unchecked")
493
	public List<String> getFieldList() {
494
		IVectorLayer layer = getSelectedVectorLayer();
495
		List<String> data = new ArrayList<String>();
496
		fieldList.clear();
497
		for (int i = 0; i < layer.getFieldCount(); i++) {
498
			Class type = layer.getFieldType(i);
499
			fieldList.add(layer.getFieldName(i));
500
			if(Number.class.isAssignableFrom(type))
501
				data.add(layer.getFieldName(i));
502
		}
503
		return data;
504
	}
505
	
506
	private int getFieldPosition() {
507
		if(getComboFields().getSelectedItem() != null) {
508
			String label = getComboFields().getSelectedItem().toString();
509
			for (int i = 0; i < fieldList.size(); i++) {
510
				if(fieldList.get(i).equals(label)) {
511
					return i;
512
				}
513
			}
514
		}
515
		return -1;
516
	}	
517
        
518
        private String getFieldName() {
519
		if(getComboFields().getSelectedItem() != null) {
520
			String label = getComboFields().getSelectedItem().toString();
521
                        return label;
522
		}
523
		return null;
524
	}
525
}
0 526

  
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/java/org/gvsig/geoprocess/algorithm/buffer/AbstractDistance.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.geoprocess.algorithm.buffer;
25

  
26
import org.cresques.cts.IProjection;
27
import org.gvsig.fmap.dal.feature.Feature;
28
import org.gvsig.fmap.mapcontext.MapContext;
29

  
30
/**
31
 * Abstract distance implementation.
32
 * 
33
 * @author gvSIG Team
34
 * @version $Id$
35
 */
36
public abstract class AbstractDistance implements IDistance {
37

  
38
    public static final double EARTH_RADIUS = 6378137d;
39
    protected int numberOfRings = 1;
40
    protected Feature feature = null;
41
    
42
    public void setFeature(Feature feature) {
43
        this.feature = feature;
44
    }
45

  
46
    /**
47
     * For computing with geodetic coordinates:
48
     * returns the angular measure (in radians)
49
     * for a distance over the earth along a
50
     * meridiam.
51
     * Because this consideration is an approximation,
52
     * we consideer the eart like an sphere (not an
53
     * ellipsoid)
54
     * 
55
     * @param dist
56
     *            distance in meters
57
     * @return arc of meridian whose length is the specified
58
     *         distance
59
     */
60
    private double toSexaAngularMeasure(double dist) {
61
        /*
62
         * dist = 6378km(terrestrial radius) -> 2PI
63
         * passed distance -> incognite
64
         */
65
        return Math.toDegrees((2 * Math.PI * dist) / EARTH_RADIUS);
66
    }
67

  
68
    /**
69
     * Converts a distance entered by user in the GUI in the same distance
70
     * in internal units (measure units)
71
     */
72
    protected double getInInternalUnits(double userEntryDistance,
73
        IProjection proj, int distanceUnits, int mapUnits) {
74

  
75
       /* double[] trans2Meter = MapContext.getDistanceTrans2Meter();
76
        double distInInternalUnits =
77
            (userEntryDistance / trans2Meter[mapUnits])
78
                * trans2Meter[distanceUnits];
79

  
80
        if ((proj != null) && !(proj.isProjected()))
81
            distInInternalUnits = toSexaAngularMeasure(distInInternalUnits);
82
            
83
        return distInInternalUnits;*/
84
    	
85
    	/*
86
    	 * En caso de que el sistema de referencia sea proyectado se usa la distancia
87
    	 * que el usuario ha definido, ya que esta se supone en metros. En caso de que
88
    	 * las coordenadas sean en geogr?ficas se toma la distancia que el usuario ha
89
    	 * definido en metros en el ecuador. Esto supone una desviaci?n a medida que 
90
    	 * nos alejamos del ecuador. Una posible soluci?n ser?a obtener esa distancia 
91
    	 * para la posici?n en el planeta en la que se encuentra la cartograf?a en la
92
    	 * proyecci?n en la que est? definida. 
93
    	 */
94

  
95
    	if ((proj != null) && !(proj.isProjected()))
96
    		return userEntryDistance / 111352D;
97
        return userEntryDistance;
98
    }
99
    
100
    public void setNumberOfRings(int n) {
101
    	numberOfRings = n;
102
    }
103

  
104
}
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.111/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/java/org/gvsig/geoprocess/algorithm/buffer/BufferLibrary.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff