Revision 568

View differences:

org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/distrib
1
#/bin/bash
2

  
3
#USER=
4
#PASS=
5

  
6
REPO="https://devel.gvsig.org/svn/gvsig-geoprocess"
7

  
8
INCREMENT=3 #1:major number 2:minor number 3:bug number
9
PARAMETERS_LIN="-Dnative-platform=linux -Dnative-compiler=gcc4 -Dnative-arch=i386 -Dnative-distribution=all -Dlibrary-type=dynamic -Dnative_classifier=linux-all-gcc4-i386-dynamic -Dnative_classifier=linux-all-gcc4-i386-dynamic -Dmaven.test.skip"
10

  
11
VERSION_TO_FIX=`cat pom.xml | grep "<version>" | head -n 1 | sed 's/<version>//g' | sed 's/-SNAPSHOT<\/version>//g'`;
12
MAJOR_NUMBER=`echo $VERSION_TO_FIX | cut -d"." -f 1`;
13
MINOR_NUMBER=`echo $VERSION_TO_FIX | cut -d"." -f 2`;
14
BUG_NUMBER=`echo $VERSION_TO_FIX | cut -d"." -f 3`;
15

  
16
VERSION_TO_FIX=$MAJOR_NUMBER"."$MINOR_NUMBER"."$BUG_NUMBER
17

  
18
if [ $INCREMENT -eq 1 ]; then
19
  MAJOR_NUMBER=$((MAJOR_NUMBER+1));
20
fi
21

  
22
if [ $INCREMENT -eq 2 ]; then
23
  MINOR_NUMBER=$((MINOR_NUMBER+1));
24
fi
25

  
26
if [ $INCREMENT -eq 3 ]; then
27
  BUG_NUMBER=$((BUG_NUMBER+1));
28
fi
29

  
30
NEXT_DEV_VERSION=$MAJOR_NUMBER"."$MINOR_NUMBER"."$BUG_NUMBER"-SNAPSHOT"
31

  
32
echo Fixed version:$VERSION_TO_FIX
33
echo New development version:$NEXT_DEV_VERSION
34
#VERSION_TO_FIX=2.2.2
35
#NEXT_DEV_VERSION=2.2.3-SNAPSHOT
36

  
37
#mvn release:prepare -B -DdryRun=false -Dtag=v$VERSION_TO_FIX -DreleaseVersion=$VERSION_TO_FIX -DdevelopmentVersion=$NEXT_DEV_VERSION -DpreparationGoals="clean install" -Dusername=$USER -Dpassword=$PASS -DignoreSnapshots=true -Darguments=$PARAMETERS_LIN
38

  
39
read -p "¿Prepare de $i correcto? ¿Continuar? s/n: " CONTINUE
40
if [ "$CONTINUE" == "n" ]; then
41
  mvn release:rollback
42
  exit;
43
fi
44
  
45
mvn release:perform -Dusername=$USER -Dpassword=$PASS -Darguments=$PARAMETERS_LIN
46

  
47
read -p "¿Perform de $i correcto? ¿Continuar? s/n: " CONTINUE
48
if [ "$CONTINUE" == "n" ]; then
49
  mvn release:rollback
50
  exit;
51
fi
52

  
0 53

  
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/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.gvsig.tools.dispose.DisposableIterator;
48
import org.slf4j.Logger;
49
import org.slf4j.LoggerFactory;
50

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

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

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

  
74
	public IntersectionOperation(FeatureStore overlayLayer, AbstractSextanteGeoProcess p) {
75
		super(p);
76
		this.storeOverlay = overlayLayer;
77
	}
78
	
79
	public boolean getErrorInfo() {
80
		return errorInfo;
81
	}
82

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

  
95
		FeatureSet features = null;
96
		DisposableIterator it = null;
97
		try {
98
			if(selectedGeomOverlay) {
99
				features = (FeatureSet)storeOverlay.getSelection();
100
			} else {
101
				features = storeOverlay.getFeatureSet();
102
			}
103
			it = features.iterator();
104
		} catch (DataException e) {
105
			Sextante.addErrorToLog(e);
106
			return lastEditFeature;
107
		}
108
		
