Revision 22548 trunk/extensions/extRemoteSensing/src/org/gvsig/remotesensing/mosaic/process/MosaicProcess.java

View differences:

MosaicProcess.java
58 58
import org.gvsig.raster.grid.Grid;
59 59
import org.gvsig.raster.grid.GridExtent;
60 60
import org.gvsig.raster.grid.OutOfGridException;
61
import org.gvsig.raster.util.RasterNotLoadException;
62 61
import org.gvsig.raster.util.RasterToolsUtil;
63 62

  
64 63
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
65 64
import com.iver.andami.PluginServices;
66 65
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException;
66
import com.iver.cit.gvsig.exceptions.layers.LoadLayerException;
67 67
import com.iver.cit.gvsig.fmap.layers.FLayers;
68 68
import com.iver.cit.gvsig.project.documents.view.gui.View;
69 69

  
......
77 77
public class MosaicProcess extends RasterProcess {
78 78

  
79 79
	// Layers que intervienen en el proceso
80
	private FLayers layers = null;
80
	private FLyrRasterSE inputRasterLayers[] = null;
81
	
82
	//Layer de salida
83
	private FLyrRasterSE outputRasterLayer = null;
81 84

  
82 85
	// Extend completo del mosaico
83 86
	private GridExtent fullExtend= null;
......
115 118
	 * */
116 119
	public void init() {
117 120
		
118
		layers= (FLayers)getParam("layers");
121
		inputRasterLayers= (FLyrRasterSE[])getParam("layers");
119 122
		codOp= getIntParam("codOp");
120 123
		numbands= getIntParam("numbands");
121 124
		fileName = getStringParam("filename");
122 125
		
123 126
		view = (View)getParam("vista");	
124 127
// 		Calculo del extend resultante
125
		fullExtend= calculateExtend(layers);
128
		fullExtend= calculateExtend(inputRasterLayers);
126 129
		
127 130
		int bands[]= new int[numbands];
128 131
		for(int i=0; i<numbands;i++)
......
141 144
	public void process() throws InterruptedException {
142 145
		
143 146
		// Parte de carga de los datos
144
		buffers= new RasterBuffer[layers.getLayersCount()];
147
		buffers= new RasterBuffer[inputRasterLayers.length];
145 148
		IRasterDataSource dsetCopy = null; 
146 149
		try {
147 150
		
......
151 154
			double maxY=  fullExtend.getMax().getY();
152 155
			// Se cargan todos los raster en los grid correspondientes
153 156
			percent=1;
154
			for(int i=0; i< layers.getLayersCount();i++)
157
			for(int i=0; i< inputRasterLayers.length;i++)
155 158
			{	
156
				dsetCopy = ((FLyrRasterSE)layers.getLayer(i)).getDataSource().newDataset();
159
				dsetCopy = ((FLyrRasterSE)inputRasterLayers[i]).getDataSource().newDataset();
157 160
				BufferFactory bufferFactory = new BufferFactory(dsetCopy);
158 161
				bufferFactory.setAdjustToExtent(false);
159 162
				if (!RasterBuffer.loadInMemory(dsetCopy))
......
162 165
				bufferFactory.setAllDrawableBands();
163 166
				bufferFactory.setAreaOfInterest(minX,minY,maxX,maxY,fullExtend.getNX(),fullExtend.getNY());
164 167
				buffers[i]= (RasterBuffer) bufferFactory.getRasterBuf();
165
				percent=(int)((i+1)*100/layers.getLayersCount());
168
				percent=(int)((i+1)*100/inputRasterLayers.length);
166 169

  
167 170
			
168 171
			}
......
263 266
		}
264 267
		
265 268
		// Se liberan los buffers
266
		for(int i=0; i<layers.getLayersCount();i++)
269
		for(int i=0; i<inputRasterLayers.length;i++)
267 270
			buffers[i].free();
268 271
		
269 272
		// Escritura en fichero
270 273
		proceso=2;
271
		writeToFile();
272

  
274
		createLayer();
275
		if (externalActions != null)
276
			externalActions.end(outputRasterLayer);
273 277
	}
274 278

  
275 279
	
......
410 414
	 * @return GridExtend del mosaico
411 415
	 * */
412 416
	
413
	private GridExtent calculateExtend (FLayers layers){
417
	private GridExtent calculateExtend (FLyrRasterSE layers[]){
414 418
		
415 419
		GridExtent result= null;
416 420
		IRasterDataSource dsetCopy = null; 
417 421
		double cellSize=0;
418 422
		double minX=0,maxX=0,minY=0,maxY=0;
419
		try {
423
		// Se obtiene el tama?o de celda mayor
424
		for(int i=0; i< layers.length;i++)
425
		{	
426
			dsetCopy = ((FLyrRasterSE)layers[i]).getDataSource().newDataset();
427
			BufferFactory bufferFactory = new BufferFactory(dsetCopy);
428
			bufferFactory.setAdjustToExtent(false);
429
			cellSize= Math.max(cellSize,bufferFactory.getDataSource().getCellSize());
430
		}
420 431
		
421
			// Se obtiene el tama?o de celda mayor
422
			for(int i=0; i< layers.getLayersCount();i++)
423
			{	
424
				dsetCopy = ((FLyrRasterSE)layers.getLayer(i)).getDataSource().newDataset();
425
				BufferFactory bufferFactory = new BufferFactory(dsetCopy);
426
				bufferFactory.setAdjustToExtent(false);
427
				cellSize= Math.max(cellSize,bufferFactory.getDataSource().getCellSize());
428
			}
432
		minX = layers[0].getFullExtent().getMinX();
433
		minY = layers[0].getFullExtent().getMinY();
434
		maxX = layers[0].getFullExtent().getMaxX();
435
		maxY = layers[0].getFullExtent().getMaxY();
436
		
437
		for(int i=1; i<layers.length;i++){
429 438
			
430
			minX = layers.getLayer(0).getFullExtent().getMinX();
431
			minY = layers.getLayer(0).getFullExtent().getMinY();
432
			maxX = layers.getLayer(0).getFullExtent().getMaxX();
433
			maxY = layers.getLayer(0).getFullExtent().getMaxY();
434
			
435
			for(int i=1; i<layers.getLayersCount();i++){
436
				
437
				minX= Math.min(minX,layers.getLayer(i).getFullExtent().getMinX());
438
				minY= Math.min(minY,layers.getLayer(i).getFullExtent().getMinY());
439
				maxX= Math.max(maxX,layers.getLayer(i).getFullExtent().getMaxX());
440
				maxY= Math.max(maxY,layers.getLayer(i).getFullExtent().getMaxY());
441
			}
442
			
443
		} catch (ExpansionFileReadException e) {
444
			e.printStackTrace();
445
		} catch (ReadDriverException e) {
446
			e.printStackTrace();
439
			minX= Math.min(minX,layers[i].getFullExtent().getMinX());
440
			minY= Math.min(minY,layers[i].getFullExtent().getMinY());
441
			maxX= Math.max(maxX,layers[i].getFullExtent().getMaxX());
442
			maxY= Math.max(maxY,layers[i].getFullExtent().getMaxY());
447 443
		}
448 444
		
449 445
		result = new GridExtent(minX,minY,maxX,maxY,cellSize);
......
453 449
	/**
454 450
	 * Escritura del resultado en disco y carga en la vista 
455 451
	 */
456
	public void writeToFile(){
452
	public void createLayer(){
457 453
		try{
458 454
			// Escritura de los datos a fichero temporal
459 455
			int endIndex = fileName.lastIndexOf(".");
......
464 460
			AffineTransform aTransform = new AffineTransform(fullExtend.getCellSize(),0.0,0.0,-fullExtend.getCellSize(),fullExtend.getMin().getX(),fullExtend.getMax().getY());
465 461
			grw = GeoRasterWriter.getWriter(writerBufferServer, fileName, mosaicGrid.getBandCount(),aTransform, mosaicGrid.getRasterBuf().getWidth(), mosaicGrid.getRasterBuf().getHeight(), mosaicGrid.getRasterBuf().getDataType(), GeoRasterWriter.getWriter(fileName).getParams(), null);
466 462
			grw.dataWrite();
467
			grw.setWkt((String)((FLyrRasterSE)layers.getLayer(0)).getWktProjection());
463
			grw.setWkt((String)((FLyrRasterSE)inputRasterLayers[0]).getWktProjection());
468 464
			grw.writeClose();
469 465
			mosaicGrid.getRasterBuf().free();
470
			RasterToolsUtil.loadLayer(PluginServices.getMDIManager().getWindowInfo(view).getTitle(), fileName, null);
466
			outputRasterLayer = FLyrRasterSE.createLayer("outputLayer",
467
					fileName, null);
468
			
469
			//Borrar sin preguntar:
470
			//RasterToolsUtil.loadLayer(PluginServices.getMDIManager().getWindowInfo(view).getTitle(), fileName, null);
471 471
	
472 472
		} catch (NotSupportedExtensionException e) {
473 473
			RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_writer_notsupportedextension"), this, e);
......
475 475
			RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_writer"), this, e);
476 476
		} catch (InterruptedException e) {
477 477
				Thread.currentThread().interrupt();
478
		} catch (RasterNotLoadException e) {
479
				RasterToolsUtil.messageBoxError("error_cargar_capa", this, e);
480 478
		} catch (RasterDriverException e) {
481 479
			RasterToolsUtil.messageBoxError(PluginServices.getText(this, "raster_buffer_invalid_extension"), this, e);
480
		} catch (LoadLayerException e) {
481
			RasterToolsUtil.messageBoxError("error_cargar_capa", this, e);
482 482
		}
483 483

  
484 484
	}
485 485
	
486
	public Object getResult() {
487
		return outputRasterLayer;
488
	}
489

  
490

  
486 491
	/**
487 492
	 * @return descripcion
488 493
	 * */

Also available in: Unified diff