Statistics
| Revision:

root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.algorithm / src / main / java / es / unex / sextante / gridTools / invertNoData / InvertNoDataAlgorithm.java @ 59

History | View | Annotate | Download (1.99 KB)

1
package es.unex.sextante.gridTools.invertNoData;
2

    
3
import es.unex.sextante.core.GeoAlgorithm;
4
import es.unex.sextante.core.Sextante;
5
import es.unex.sextante.dataObjects.IRasterLayer;
6
import es.unex.sextante.exceptions.GeoAlgorithmExecutionException;
7
import es.unex.sextante.exceptions.RepeatedParameterNameException;
8

    
9
public class InvertNoDataAlgorithm
10
         extends
11
            GeoAlgorithm {
12

    
13
   public static final String RESULT = "RESULT";
14
   public static final String INPUT  = "INPUT";
15

    
16

    
17
   @Override
18
   public void defineCharacteristics() {
19

    
20
      setName(Sextante.getText("Invert_mask"));
21
      setGroup(Sextante.getText("Basic_tools_for_raster_layers"));
22
      setUserCanDefineAnalysisExtent(true);
23

    
24
      try {
25
         m_Parameters.addInputRasterLayer(INPUT, Sextante.getText("Layer"), true);
26
         addOutputRasterLayer(RESULT, Sextante.getText("Inverted_mask"));
27
      }
28
      catch (final RepeatedParameterNameException e) {
29
         Sextante.addErrorToLog(e);
30
      }
31

    
32
   }
33

    
34

    
35
   @Override
36
   public boolean processAlgorithm() throws GeoAlgorithmExecutionException {
37

    
38
      int x, y;
39
      int iNX, iNY;
40
      double dValue;
41
      IRasterLayer input;
42

    
43
      input = m_Parameters.getParameterValueAsRasterLayer(INPUT);
44

    
45
      final IRasterLayer result = getNewRasterLayer(RESULT, Sextante.getText("Inverted_mask"), IRasterLayer.RASTER_DATA_TYPE_BYTE);
46

    
47

    
48
      result.setNoDataValue(0.0);
49

    
50
      input.setWindowExtent(result.getWindowGridExtent());
51

    
52
      iNX = result.getWindowGridExtent().getNX();
53
      iNY = result.getWindowGridExtent().getNY();
54

    
55
      for (y = 0; (y < iNY) && setProgress(y, iNY); y++) {
56
         for (x = 0; x < iNX; x++) {
57
            dValue = input.getCellValueAsDouble(x, y);
58
            if (input.isNoDataValue(dValue)) {
59
               result.setCellValue(x, y, 1.0);
60
            }
61
            else {
62
               result.setNoData(x, y);
63
            }
64
         }
65
      }
66

    
67
      return !m_Task.isCanceled();
68

    
69
   }
70

    
71

    
72
}