109
		while( it.hasNext() ) {
110
			Feature featureOverlay = (Feature)it.next();
111
			List geomList = featureOverlay.getGeometries();
112
			if(geomList == null) {
113
				org.gvsig.fmap.geom.Geometry geom = featureOverlay.getDefaultGeometry();
114
				lastEditFeature = intersection(g, geom, featureInput, featureOverlay);
115
				continue;
116
			}
117

  
118
			Iterator<org.gvsig.fmap.geom.Geometry> itGeom = geomList.iterator();
119
			while(itGeom.hasNext()) {
120
				org.gvsig.fmap.geom.Geometry geom = itGeom.next();
121
				lastEditFeature = intersection(g, geom, featureInput, featureOverlay);
122
			}
123
		}
124
		it.dispose();
125
		return lastEditFeature;
126
	}
127
	
128
	private EditableFeature intersection(	org.gvsig.fmap.geom.Geometry g1, 
129
											org.gvsig.fmap.geom.Geometry g2, 
130
											Feature featureInput, 
131
											Feature featureOverlay) {
132
		Geometry overlaysGeom = null;
133
		Geometry jtsGeom = null;
134
		int outPutType = TYPES.SURFACE;
135
		
136
		try {
137
			outPutType = persister.getOutputFeatureStore().getDefaultFeatureType()
138
							.getDefaultGeometryAttribute().getGeomType().getType();
139
		} catch (DataException e2) {
140
			Sextante.addErrorToLog(e2);
141
		}
142

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

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

  
183
						lastEditFeature = persister.addFeature(featureInput, featureOverlay, newGeom);
184
					}
185
				}
186
			}
187
		} catch (CreateGeometryException e) {
188
			Sextante.addErrorToLog(e);
189
		} catch (DataException e) {
190
			Sextante.addErrorToLog(e);
191
		} catch (GeometryOperationNotSupportedException e1) {
192
			Sextante.addErrorToLog(e1);
193
		} catch (GeometryOperationException e1) {
194
			Sextante.addErrorToLog(e1);
195
		} catch (com.vividsolutions.jts.geom.TopologyException e) {
196
			/*try {
197
				Shape shape1 = g1.getShape();
198
				Area area1 = new Area(shape1);
199

  
200
				Shape shape2 = g2.getShape();
201
				Area area2 = new Area(shape2);
202
				area1.intersect(area2);
203
				PathIterator it = area1.getPathIterator(null);
204
				Surface s = null;
205
				MultiSurface ms = (MultiSurface)geomManager.create(TYPES.MULTISURFACE, SUBTYPES.GEOM2D);
206
				float coords[] = new float[6];
207
				while(!it.isDone()) {
208
					switch (it.currentSegment(coords)) {
209
					case PathIterator.SEG_MOVETO:
210
						s = (Surface)geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
211
					case PathIterator.SEG_LINETO:
212
						org.gvsig.fmap.geom.primitive.Point p = (org.gvsig.fmap.geom.primitive.Point)geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
213
						p.setX(coords[0]);
214
						p.setY(coords[1]);
215
						s.addVertex(p);
216
						break;
217
					case PathIterator.SEG_CLOSE:
218
						p = (org.gvsig.fmap.geom.primitive.Point)geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
219
						p.setX(coords[0]);
220
						p.setY(coords[1]);
221
						s.addVertex(p);
222
						ms.addSurface(s);
223
						break;
224
					}
225
					it.next();
226
				}
227
				lastEditFeature = persister.addFeature(featureInput, featureOverlay, ms);
228
			} catch (CreateGeometryException e1) {
229
			} catch (DataException e1) {
230
			}*/
231

  
232
			errorInfo = true;
233
			log.info("Problems operating intersection: ", e);
234
		}
235
		return lastEditFeature;
236
	}
237
	
238
	private boolean typesMatch(int dalType, Geometry newGeom) {
239
		return 
240
		   ((dalType == TYPES.MULTICURVE && 
241
		   (newGeom instanceof MultiLineString || newGeom instanceof LineString)) ||
242
		   (dalType == TYPES.MULTIPOINT && 
243
		   (newGeom instanceof MultiPoint || newGeom instanceof Point)) ||
244
		   (dalType == TYPES.MULTISURFACE && 
245
	       (newGeom instanceof Polygon || newGeom instanceof MultiPolygon)) ||
246
	       (dalType == TYPES.CURVE && newGeom instanceof LineString) ||
247
	       (dalType == TYPES.SURFACE && newGeom instanceof Polygon) ||
248
	       (dalType == TYPES.POINT && newGeom instanceof Point));
249
		   
250
	}
