Revision 11307 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/saveraster/ui/listener/SaveRasterDialogListener.java
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