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

View differences:

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