251
	
252
//	private MultiCurve convertPolygonJTS2LineJTS(Polygon p) {
253
//		
254
//	}
255
	
256
	/**
257
	 * clips feature's geometry with the clipping geometry, preserving
258
	 * feature's original attributes.
259
	 * If feature's geometry doesn't touch clipping geometry, it will be
260
	 * ignored.
261
	 */
262
	public void invoke(org.gvsig.fmap.geom.Geometry g, EditableFeature featureInput) {
263
		/*if(g == null)
264
			return;
265
		
266
		Geometry jtsGeom = Converter.geometryToJts(g);
267

  
268
		if(!jtsGeom.getEnvelope().intersects(overlaysGeom.getEnvelope()))
269
			return;
270

  
271
		if(jtsGeom.intersects(overlaysGeom)) {
272
			try {
273
				Geometry newGeom = EnhancedPrecisionOp.difference(jtsGeom, overlaysGeom);
274
				persister.addFeature(feature, newGeom);
275
			} catch (CreateGeometryException e) {
276
				Sextante.addErrorToLog(e);
277
			} catch (DataException e) {
278
				Sextante.addErrorToLog(e);
279
			}
280
		} */
281
	}
282

  
283
}
284

  
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/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.7/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
		getStatus().setTitle("Point");
173
		operation.computesGeometryOperation(storeLayer, outFeatStorePoint, attrNames, 
174
				selectedGeomInput, selectedGeomOverlay, true);
175

  
176
		//La de pol?gonos solo si es intersecci?n entre pol?gonos
177
		if (isPolygon(storeLayer) && isPolygon(storeOverlay)) {
178
			outFeatStorePol =
179
              buildOutPutStoreFromUnion(featureType1, featureType2,
180
            		  IVectorLayer.SHAPE_TYPE_POLYGON, getTranslation("Intersection_polygon"), RESULT_POL);
181
			getStatus().setTitle("Polygon");
182
			operation.computesGeometryOperation(storeLayer, outFeatStorePol, attrNames, 
183
					selectedGeomInput, selectedGeomOverlay, true);
184
		}
185
		
186
		//La capa de l?neas se genera cuando ning?na de las dos es de puntos
187
		if (!isPoint(storeLayer) && !isPoint(storeOverlay)) {
188
			outFeatStoreLine =
189
              buildOutPutStoreFromUnion(featureType1, featureType2,
190
            		  IVectorLayer.SHAPE_TYPE_LINE, getTranslation("Intersection_line"), RESULT_LINE);
191
			getStatus().setTitle("Line");
192
			operation.computesGeometryOperation(storeLayer, outFeatStoreLine, attrNames, 
193
					selectedGeomInput, selectedGeomOverlay, true);
194
		}
195

  
196
		if(outFeatStorePol == null) {
197
			getNewVectorLayer(RESULT_POL, getTranslation("Null_polygon"),
198
                    OutputVectorLayer.SHAPE_TYPE_POLYGON, new Class[]{Integer.class}, new String[]{""});
199
		}
200
		
201
		if(outFeatStoreLine == null) {
202
			getNewVectorLayer(RESULT_LINE, getTranslation("Null_line"),
203
                    OutputVectorLayer.SHAPE_TYPE_LINE, new Class[]{Integer.class}, new String[]{""});
204
		}
205
		
206
		if(outFeatStorePoint == null) {
207
			getNewVectorLayer(RESULT_POINT, getTranslation("Null_point"),
208
                    OutputVectorLayer.SHAPE_TYPE_POINT, new Class[]{Integer.class}, new String[]{""});
209
		}
210
		
211
		return operation.getErrorInfo();
212
	}
213
	
214
}
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/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.7/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.7/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.7/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.7/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.7/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.7</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.7/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.7</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.mapcontext.operation</artifactId>
48
            <scope>runtime</scope>
49
        </dependency>
50
		<dependency>
51
            <groupId>org.gvsig</groupId>
52
            <artifactId>org.gvsig.fmap.dal.api</artifactId>
53
            <scope>compile</scope>
54
        </dependency>
55
        <dependency>
56
            <groupId>org.gvsig</groupId>
57
            <artifactId>org.gvsig.fmap.dal.impl</artifactId>
58
            <scope>runtime</scope>
59
        </dependency>
60
        <dependency>
61
            <groupId>org.gvsig</groupId>
62
            <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
