Statistics
| Revision:

root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.algorithm / src / main / java / es / unex / sextante / hydrology / cFactorFromNDVI / CFactorFromNDVIAlgorithm.java @ 59

History | View | Annotate | Download (2.49 KB)

1
package es.unex.sextante.hydrology.cFactorFromNDVI;
2

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

    
10
public class CFactorFromNDVIAlgorithm
11
         extends
12
            GeoAlgorithm {
13

    
14
   public static final String ALPHA   = "ALPHA";
15
   public static final String BETA    = "BETA";
16
   public static final String NDVI    = "NDVI";
17
   public static final String CFACTOR = "CFACTOR";
18

    
19
   private IRasterLayer       m_NDVI  = null;
20
   private IRasterLayer       m_CFactor;
21

    
22

    
23
   @Override
24
   public boolean processAlgorithm() throws GeoAlgorithmExecutionException {
25

    
26
      int x, y;
27
      int iNX, iNY;
28
      double dNDVI;
29
      double dAlpha, dBeta;
30

    
31
      m_NDVI = m_Parameters.getParameterValueAsRasterLayer(NDVI);
32
      m_CFactor = getNewRasterLayer(CFACTOR, "C", IRasterLayer.RASTER_DATA_TYPE_FLOAT);
33
      dAlpha = m_Parameters.getParameterValueAsDouble(ALPHA);
34
      dBeta = m_Parameters.getParameterValueAsDouble(BETA);
35

    
36
      m_NDVI.setWindowExtent(m_AnalysisExtent);
37

    
38
      iNX = m_NDVI.getNX();
39
      iNY = m_NDVI.getNY();
40

    
41
      for (y = 0; (y < iNY) && setProgress(y, iNY); y++) {
42
         for (x = 0; x < iNX; x++) {
43
            dNDVI = m_NDVI.getCellValueAsDouble(x, y);
44
            if (m_NDVI.isNoDataValue(dNDVI)) {
45
               m_CFactor.setNoData(x, y);
46
            }
47
            else {
48
               m_CFactor.setCellValue(x, y, Math.exp(-dAlpha * dNDVI / (dBeta - dNDVI)));
49
            }
50
         }
51
      }
52

    
53

    
54
      return !m_Task.isCanceled();
55
   }
56

    
57

    
58
   @Override
59
   public void defineCharacteristics() {
60

    
61
      setName(Sextante.getText("C_factor_from_NDVI"));
62
      setGroup(Sextante.getText("Indices_and_other_hydrological_parameters"));
63
      setUserCanDefineAnalysisExtent(true);
64

    
65
      try {
66
         m_Parameters.addInputRasterLayer(NDVI, "NDVI", true);
67
         m_Parameters.addNumericalValue(ALPHA, "Alpha", 1., AdditionalInfoNumericalValue.NUMERICAL_VALUE_DOUBLE);
68
         m_Parameters.addNumericalValue(BETA, "Beta", 2., AdditionalInfoNumericalValue.NUMERICAL_VALUE_DOUBLE);
69
         addOutputRasterLayer(CFACTOR, Sextante.getText("C"));
70
      }
71
      catch (final RepeatedParameterNameException e) {
72
         Sextante.addErrorToLog(e);
73
      }
74

    
75
   }
76

    
77
}