Revision 32916 trunk/extensions/extGeoProcessing/src/com/iver/cit/gvsig/geoprocess/impl/buffer/fmap/BufferVisitor.java

View differences:

BufferVisitor.java
94 94
import java.util.ArrayList;
95 95
import java.util.Stack;
96 96

  
97
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
97 98
import com.hardcode.gdbms.engine.values.Value;
98 99
import com.hardcode.gdbms.engine.values.ValueFactory;
99 100
import com.iver.cit.gvsig.exceptions.visitors.ProcessVisitorException;
101
import com.iver.cit.gvsig.exceptions.visitors.StartVisitorException;
100 102
import com.iver.cit.gvsig.exceptions.visitors.VisitorException;
101 103
import com.iver.cit.gvsig.fmap.core.IFeature;
102 104
import com.iver.cit.gvsig.fmap.core.IGeometry;
103 105
import com.iver.cit.gvsig.fmap.core.v02.FConverter;
106
import com.iver.cit.gvsig.fmap.layers.FLayer;
107
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
108
import com.iver.cit.gvsig.fmap.layers.layerOperations.AlphanumericData;
109
import com.iver.cit.gvsig.fmap.layers.layerOperations.VectorialData;
104 110
import com.iver.cit.gvsig.fmap.operations.strategies.FeatureVisitor;
105 111
import com.iver.cit.gvsig.geoprocess.core.fmap.FeatureFactory;
106 112
import com.iver.cit.gvsig.geoprocess.core.fmap.GeoprocessingResultsProcessor;
......
183 189
	 */
184 190
	private boolean simplifyGeometry = true;
185 191

  
192
	private boolean dissolveBuffers;
186 193

  
194
	protected SelectableDataSource recordset;
195

  
196

  
187 197
	public void setSimplifyGeometry(boolean simplify){
188 198
		this.simplifyGeometry = simplify;
189 199
	}
190

  
200
	
201
	public boolean isSimplifyGeometry(){
202
		return this.simplifyGeometry;
203
	}
204
	
191 205
	/**
192 206
	 * Sets type of buffer flag
193 207
	 * @param typeOfBuffer
......
317 331
						solution = newGeometry;
318 332
					}
319 333
					numProcessed++;
320
					IFeature feature = createFeature(solution, distRing);
334
					IFeature feature=null;
335
					try {
336
						feature = createFeature(solution, distRing, index);
337
					} catch (ReadDriverException e) {
338
						e.printStackTrace();
339
					}
321 340
					resultsProcessor.processFeature(feature);
322 341
					previousInteriorRing = newGeometry;
323 342
				}
......
334 353
					solution = newGeometry;
335 354
				}
336 355
				numProcessed++;
337
				IFeature feature = createFeature(solution, distRing);
356
				IFeature feature=null;
357
				try {
358
					feature = createFeature(solution, distRing, index);
359
				} catch (ReadDriverException e) {
360
					e.printStackTrace();
361
				}
338 362
				resultsProcessor.processFeature(feature);
339 363
				previousExteriorRing = newGeometry;
340 364
			}
......
389 413
					}
390 414
				}//else
391 415
				numProcessed++;
392
				IFeature feature = createFeature(solution, -1 * distRing, distRing);
416
				IFeature feature=null;
417
				try {
418
					feature = createFeature(solution, -1 * distRing, distRing, index);
419
				} catch (ReadDriverException e) {
420
					e.printStackTrace();
421
				}
393 422
				resultsProcessor.processFeature(feature);
394 423
				previousExteriorRing = out;
395 424
				if(!collapsedInterior)
......
407 436
	 * @param jtsGeo
408 437
	 * @param distance
409 438
	 * @return
439
	 * @throws ReadDriverException 
410 440
	 */
411
	protected IFeature createFeature(Geometry jtsGeo, double distance){
441
	protected IFeature createFeature(Geometry jtsGeo, double distance, int index) throws ReadDriverException{
412 442
		IGeometry iGeo = FConverter.jts_to_igeometry(jtsGeo);
413
		Value[] values = new Value[2];
414
		values[0] = ValueFactory.createValue(numProcessed);
415
		values[1] = ValueFactory.createValue(distance);
443
		Value[] values = null;
444
		if (!dissolveBuffers){
445
			int fieldCount = recordset.getFieldCount();
446
			values=new Value[fieldCount];
447
			for (int i = 0; i < fieldCount; i++) {
448
				values[i]=recordset.getFieldValue(index, i);
449
			}
450
		}else{
451
			values = new Value[2];
452
			values[0] = ValueFactory.createValue(numProcessed);
453
			values[1] = ValueFactory.createValue(distance);
454
		}
416 455
		return FeatureFactory.createFeature(values, iGeo);
417 456
	}
418 457

  
......
423 462
	 * @param jtsGeo
424 463
	 * @param distance
425 464
	 * @return
465
	 * @throws ReadDriverException 
426 466
	 */
427
	protected IFeature createFeature(Geometry jtsGeo, double distanceFrom, double distanceTo){
467
	protected IFeature createFeature(Geometry jtsGeo, double distanceFrom, double distanceTo, int index) throws ReadDriverException{
428 468
		IGeometry iGeo = FConverter.jts_to_igeometry(jtsGeo);
429
		Value[] values = new Value[3];
430
		values[0] = ValueFactory.createValue(numProcessed);
431
		values[1] = ValueFactory.createValue(distanceFrom);
432
		values[2] = ValueFactory.createValue(distanceTo);
469
		Value[] values = null;
470
		if (!dissolveBuffers){
471
			int fieldCount = recordset.getFieldCount();
472
			values=new Value[fieldCount];
473
			for (int i = 0; i < fieldCount; i++) {
474
				values[i]=recordset.getFieldValue(index, i);
475
			}
476
		}else{
477
			values = new Value[3];
478
			values[0] = ValueFactory.createValue(numProcessed);
479
			values[1] = ValueFactory.createValue(distanceFrom);
480
			values[2] = ValueFactory.createValue(distanceTo);
481
		}
482
		
433 483
		return FeatureFactory.createFeature(values, iGeo);
434 484
	}
435 485

  
......
461 511
		return typeOfBuffer;
462 512
	}
463 513

  
514
	public void setIsDissolve(boolean dissolveBuffers) {
515
		this.dissolveBuffers=dissolveBuffers;
516
	}
517
	public boolean start(FLayer layer) throws StartVisitorException {
518
		if(layer instanceof VectorialData && layer instanceof AlphanumericData){
519
			try {
520
				this.recordset = ((AlphanumericData)layer).getRecordset();
521
			} catch (ReadDriverException e) {
522
				return false;
523
			}
524
			return true;
525
		}
526
		return false;
527
	}
528

  
464 529
}
465 530

  

Also available in: Unified diff