63
            <scope>compile</scope>
64
        </dependency>
65
        <dependency>
66
            <groupId>org.gvsig</groupId>
67
            <artifactId>org.gvsig.fmap.dal.spi</artifactId>
68
            <scope>compile</scope>
69
        </dependency>
70
	</dependencies>
71
	
72
</project>
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/resources/org/gvsig/geoprocess/algorithm/buffer/buffer.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
Buffer=Buffer
27
poly_in=Dentro del pol?gono
28
poly_out=Fuera del pol?gono
29
poly_inandout=Dentro y fuera del pol?gono
30
Input_layer=Capa de entrada
31
Selected_geometries=Geometrias seleccionadas
32
Distance=Distancia
33
Field=Campo
34
Fields=Campos
35
Merge=Mezcla
36
Round_border=Borde redondeado
37
Builds_influence_area=Areas de influencia
38
Number_of_rings=N?mero de anillos
39
Wrong_type_for_this_shapetype=Tipo erroneo para este tipo de shape
40
area_field=?rea definida por un campo en metros
41
area_distance=?rea definida por una distancia en metros
42
file_exists=El fichero de salida existe
43
Dissolve_entities=Disolver entidades (solo un anillo)
44
options=Opciones
45
input=Entradas
46
outputs=Salidas
47
calc_buffer=Calculando Buffer
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/resources/org/gvsig/geoprocess/algorithm/buffer/buffer_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
Buffer=Buffer
27
poly_in=Inside the polygon
28
poly_out=Outside the polygon
29
poly_inandout=Inside and outside the polygon
30
Input_layer=Input cover
31
Selected_geometries=Selected features
32
Distance=Distance
33
Field=Field
34
Fields=Fields
35
Merge=Merge
36
Round_border=Round border
37
Builds_influence_area=Influence areas (only polygons)
38
Number_of_rings=Number of radial buffers
39
Wrong_type_for_this_shapetype=wrong type for this shape type
40
area_field=Area defined by a field in meters
41
area_distance=Area defined by a distance in meters
42
file_exists=The output file exists
43
Dissolve_entities=Dissolve entities
44
options=Options
45
input=Inputs
46
outputs=Outputs
47
calc_buffer=Calculating buffer
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/resources/help/BufferAlgorithm.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"
29
		text="Este geoproceso crea una nueva capa vectorial de pol&#237;gonos, generados como zonas de influencia alrededor de las geometr&#237;as de los elementos vectoriales de una capa de entrada.&#10;&#10;Las geometr&#237;as de la capa de entrada pueden ser tanto de puntos, como de l&#237;neas o pol&#237;gonos. Se pueden generar varios anillos conc&#233;ntricos equidistantes en torno a las geometr&#237;as de entrada. Adem&#225;s, en el caso de geometr&#237;as de entrada poligonales el &#225;rea de influencia puede ser exterior, interior o exterior e interior al pol&#237;gono original.&#10;&#10;Este Geoproceso puede ser de gran utilidad para la realizaci&#243;n de an&#225;lisis de corredor. Por ejemplo:&#10;&lt;UL&gt;&#10;&lt;LI&gt;Qu&#233; zonas urbanos no tienen una parada de autobuses en un radio de 500 m.&lt;/LI&gt;&#10;&lt;LI&gt;Qu&#233; zonas urbanas carecen de colegios en un radio de 1000 m.&lt;/LI&gt;&#10;&lt;LI&gt;Qu&#233; pozos incumplen la normativa al no respetar la distancia m&#237;nima entre dos consecutivos.&lt;/LI&gt;&#10;&lt;/UL&gt;&#10;Etc. &#10; Nota: Las distancias del buffer hay que definirlas en metros. En caso de que el sistema de referencia no sea proyectado esta distancia se calcula a la altura del ecuador. El usuario deber? considerar la desviaci?n o bien convertir la cartograf?a a un sistema de referencia en metros. "
30
		description="Descripci&#243;n" type="0">
31
		<image description="" file="bufferdesc.png">
32
		</image>
33
	</element>
34
	<element name="ADDITIONAL_INFO" text=""
35
		description="Informaci&#243;n adicional" type="0">
36
	</element>
37
	<element name="EXTENSION_AUTHOR" text="Nacho Brodin"
38
		description="Algoritmo creado por" type="0">
39
	</element>
40
	<element name="HELP_AUTHOR" text="" description="Ayuda creada por"
