Revision 11307 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/saveraster/ui/listener/SaveRasterDialogListener.java

View differences:

SaveRasterDialogListener.java
31 31
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
32 32
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
33 33
import org.gvsig.raster.RasterLibrary;
34
import org.gvsig.raster.buffer.IQueryableRaster;
34 35
import org.gvsig.raster.dataset.GeoRasterWriter;
35 36
import org.gvsig.raster.dataset.NotSupportedExtensionException;
36 37
import org.gvsig.raster.dataset.RasterDriverException;
......
58 59
	private FLayers				layers = null;
59 60
	private MapControl			mapCtrl = null;
60 61
	private GeoRasterWriter 	writer = null;
61
	private IncrementableTask	incrementableTask = null;
62 62
		
63 63
	/**
64 64
	 * Constructor
......
111 111
		
112 112
		//Comprobamos que el en la ruta de destino tengamos permisos de escritura
113 113
		File f = new File(fName);
114
		if(!f.exists()){
114
		if(!f.exists()) {
115 115
			if(!checkFileExists(fName))
116 116
				return false;
117 117
		}
118 118
		f = new File(fName.substring(0, fName.lastIndexOf(File.separator)));
119
		if(f.exists() && f.isDirectory() && !f.canWrite()){
119
		if(f.exists() && f.isDirectory() && !f.canWrite()) {
120 120
			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
121 121
					PluginServices.getText(this, "error_file_not_writable"));
122 122
			return false;
......
127 127
		double ulX = Double.parseDouble(controlPanel.getTSupIzqX().getText());
128 128
		double ulY = Double.parseDouble(controlPanel.getTSupIzqY().getText());
129 129
		double width = 0;
130
		if(ulX>lrX)width = (double)(ulX-lrX);
131
			else width = (double)(lrX-ulX);
130
		if(ulX > lrX) width = (double)(ulX - lrX);
131
			else width = (double)(lrX - ulX);
132 132
		double height = 0;
133
		if(ulY>lrY)height = (double)(ulY-lrY);
134
			else height = (double)(lrY-ulY);
133
		if(ulY > lrY) height = (double)(ulY - lrY);
134
			else height = (double)(lrY - ulY);
135 135
		Rectangle2D ext = null;
136 136
		
137
		if(ulY<lrY)
137
		if(ulY < lrY)
138 138
			ext = new Rectangle2D.Double(ulX, ulY, width, height);
139 139
		else
140 140
			ext = new Rectangle2D.Double(ulX, lrY, width, height);
141
		
141
	
142 142
		WriterParams params = getWriterParams(fName);
143
		int blockSize = RasterLibrary.blockHeight;
144
		try {
145
			blockSize = Integer.parseInt(params.getParamById("blocksize").defaultValue);
146
		} catch (NumberFormatException ex) {
147
			//Se queda con el valor por defecto
148
		}
143
		int blockSize = getBlockSize(params, layers);
149 144
		
150 145
		ViewPort vp = new ViewPort(layers.getProjection());
151 146
		vp.setBackColor(mapCtrl.getViewPort().getBackColor());
......
153 148
		vp.setExtent(ext);
154 149
		
155 150
		//Creamos el servidor de datos de la vista
156
		RasterizerLayer p = new RasterizerLayer(layers, vp, blockSize, mapCtrl);
151
		RasterizerLayer rasterizer = new RasterizerLayer(layers, vp, blockSize, mapCtrl);
157 152
		
158
		SaveRasterProcess process = new SaveRasterProcess();
159
		
160
		/*ProgressSaveRasterDialog progressBar = 
161
			new ProgressSaveRasterDialog(mapCtrl, this.layers, this.currentProjection,
162
										dimension, ext, this);
163
		
164
		String prop = driverProps.getValue(fName.substring(fName.lastIndexOf(".") + 1, fName.length()), "COMPRESSION");
165
		if(prop != null) //Se ha modificado la compresi?n desde el dialogo
166
			compresion = Integer.parseInt(prop);
167
		progressBar.setProps(driverProps);
168
		progressBar.setWriter(writer);
169
		progressBar.setFName(fName);
170
		progressBar.setBlockSize(sizeBlock);
171
		progressBar.setCompresion(compresion);
172
		progressBar.showWindow();
173
				
174
		for(int i=0;i<layers.getLayersCount();i++){
175
			layers.getLayer(i).getMapContext().invalidate();
176
		}*/
153
		//Creamos la clase con el proceso y lo lanzamos
154
		SaveRasterProcess saveRasterProcess = new SaveRasterProcess(vp, dimension, rasterizer, fName, params);
155
		IncrementableTask incrementableTask = new IncrementableTask(rasterizer);
156
		saveRasterProcess.setIncrementableTask(incrementableTask);
157
		incrementableTask.showWindow();
158
		saveRasterProcess.start();
159
		incrementableTask.start();
160

  
177 161
		return true;
178 162
    }
179 163
    
......
265 249
		}
266 250
    }
267 251
    
252
    /**
253
     * 
254
     * @param params
255
     * @param flyrs
256
     * @return
257
     */
258
    private int getBlockSize(WriterParams params, FLayers flyrs) {
259
    	
260
    	int blockSize = RasterLibrary.blockHeight;
261
		try {
262
			blockSize = Integer.parseInt(params.getParamById("blocksize").defaultValue);
263
		} catch (NumberFormatException ex) {
264
			//Se queda con el valor por defecto
265
		}
266
		
267
		//Recorremos todas las capas comprobando si alguna de ellas implementa RasterOperations y tilea.
268
		//En ese caso se obtiene el ancho de bloque. El ancho de bloque total ser? el menor obtenido.
269
		//Esto lo hacemos para que las capas que tilean WMS, WCS, ... no hagan demasiadas peticiones al servidor
270
		//por tener un ancho de bloque muy peque?o de modo que el ancho del bloque se ajuste al Tile menor
271
		//soportado por los servidores que intervienen en el salvado.
272
		int[] wBlock = null;
273
		boolean isTiling = false;
274
		int block = Integer.MAX_VALUE;
275
		for(int i = 0; i < flyrs.getLayersCount(); i++){
276
			if(flyrs.getLayer(i) instanceof IQueryableRaster){
277
				if(((IQueryableRaster)flyrs.getLayer(i)).isTiled()){
278
					wBlock = ((IQueryableRaster)flyrs.getLayer(i)).getTileSize();
279
					if((wBlock[0] - 1)< block){
280
						block = wBlock[0] - 1;
281
						isTiling = true;
282
					}
283
				}
284
			}
285
		}
286
		if(isTiling) {
287
			params.changeParamValue("blocksize", String.valueOf(block));
288
			return block;
289
		}
290
		
291
		return blockSize;
292
    }
293
    
268 294
}

Also available in: Unified diff