Revision 347 org.gvsig.geoprocess/trunk/org.gvsig.geoprocess/org.gvsig.geoprocess.algorithm/org.gvsig.geoprocess.algorithm.fusespatially/src/main/java/org/gvsig/geoprocess/algorithm/fusespatially/FuseSpatiallyOperationFast.java
FuseSpatiallyOperationFast.java | ||
---|---|---|
142 | 142 |
numberOfFeatures = (int)featuresSet.getSize(); |
143 | 143 |
} |
144 | 144 |
|
145 |
if (status != null && process != null) {
|
|
145 |
if (status != null)
|
|
146 | 146 |
status.setRangeOfValues(0, numberOfFeatures); |
147 |
if(process != null) |
|
147 | 148 |
process.setProgress(0, numberOfFeatures); |
148 |
} |
|
149 | 149 |
|
150 | 150 |
//Crear lista de elementos |
151 | 151 |
int iCount = 0; |
... | ... | |
155 | 155 |
el.feat = feat; |
156 | 156 |
el.id = iCount; |
157 | 157 |
featureList.add(el); |
158 |
if (status != null && process != null) {
|
|
158 |
if (status != null && process != null) |
|
159 | 159 |
status.setCurValue(iCount); |
160 |
if(process != null) |
|
160 | 161 |
process.setProgress(iCount, numberOfFeatures); |
161 |
} |
|
162 | 162 |
iCount ++; |
163 | 163 |
} |
164 | 164 |
it.dispose(); |
... | ... | |
168 | 168 |
while (iCount < featureList.size() && !process.getTaskMonitor().isCanceled()) { |
169 | 169 |
Element elem1 = featureList.get(iCount); |
170 | 170 |
org.gvsig.fmap.geom.Geometry geom1 = elem1.feat.getDefaultGeometry(); |
171 |
elem1.jtsGeom = GeometryUtil.geomToJTS(geom1); |
|
172 |
if (status != null && process != null) { |
|
171 |
if (status != null) |
|
173 | 172 |
status.setCurValue(iCount); |
173 |
if(process != null) |
|
174 | 174 |
process.setProgress(iCount, numberOfFeatures); |
175 |
} |
|
175 |
|
|
176 | 176 |
for (int i = iCount + 1; i < featureList.size(); i++) { |
177 | 177 |
Element elem2 = featureList.get(i); |
178 | 178 |
org.gvsig.fmap.geom.Geometry geom2 = elem2.feat.getDefaultGeometry(); |
179 |
elem2.jtsGeom = GeometryUtil.geomToJTS(geom2); |
|
180 |
if(elem1.jtsGeom.intersects(elem2.jtsGeom)) { |
|
181 |
elem1.overlapList.add(elem2); |
|
182 |
elem2.overlapList.add(elem1); |
|
179 |
if(areBBoxesOverlaping(geom1, geom2)) { |
|
180 |
if(elem1.jtsGeom == null) |
|
181 |
elem1.jtsGeom = GeometryUtil.geomToJTS(geom1); |
|
182 |
elem2.jtsGeom = GeometryUtil.geomToJTS(geom2); |
|
183 |
if(elem1.jtsGeom.intersects(elem2.jtsGeom)) { |
|
184 |
elem1.overlapList.add(elem2); |
|
185 |
elem2.overlapList.add(elem1); |
|
186 |
} |
|
183 | 187 |
} |
184 | 188 |
} |
185 | 189 |
iCount ++; |
... | ... | |
194 | 198 |
int iFeat = 0; |
195 | 199 |
while (iCount < featureList.size() && !process.getTaskMonitor().isCanceled()) { |
196 | 200 |
Element elem1 = featureList.get(iCount); |
197 |
if (status != null && process != null) {
|
|
201 |
if (status != null)
|
|
198 | 202 |
status.setCurValue(iCount); |
203 |
if(process != null) |
|
199 | 204 |
process.setProgress(iCount, numberOfFeatures); |
200 |
} |
|
205 |
|
|
201 | 206 |
if(!elem1.insertedToJoin) { |
202 | 207 |
elem1.insertedToJoin = true; |
203 | 208 |
listResult.clear(); |
... | ... | |
229 | 234 |
|
230 | 235 |
} |
231 | 236 |
|
237 |
private boolean areBBoxesOverlaping(org.gvsig.fmap.geom.Geometry g1, org.gvsig.fmap.geom.Geometry g2) { |
|
238 |
if(g1.getEnvelope().getMaximum(0) < g2.getEnvelope().getMinimum(0)) |
|
239 |
return false; |
|
240 |
if(g1.getEnvelope().getMinimum(0) > g2.getEnvelope().getMaximum(0)) |
|
241 |
return false; |
|
242 |
if(g1.getEnvelope().getMaximum(1) < g2.getEnvelope().getMinimum(1)) |
|
243 |
return false; |
|
244 |
if(g1.getEnvelope().getMinimum(1) > g2.getEnvelope().getMaximum(1)) |
|
245 |
return false; |
|
246 |
return true; |
|
247 |
} |
|
248 |
|
|
232 | 249 |
/** |
233 | 250 |
* Computes the union of the list of geometries |
234 | 251 |
* @param listResult |
Also available in: Unified diff