41
		type="0">
42
	</element>
43
	<element name="USER_NOTES" text="" description="Notas de usuario"
44
		type="0">
45
	</element>
46
	<element name="LAYER" text="" description="Capa de entrada"
47
		type="3">
48
	</element>
49
	<element name="SELECTED_GEOM" text="" description="Geometrias seleccionadas"
50
		type="3">
51
	</element>
52
	<element name="DISTANCE" text="" description="Distancia" type="3">
53
	</element>
54
	<element name="FIELD" text="" description="Campo" type="3">
55
	</element>
56
	<element name="ROUND_BORDER" text="" description="Borde redondeado"
57
		type="3">
58
	</element>
59
	<element name="AREA" text="" description="Areas de influencia"
60
		type="3">
61
	</element>
62
	<element name="RING_NUMBER" text="" description="N&#250;mero de anillos"
63
		type="3">
64
	</element>
65
	<element name="OUTPUT_DESCRIPTION" text="" description="Descripci&#243;n"
66
		type="2">
67
	</element>
68
	<element name="RESULT" text="" description="Buffer" type="2">
69
	</element>
70
</help>
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/resources/help/BufferAlgorithm_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"
29
		text="This geoprocess creates a new polygon layer, with polygon buffers of the geometries of the input layer.&#10;&#10;Input layer geometries could have any geometry type (point, line or polygon). For each input geometry, you could create one or many equidistant polygon buffer rings. Also, if input geometry type is polygon, the buffer could be internal, external or both. &#10; Note: The buffer distance has to be defined in meters. If the reference system is not projected, this distance is calculated in the Ecuador. The user should be consider the deviation, or convert the cartography into a reference system in meters."
30
		description="Descripci&#243;n" type="0">
31
		<image description="" file="bufferdesc.png">
32
		</image>
33
	</element>
34
	<element name="ADDITIONAL_INFO" text=""
35
		description="Informaci&#243;n adicional" type="0">
36
	</element>
37
	<element name="EXTENSION_AUTHOR" text="Nacho Brodin"
38
		description="Algoritmo creado por" type="0">
39
	</element>
40
	<element name="HELP_AUTHOR" text="" description="Ayuda creada por"
41
		type="0">
42
	</element>
43
	<element name="USER_NOTES" text="" description="Notas de usuario"
44
		type="0">
45
	</element>
46
	<element name="LAYER" text="" description="Capa de entrada"
47
		type="3">
48
	</element>
49
	<element name="SELECTED_GEOM" text="" description="Geometrias seleccionadas"
50
		type="3">
51
	</element>
52
	<element name="DISTANCE" text="" description="Distancia" type="3">
53
	</element>
54
	<element name="FIELD" text="" description="Campo" type="3">
55
	</element>
56
	<element name="ROUND_BORDER" text="" description="Borde redondeado"
57
		type="3">
58
	</element>
59
	<element name="AREA" text="" description="Areas de influencia"
60
		type="3">
61
	</element>
62
	<element name="RING_NUMBER" text="" description="N&#250;mero de anillos"
63
		type="3">
64
	</element>
65
	<element name="OUTPUT_DESCRIPTION" text="" description="Descripci&#243;n"
66
		type="2">
67
	</element>
68
	<element name="RESULT" text="" description="Buffer" type="2">
69
	</element>
70
</help>
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.geoprocess.algorithm.buffer.BufferLibrary
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/java/org/gvsig/geoprocess/algorithm/buffer/InOutBufferOperation.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.util.ArrayList;
27
import java.util.List;
28
import java.util.Stack;
29

  
30
import org.gvsig.fmap.dal.exception.DataException;
31
import org.gvsig.fmap.dal.feature.EditableFeature;
32
import org.gvsig.fmap.dal.feature.Feature;
33
import org.gvsig.fmap.dal.feature.FeatureStore;
34
import org.gvsig.fmap.geom.exception.CreateGeometryException;
35
import org.gvsig.geoprocess.algorithm.base.util.GeometryUtil;
36
import org.gvsig.geoprocess.algorithm.base.util.JTSFacade;
37
import org.gvsig.geoprocess.lib.sextante.AbstractSextanteGeoProcess;
38

  
39
import com.vividsolutions.jts.geom.Geometry;
40
import com.vividsolutions.jts.geom.GeometryCollection;
41
import com.vividsolutions.jts.geom.GeometryFactory;
42
import com.vividsolutions.jts.geom.MultiPolygon;
43
import com.vividsolutions.jts.geom.Polygon;
44
import com.vividsolutions.jts.operation.buffer.BufferOp;
45
import com.vividsolutions.jts.operation.buffer.BufferParameters;
46
import com.vividsolutions.jts.simplify.TopologyPreservingSimplifier;
47

  
48
import es.unex.sextante.core.Sextante;
49

  
50
/**
51
 * Buffer operation
52
 * 
53
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
54
 */
