Revision 20393 trunk/extensions/extRemoteSensing/src/org/gvsig/remotesensing/gridmath/GridMathProcess.java
GridMathProcess.java | ||
---|---|---|
267 | 267 |
|
268 | 268 |
public void process() throws InterruptedException { |
269 | 269 |
RasterBuffer inputBuffer=null; |
270 |
/* |
|
271 |
Comprobar que todas las variables que intervienen en la expresion |
|
272 |
estan en el HasMap de parametros. |
|
273 |
*/ |
|
274 |
|
|
275 |
for (Iterator iter = parser.getSymbolTable().values().iterator(); iter.hasNext();) { |
|
276 |
Variable variable = (Variable) iter.next(); |
|
277 |
if (!params.containsKey(variable.getName())) |
|
278 |
try { |
|
279 |
throw new NoAssignedVarsException(); |
|
280 |
} catch (NoAssignedVarsException e) { |
|
281 |
RasterToolsUtil.messageBoxError(PluginServices.getText(this,"variables_sin_asignar"),this); |
|
282 |
} |
|
283 |
} |
|
284 |
|
|
285 | 270 |
|
286 |
// Construccion del rasterbuffer que recoge el resultado del calculo |
|
287 |
rasterResult = RasterBuffer.getBuffer(RasterBuffer.TYPE_DOUBLE, resultExtent.getNX() ,resultExtent.getNY(), 1, true); |
|
271 |
// Construccion del rasterbuffer que recoge el resultado del calculo |
|
272 |
rasterResult = RasterBuffer.getBuffer(RasterBuffer.TYPE_DOUBLE, resultExtent.getNX() ,resultExtent.getNY(), 1, true); |
|
273 |
|
|
274 |
|
|
275 |
// Calculo de grid resultante |
|
276 |
int iNX = resultExtent.getNX(); |
|
277 |
int iNY = resultExtent.getNY(); |
|
288 | 278 |
|
279 |
// Calculo de grid resultante |
|
280 |
for (int x=0;x<iNX;x++){ |
|
281 |
if (cancel) return; //Proceso cancelado |
|
282 |
for(int y=0;y<iNY;y++){ |
|
283 |
int i=0; |
|
284 |
for (Iterator iter = params.keySet().iterator(); iter.hasNext();) { |
|
285 |
String varName = (String)iter.next(); |
|
286 |
Object data[]= (Object[])params.get(varName); |
|
287 |
inputBuffer= (RasterBuffer)data[0]; |
|
289 | 288 |
|
290 |
// Calculo de grid resultante |
|
291 |
int iNX = resultExtent.getNX(); |
|
292 |
int iNY = resultExtent.getNY(); |
|
293 |
|
|
294 |
// Calculo de grid resultante |
|
295 |
for (int x=0;x<iNX;x++){ |
|
296 |
if (cancel) return; //Proceso cancelado |
|
297 |
for(int y=0;y<iNY;y++){ |
|
298 |
int i=0; |
|
299 |
for (Iterator iter = params.keySet().iterator(); iter.hasNext();) { |
|
300 |
String varName = (String)iter.next(); |
|
301 |
Object data[]= (Object[])params.get(varName); |
|
302 |
inputBuffer= (RasterBuffer)data[0]; |
|
289 |
int dataType= ((Integer)data[1]).intValue(); |
|
290 |
double value=0; |
|
291 |
|
|
292 |
// BUFFER TIPO_BYTE |
|
293 |
if(dataType == RasterBuffer.TYPE_BYTE){ |
|
294 |
value = inputBuffer.getElemByte(y, x, 0); |
|
295 |
if(value!=inputBuffer.getNoDataValue()){ |
|
296 |
parser.setVarValue(varName,new Double(value)); |
|
297 |
i++; |
|
298 |
} |
|
299 |
|
|
300 |
else{ |
|
301 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue); |
|
302 |
break; |
|
303 |
} |
|
304 |
} |
|
303 | 305 |
|
304 |
int dataType= ((Integer)data[1]).intValue(); |
|
305 |
double value=0; |
|
306 |
|
|
307 |
// BUFFER TIPO_BYTE |
|
308 |
if(dataType == RasterBuffer.TYPE_BYTE){ |
|
309 |
value = inputBuffer.getElemByte(y, x, 0); |
|
310 |
if(value!=inputBuffer.getNoDataValue()){ |
|
311 |
parser.setVarValue(varName,new Double(value)); |
|
312 |
i++; |
|
313 |
} |
|
314 |
|
|
315 |
else{ |
|
316 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue); |
|
317 |
break; |
|
318 |
} |
|
306 |
// BUFFER TIPO_SHORT |
|
307 |
else if(dataType== RasterBuffer.TYPE_SHORT){ |
|
308 |
value = inputBuffer.getElemShort(y, x, 0); |
|
309 |
if(value!=inputBuffer.getNoDataValue()){ |
|
310 |
parser.setVarValue(varName,new Double(value)); |
|
311 |
i++; |
|
319 | 312 |
} |
320 |
|
|
321 |
// BUFFER TIPO_SHORT
|
|
322 |
else if(dataType== RasterBuffer.TYPE_SHORT){
|
|
323 |
value = inputBuffer.getElemShort(y, x, 0);
|
|
324 |
if(value!=inputBuffer.getNoDataValue()){
|
|
325 |
parser.setVarValue(varName,new Double(value)); |
|
326 |
i++;
|
|
327 |
}
|
|
328 |
else{
|
|
329 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue);
|
|
330 |
break;
|
|
331 |
}
|
|
313 |
else{ |
|
314 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue);
|
|
315 |
break;
|
|
316 |
}
|
|
317 |
}
|
|
318 |
|
|
319 |
// BUFFER TIPO_INT
|
|
320 |
else if(dataType == RasterBuffer.TYPE_INT){
|
|
321 |
value = inputBuffer.getElemInt(y, x,0);
|
|
322 |
if(value!=inputBuffer.getNoDataValue()){
|
|
323 |
parser.setVarValue(varName,new Double(value));
|
|
324 |
i++;
|
|
332 | 325 |
} |
333 |
|
|
334 |
// BUFFER TIPO_INT |
|
335 |
else if(dataType == RasterBuffer.TYPE_INT){ |
|
336 |
value = inputBuffer.getElemInt(y, x,0); |
|
337 |
if(value!=inputBuffer.getNoDataValue()){ |
|
338 |
parser.setVarValue(varName,new Double(value)); |
|
339 |
i++; |
|
340 |
} |
|
341 |
else{ |
|
342 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue); |
|
343 |
break; |
|
344 |
} |
|
326 |
else{ |
|
327 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue); |
|
328 |
break; |
|
345 | 329 |
} |
346 |
|
|
347 |
// BUFFER TIPO_FLOAT |
|
348 |
else if(dataType == RasterBuffer.TYPE_FLOAT){ |
|
349 |
value = inputBuffer.getElemFloat(x, y,0); |
|
350 |
if(value!=inputBuffer.getNoDataValue()){ |
|
351 |
parser.setVarValue(varName,new Double(value)); |
|
352 |
i++; |
|
353 |
} |
|
354 |
else{ |
|
355 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue); |
|
356 |
break; |
|
357 |
} |
|
358 |
} |
|
359 |
|
|
360 |
// BUFFER TIPO_DOUBLE |
|
361 |
else if(dataType == RasterBuffer.TYPE_DOUBLE){ |
|
362 |
value = inputBuffer.getElemDouble(y, x,0); |
|
363 |
if(value!=inputBuffer.getNoDataValue()){ |
|
330 |
} |
|
331 |
|
|
332 |
// BUFFER TIPO_FLOAT |
|
333 |
else if(dataType == RasterBuffer.TYPE_FLOAT){ |
|
334 |
value = inputBuffer.getElemFloat(x, y,0); |
|
335 |
if(value!=inputBuffer.getNoDataValue()){ |
|
364 | 336 |
parser.setVarValue(varName,new Double(value)); |
365 | 337 |
i++; |
366 |
} |
|
367 |
else{ |
|
368 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue); |
|
369 |
break; |
|
370 |
} |
|
371 | 338 |
} |
339 |
else{ |
|
340 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue); |
|
341 |
break; |
|
342 |
} |
|
343 |
} |
|
372 | 344 |
|
373 |
} |
|
374 |
// Evaluacion de la exprsion en el x,y. |
|
375 |
if (i == params.size()){ |
|
376 |
rasterResult.setElem(y, x, 0, (double)parser.getValue()); |
|
377 |
percent = x*100/rasterResult.getWidth(); |
|
378 |
} |
|
379 |
} |
|
345 |
// BUFFER TIPO_DOUBLE |
|
346 |
else if(dataType == RasterBuffer.TYPE_DOUBLE){ |
|
347 |
value = inputBuffer.getElemDouble(y, x,0); |
|
348 |
if(value!=inputBuffer.getNoDataValue()){ |
|
349 |
parser.setVarValue(varName,new Double(value)); |
|
350 |
i++; |
|
351 |
} |
|
352 |
else{ |
|
353 |
rasterResult.setElem(y, x, 0, rasterResult.noDataValue); |
|
354 |
break; |
|
355 |
} |
|
356 |
} |
|
357 |
|
|
358 |
} |
|
359 |
// Evaluacion de la exprsion en el x,y. |
|
360 |
if (i == params.size()){ |
|
361 |
rasterResult.setElem(y, x, 0, (double)parser.getValue()); |
|
362 |
percent = x*100/rasterResult.getWidth(); |
|
363 |
} |
|
364 |
} |
|
365 |
|
|
366 |
} |
|
367 |
// Escritura de los datos a disco |
|
368 |
writeToFile(); |
|
380 | 369 |
|
381 |
} |
|
382 |
// Escritura de los datos a disco |
|
383 |
writeToFile(); |
|
384 |
|
|
385 | 370 |
} |
386 | 371 |
|
387 | 372 |
|
Also available in: Unified diff