Revision 1780
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.225/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.225/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.225/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ígonos, generados como zonas de influencia alrededor de las geometrías de los elementos vectoriales de una capa de entrada. Las geometrías de la capa de entrada pueden ser tanto de puntos, como de líneas o polígonos. Se pueden generar varios anillos concéntricos equidistantes en torno a las geometrías de entrada. Además, en el caso de geometrías de entrada poligonales el área de influencia puede ser exterior, interior o exterior e interior al polígono original. Este Geoproceso puede ser de gran utilidad para la realización de análisis de corredor. Por ejemplo: <UL> <LI>Qué zonas urbanos no tienen una parada de autobuses en un radio de 500 m.</LI> <LI>Qué zonas urbanas carecen de colegios en un radio de 1000 m.</LI> <LI>Qué pozos incumplen la normativa al no respetar la distancia mínima entre dos consecutivos.</LI> </UL> Etc. 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ón" type="0"> |
|
31 |
<image description="" file="bufferdesc.png"> |
|
32 |
</image> |
|
33 |
</element> |
|
34 |
<element name="ADDITIONAL_INFO" text="" |
|
35 |
description="Informació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úmero de anillos" |
|
63 |
type="3"> |
|
64 |
</element> |
|
65 |
<element name="OUTPUT_DESCRIPTION" text="" description="Descripció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.225/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. 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. 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ón" type="0"> |
|
31 |
<image description="" file="bufferdesc.png"> |
|
32 |
</image> |
|
33 |
</element> |
|
34 |
<element name="ADDITIONAL_INFO" text="" |
|
35 |
description="Informació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úmero de anillos" |
|
63 |
type="3"> |
|
64 |
</element> |
|
65 |
<element name="OUTPUT_DESCRIPTION" text="" description="Descripció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.225/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.225/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.225/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); |
|
105 |
else { |
|
106 |
org.gvsig.fmap.geom.Geometry g = GeometryUtil.jtsToGeom(newGeom); |
|
107 |
persister |
|
108 |
.addGeometryToExistingFeature((EditableFeature) feature, g); |
|
109 |
} |
|
110 |
} |
|
111 |
|
|
112 |
/** |
|
113 |
* Sets type of cap flag |
|
114 |
* |
|
115 |
* @param typeOfCap |
|
116 |
*/ |
|
117 |
public void setTypeOfCap(byte typeOfCap) { |
|
118 |
capBuffer = typeOfCap; |
|
119 |
} |
|
120 |
|
|
121 |
/** |
|
122 |
* Sets number of radial rings buffers |
|
123 |
* |
|
124 |
* @param number |
|
125 |
*/ |
|
126 |
public void setNumberOfRadialBuffers(int number) { |
|
127 |
numberOfRadialBuffers = number; |
|
128 |
} |
|
129 |
|
|
130 |
/** |
|
131 |
* <p> |
|
132 |
* Gets the measurement unit used by this view port for the map. |
|
133 |
* </p> |
|
134 |
* |
|
135 |
* @return Returns the current map measure unit |
|
136 |
*/ |
|
137 |
protected int getMapUnits() { |
|
138 |
IWindow w = PluginServices.getMDIManager().getActiveWindow(); |
|
139 |
if (!(w instanceof AbstractViewPanel)) { |
|
140 |
IWindow[] wList = PluginServices.getMDIManager().getAllWindows(); |
|
141 |
for (int i = 0; i < wList.length; i++) { |
|
142 |
if (wList[i] instanceof AbstractViewPanel) |
|
143 |
w = (IWindow) wList[i]; |
|
144 |
} |
|
145 |
} |
|
146 |
|
|
147 |
if (w != null && w instanceof AbstractViewPanel) { |
|
148 |
IProjection proj = |
|
149 |
((AbstractViewPanel) w).getMapControl().getViewPort() |
|
150 |
.getProjection(); |
|
151 |
if (proj.isProjected()) |
|
152 |
return ((AbstractViewPanel) w).getMapControl().getViewPort() |
|
153 |
.getMapUnits(); |
|
154 |
} |
|
155 |
return 1; |
|
156 |
} |
|
157 |
|
|
158 |
/** |
|
159 |
* <p> |
|
160 |
* Returns the measurement unit of this view port used for measuring |
|
161 |
* distances and displaying information. |
|
162 |
* </p> |
|
163 |
* |
|
164 |
* @return the measurement unit of this view used for measuring distances |
|
165 |
* and displaying information |
|
166 |
*/ |
|
167 |
protected int getDistanceUnits() { |
|
168 |
IWindow w = PluginServices.getMDIManager().getActiveWindow(); |
|
169 |
if (!(w instanceof AbstractViewPanel)) { |
|
170 |
IWindow[] wList = PluginServices.getMDIManager().getAllWindows(); |
|
171 |
for (int i = 0; i < wList.length; i++) { |
|
172 |
if (wList[i] instanceof AbstractViewPanel) |
|
173 |
w = (IWindow) wList[i]; |
|
174 |
} |
|
175 |
} |
|
176 |
|
|
177 |
if (w != null && w instanceof AbstractViewPanel) |
|
178 |
return ((AbstractViewPanel) w).getMapControl().getViewPort() |
|
179 |
.getDistanceUnits(); |
|
180 |
else |
|
181 |
return 1; |
|
182 |
} |
|
183 |
|
|
184 |
public byte getTableFieldStructure() { |
|
185 |
return tableFieldStructure; |
|
186 |
} |
|
187 |
|
|
188 |
public IDistance getDistance() { |
|
189 |
return distance; |
|
190 |
} |
|
191 |
} |
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.225/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.225/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.225/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 |
|
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.gvsig.geoprocess.algorithm.base.core.AlgorithmAbstractLibrary; |
|
27 |
import org.gvsig.i18n.Messages; |
|
28 |
import org.gvsig.tools.library.LibraryException; |
|
29 |
|
|
30 |
/** |
|
31 |
* Initialization of BufferLibrary library. |
|
32 |
* |
|
33 |
* @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a> |
|
34 |
* @author gvSIG Team |
|
35 |
*/ |
|
36 |
public class BufferLibrary extends AlgorithmAbstractLibrary { |
|
37 |
|
|
38 |
@Override |
|
39 |
protected void doInitialize() throws LibraryException { |
|
40 |
// Nothing to do |
|
41 |
} |
|
42 |
|
|
43 |
@Override |
|
44 |
protected void doPostInitialize() throws LibraryException { |
|
45 |
Messages.addResourceFamily( |
|
46 |
"org.gvsig.geoprocess.algorithm.buffer.buffer", BufferLibrary.class |
|
47 |
.getClassLoader(), BufferLibrary.class.getClass().getName()); |
|
48 |
registerGeoProcess(new BufferAlgorithm()); |
|
49 |
} |
|
50 |
|
|
51 |
} |
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.225/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/java/org/gvsig/geoprocess/algorithm/buffer/FieldDistance.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 |
|
|
28 |
/** |
|
29 |
* Computes a constant size of each geometry built |
|
30 |
* |
|
31 |
* @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a> |
|
32 |
*/ |
|
33 |
public class FieldDistance extends AbstractDistance { |
|
34 |
|
|
35 |
private String attributeName = null; |
|
36 |
|
|
37 |
public FieldDistance(String attributeName) { |
|
38 |
this.attributeName = attributeName; |
|
39 |
} |
|
40 |
|
|
41 |
public double getBufferDistance(IProjection projection, int distanceUnits, int mapUnits) { |
|
42 |
double value = 0D; |
|
43 |
Object obj; |
|
44 |
obj = feature.get(attributeName); |
|
45 |
if (obj instanceof Number) { |
|
46 |
value = ((Number) obj).doubleValue(); |
|
47 |
} else { |
|
48 |
return 0; |
|
49 |
} |
|
50 |
return getInInternalUnits(value, projection, distanceUnits, mapUnits) * numberOfRings; |
|
51 |
} |
|
52 |
|
|
53 |
} |
org.gvsig.geoprocess/tags/org.gvsig.geoprocess-2.2.225/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.buffer/src/main/java/org/gvsig/geoprocess/algorithm/buffer/BufferAlgorithm.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.io.File; |
|
27 |
|
|
28 |
import javax.swing.JOptionPane; |
|
29 |
|
|
30 |
import org.cresques.cts.IProjection; |
|
31 |
import org.gvsig.fmap.dal.DALLocator; |
|
32 |
import org.gvsig.fmap.dal.DataManager; |
|
33 |
import org.gvsig.fmap.dal.DataStoreParameters; |
|
34 |
import org.gvsig.fmap.dal.DataTypes; |
|
35 |
import org.gvsig.fmap.dal.exception.DataException; |
|
36 |
import org.gvsig.fmap.dal.exception.InitializeException; |
|
37 |
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException; |
|
38 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
|
39 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
|
40 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
|
41 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
|
42 |
import org.gvsig.fmap.dal.feature.FeatureType; |
|
43 |
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters; |
|
44 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer; |
|
45 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters; |
|
46 |
import org.gvsig.fmap.geom.Geometry; |
|
47 |
import org.gvsig.geoprocess.lib.api.GeoProcessLocator; |
|
48 |
import org.gvsig.geoprocess.lib.sextante.AbstractSextanteGeoProcess; |
|
49 |
import org.gvsig.geoprocess.lib.sextante.dataObjects.FlyrVectIVectorLayer; |
|
50 |
|
|
51 |
import es.unex.sextante.additionalInfo.AdditionalInfoNumericalValue; |
|
52 |
import es.unex.sextante.core.Sextante; |
|
53 |
import es.unex.sextante.dataObjects.IVectorLayer; |
|
54 |
import es.unex.sextante.exceptions.GeoAlgorithmExecutionException; |
|
55 |
import es.unex.sextante.exceptions.NullParameterValueException; |
|
56 |
import es.unex.sextante.exceptions.OptionalParentParameterException; |
|
57 |
import es.unex.sextante.exceptions.RepeatedParameterNameException; |
|
58 |
import es.unex.sextante.exceptions.UndefinedParentParameterNameException; |
|
59 |
import es.unex.sextante.exceptions.UnsupportedOutputChannelException; |
|
60 |
import es.unex.sextante.exceptions.WrongParameterIDException; |
|
61 |
import es.unex.sextante.exceptions.WrongParameterTypeException; |
|
62 |
import es.unex.sextante.gui.algorithm.GeoAlgorithmParametersPanel; |
|
63 |
import es.unex.sextante.outputs.OutputVectorLayer; |
|
64 |
|
|
65 |
/** |
|
66 |
* Geoprocess that computes a buffer area around each feature's geometry of the |
|
67 |
* input layer. <br> |
|
68 |
* All the points interior to this buffer area has to be at a distance inferior |
|
69 |
* to "buffer distance" to the original geometry. This buffer distance could be |
|
70 |
* constant, or it could be a function of the value of a feature attribute.<br> |
|
71 |
* |
|
72 |
* @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a> |
|
73 |
* @author gvSIG Team |
|
74 |
*/ |
|
75 |
public class BufferAlgorithm extends AbstractSextanteGeoProcess { |
|
76 |
|
|
77 |
public static final String RESULT = "RESULT"; |
|
78 |
public static final String LAYER = "LAYER"; |
|
79 |
public static final String SELECTED_GEOM = "SELECTED_GEOM"; |
|
80 |
public static final String DISTANCE = "DISTANCE"; |
|
81 |
public static final String FIELD = "FIELD"; |
|
82 |
public static final String DISSOLVE = "DISSOLVE"; |
|
83 |
public static final String ROUND_BORDER = "ROUND_BORDER"; |
|
84 |
public static final String AREA = "AREA"; |
|
85 |
public static final String RING_NUMBER = "RING_NUMBER"; |
|
86 |
|
|
87 |
/** |
|
88 |
* For polygonal buffers, only compute exterior buffers |
|
89 |
* (is the default operation, it applies to any geometry type) |
|
90 |
*/ |
|
91 |
public static final byte BUFFER_OUTSIDE_POLY = 0; |
|
92 |
/** |
|
93 |
* For polygonal buffers, only compute interior buffers |
|
94 |
*/ |
|
95 |
public static final byte BUFFER_INSIDE_POLY = 1; |
Also available in: Unified diff