55
public class InOutBufferOperation extends BufferOperation {
56

  
57
    /**
58
     * Builds an instance of this operation.
59
     * 
60
     * @param distance
61
     * @param layer
62
     * @param userDistance
63
     */
64
    public InOutBufferOperation(IDistance distance, 
65
    	FeatureStore inputStore,
66
        AbstractSextanteGeoProcess p, 
67
        byte tableFields) {
68
        super(distance, inputStore, p, tableFields);
69
    }
70

  
71
    public EditableFeature invoke(org.gvsig.fmap.geom.Geometry g,
72
        Feature feature) {
73
        GeometryFactory geomFact = new GeometryFactory();
74
        Geometry newGeom = null;
75
        Geometry previousExteriorRing = null;
76
        Geometry previousInteriorRing = null;
77
        Geometry originalGeometry = GeometryUtil.geomToJTS(g);
78
        Geometry inputParam = originalGeometry;
79
        distance.setFeature(feature);
80
        double bufferDistance =
81
            distance.getBufferDistance(projection,
82
                getDistanceUnits(), getMapUnits());
83

  
84
        if (originalGeometry.getDimension() != 0)
85
            inputParam =
86
                TopologyPreservingSimplifier.simplify(originalGeometry,
87
                    bufferDistance / 10d);
88

  
89
        for (int i = 1; i <= numberOfRadialBuffers; i++) {
90
            double distRing = i * bufferDistance;
91
            BufferOp bufOp = new BufferOp(inputParam);
92
            bufOp.setEndCapStyle(capBuffer == CAP_ROUND
93
                ? BufferParameters.CAP_ROUND : BufferParameters.CAP_SQUARE);
94
            Geometry out = bufOp.getResultGeometry(distRing);
95
            Geometry in = bufOp.getResultGeometry(-1 * distRing);
96
            boolean collapsedInterior = verifyNilGeometry(in);
97
            if (previousExteriorRing == null || previousInteriorRing == null) {
98
                if (collapsedInterior)
99
                    newGeom = out;
100
                else
101
                    newGeom = JTSFacade.difference(out, in);
102
            } else {
103
                if (collapsedInterior)
104
                    newGeom = JTSFacade.difference(out, previousExteriorRing);
105
                else {
106
                    Geometry outRing =
107
                        JTSFacade.difference(out, previousExteriorRing);
108
                    Geometry inRing =
109
                        JTSFacade.difference(previousInteriorRing, in);
110

  
111
                    Geometry[] geomArray = new Geometry[] { outRing, inRing };
112
                    newGeom = geomFact.createGeometryCollection(geomArray);
113

  
114
                    // FMap doesnt work with GeometryCollection, so we try to
115
                    // pass to a MultiPolygon.
116
                    List<Geometry> polygons = new ArrayList<Geometry>();
117
                    Stack<Geometry> stack = new Stack<Geometry>();
118
                    stack.push(newGeom);
119
                    while (stack.size() != 0) {
120
                        GeometryCollection geCol =
121
                            (GeometryCollection) stack.pop();
122

  
123
                        for (int j = 0; j < geCol.getNumGeometries(); j++) {
124
                            Geometry geometry = geCol.getGeometryN(j);
125
                            if (geometry instanceof GeometryCollection)
126
                                stack.push(geometry);
127
                            if (geometry instanceof Polygon)
128
                                polygons.add(geometry);
129
                        }
130
                    }
131

  
132
                    Polygon[] pols = new Polygon[polygons.size()];
133
                    pols = polygons.toArray(pols);
134
                    MultiPolygon newSolution =
135
                        geomFact.createMultiPolygon(pols);
136
                    newGeom = newSolution;
137
                }
138
            }
139
            try {
140
            	if (newGeom != null && !newGeom.isEmpty()) {
141
            		if(getTableFieldStructure() == BufferAlgorithm.SOURCE_FIELDS)
142
            			lastEditFeature = persister.addFeature(feature, newGeom);
143
            		else
144
            			lastEditFeature = persister.addFeature(newGeom, id, -1 * distRing, distRing);
145
            		id++;
146
            	}
147
            } catch (CreateGeometryException e) {
148
                Sextante.addErrorToLog(e);
149
            } catch (DataException e) {
150
                Sextante.addErrorToLog(e);
151
            }
152
            previousExteriorRing = out;
153
            if (!collapsedInterior)
154
                previousInteriorRing = in;
155
        }
156
        return lastEditFeature;
157
    }
158

  
159
    /*
160
     * (non-Javadoc)
161
     * 
162
     * @see
163
     * org.gvsig.geoprocess.algorithm.base.core.GeometryOperation#invoke(org
164
     * .gvsig.fmap.geom.Geometry, org.gvsig.fmap.dal.feature.EditableFeature)
165
     */
166
    public void invoke(org.gvsig.fmap.geom.Geometry g, EditableFeature feature) {
167
        invoke(g, (Feature) feature);
168
    }
169
}
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.7/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/java/org/gvsig/geoprocess/algorithm/buffer/BufferOperation.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.andami.PluginServices;
28
import org.gvsig.andami.ui.mdiManager.IWindow;
29
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
30
import org.gvsig.fmap.dal.exception.DataException;
31
import org.gvsig.fmap.dal.feature.EditableFeature;
32
import org.gvsig.fmap.dal.feature.Feature;
33
import org.gvsig.fmap.dal.feature.FeatureStore;
34
import org.gvsig.fmap.geom.exception.CreateGeometryException;
35
import org.gvsig.geoprocess.algorithm.base.core.GeometryOperation;
36
import org.gvsig.geoprocess.algorithm.base.util.GeometryUtil;
37
import org.gvsig.geoprocess.lib.sextante.AbstractSextanteGeoProcess;
38

  
39
import com.vividsolutions.jts.geom.Geometry;
40
import com.vividsolutions.jts.geom.GeometryCollection;
41

  
42
/**
43
 * Buffer operation
44
 * 
45
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
46
 */
