Revision 37 org.gvsig.sextante/trunk/org.gvsig.sextante.app/org.gvsig.sextante.app.algorithm/org.gvsig.sextante.app.algorithm.dissolve/src/main/java/org/gvsig/sextante/app/algorithm/dissolve/AtomicDissolveOperation.java
AtomicDissolveOperation.java | ||
---|---|---|
30 | 30 |
import org.gvsig.fmap.dal.feature.DisposableIterator; |
31 | 31 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
32 | 32 |
import org.gvsig.fmap.dal.feature.Feature; |
33 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
|
34 | 33 |
import org.gvsig.fmap.dal.feature.FeatureSet; |
35 | 34 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
36 | 35 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureSelection; |
... | ... | |
45 | 44 |
* @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a> |
46 | 45 |
*/ |
47 | 46 |
public class AtomicDissolveOperation extends GeometryOperation { |
48 |
private IDissolveCriteria criteria = null;
|
|
47 |
private IDissolveRule rule = null;
|
|
49 | 48 |
private ArrayList<Geometry> geometryList = null; |
50 | 49 |
private Feature feature = null; |
51 | 50 |
private EditableFeature result = null; |
52 | 51 |
private boolean[] analizedFeats = null; |
53 | 52 |
private FeatureStore outFeatureStore = null; |
54 | 53 |
private int featAnalized = 0; |
55 |
private double max = 0; |
|
56 |
private double min = 0; |
|
57 |
private double avg = 0; |
|
58 |
private double sum = 0; |
|
54 |
private int newFeatID = 0; |
|
55 |
private Summary summary = null; |
|
59 | 56 |
|
60 | 57 |
/** |
61 | 58 |
* Sets IDissolveCriteria. This object will choose what geometry |
62 | 59 |
* will be dissolved |
63 | 60 |
* @param criteria |
64 | 61 |
*/ |
65 |
public void setCriteria(IDissolveCriteria criteria) {
|
|
66 |
this.criteria = criteria;
|
|
62 |
public void setCriteria(IDissolveRule rule) {
|
|
63 |
this.rule = rule;
|
|
67 | 64 |
} |
68 | 65 |
|
69 | 66 |
/** |
... | ... | |
117 | 114 |
if(g1 == null) |
118 | 115 |
return null; |
119 | 116 |
|
120 |
com.vividsolutions.jts.geom.Geometry g2 = geomToJTS(g); |
|
117 |
com.vividsolutions.jts.geom.Geometry g2 = GeometryUtil.geomToJTS(g);
|
|
121 | 118 |
|
122 | 119 |
//Si son iguales las geometrias no se opera |
123 | 120 |
if(g1.compareTo(g2) == 0) |
124 | 121 |
return null; |
125 | 122 |
|
126 |
if(criteria.verifyIfDissolve(g1, g2, this.feature, feature)) {
|
|
123 |
if(rule.verifyIfDissolve(g1, g2, this.feature, feature)) {
|
|
127 | 124 |
geometryList.add(g2); |
128 | 125 |
Geometry newGeom = GeometryUtil.geometryUnion(geometryList, g.getGeometryType().getType()); |
129 | 126 |
try { |
130 | 127 |
result = outFeatureStore.createNewFeature(); |
131 |
FeatureAttributeDescriptor[] desc = outFeatureStore.getDefaultFeatureType().getAttributeDescriptors();
|
|
132 |
/*for (int i = 0; i < desc.length; i++) {
|
|
133 |
if(desc[i].getName().compareTo("Max") == 0)
|
|
134 |
|
|
135 |
}*/ |
|
136 |
result.setGeometry("GEOMETRY", jtsToGeom(newGeom)); |
|
128 |
result.setDouble(0, newFeatID);
|
|
129 |
result.set(1, feature.get(rule.getIndexField()));
|
|
130 |
summary.updateValues(feature);
|
|
131 |
summary.loadEditableFeature(result); |
|
132 |
|
|
133 |
result.setGeometry("GEOMETRY", GeometryUtil.jtsToGeom(newGeom));
|
|
137 | 134 |
geometryList.clear(); |
138 | 135 |
geometryList.add(newGeom); |
139 | 136 |
analizedFeats[featAnalized] = true; |
... | ... | |
156 | 153 |
* @see org.gvsig.sextante.app.algorithm.base.core.IOperation#getResult() |
157 | 154 |
*/ |
158 | 155 |
public Object getResult() { |
156 |
newFeatID ++; |
|
159 | 157 |
return result; |
160 | 158 |
} |
161 | 159 |
|
... | ... | |
171 | 169 |
featuresSet = inFeatureStore.getFeatureSet(); |
172 | 170 |
result = null; |
173 | 171 |
DisposableIterator it = null; |
172 |
|
|
173 |
summary = new Summary(rule, outFeatureStore.getDefaultFeatureType()); |
|
174 |
summary.loadDefaultSummarizes(this.feature); |
|
174 | 175 |
|
175 | 176 |
if(selectedGeom) { |
176 | 177 |
DataSet ds = inFeatureStore.getSelection(); |
... | ... | |
209 | 210 |
try { |
210 | 211 |
Geometry newGeom = GeometryUtil.geometryUnion(geometryList, feature.getDefaultGeometry().getGeometryType().getType()); |
211 | 212 |
result = outFeatureStore.createNewFeature(); |
212 |
result.setGeometry("GEOMETRY", jtsToGeom(newGeom)); |
|
213 |
result.setDouble(0, newFeatID); |
|
214 |
result.set(1, feature.get(rule.getIndexField())); |
|
215 |
summary.updateValues(feature); |
|
216 |
summary.loadEditableFeature(result); |
|
217 |
result.setGeometry("GEOMETRY", GeometryUtil.jtsToGeom(newGeom)); |
|
213 | 218 |
} catch (DataException e) { |
214 | 219 |
Sextante.addErrorToLog(e); |
215 | 220 |
} |
Also available in: Unified diff