Revision 22548 trunk/extensions/extRemoteSensing/src/org/gvsig/remotesensing/mosaic/process/MosaicProcess.java
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