47
public abstract class BufferOperation extends GeometryOperation {
48

  
49
    public static final byte CAP_SQUARE         = 0;
50
    public static final byte CAP_ROUND          = 1;
51
    
52
    protected byte capBuffer                    = CAP_ROUND;
53
    protected int numberOfRadialBuffers         = 1;
54
    protected IDistance distance                = null;
55
    protected int id                            = 0;
56
    protected IProjection projection            = null;
57
    protected byte tableFieldStructure          = BufferAlgorithm.SOURCE_FIELDS; 
58

  
59
    public BufferOperation(IDistance distance, 
60
    	FeatureStore inputStore,
61
        AbstractSextanteGeoProcess p,
62
        byte tableFieldStructure) {
63
    	super(p);
64
        this.distance = distance;
65
        try {
66
			this.projection = (IProjection) inputStore.getDefaultFeatureType().getDefaultSRS();
67
		} catch (DataException e) {
68
		}
69
        this.tableFieldStructure = tableFieldStructure;
70
    }
71

  
72
    /**
73
     * Verifys if a geometry buffer is null.
74
     * It is useful when you're working with internal buffers. If the internal
75
     * buffer distance is greater than the geometry radius, the buffer result
76
     * will be null.
77
     * 
78
     * @param newGeometry
79
     * @return
80
     */
81
    protected boolean verifyNilGeometry(Geometry newGeometry) {
82
        if (newGeometry instanceof GeometryCollection) {
83
            if (((GeometryCollection) newGeometry).getNumGeometries() == 0) {
84
                // we have collapsed initial geometry
85
                return true;
86
            }
87
        }
88
        return false;
89
    }
90

  
91
    /**
92
     * Adds a new feature
93
     * 
94
     * @param feature
95
     * @param newGeom
96
     * @throws CreateGeometryException
97
     * @throws DataException
98
     * @deprecated No es necesario porque no hay diferencia entre las llamadas
99
     *             entre ambos invoke
100
     */
101
    protected void addFeature(Feature feature, Geometry newGeom)
102
        throws CreateGeometryException, DataException {
103
        if (!(feature instanceof EditableFeature))
104
            lastEditFeature = persister.addFeature(feature, newGeom);
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff