Revision 2364 org.gvsig.raster.tasseledcab/trunk/org.gvsig.raster.tasseledcab/org.gvsig.raster.tasseledcab.toolbox.algorithm/src/main/java/org/gvsig/raster/tasseledcab/TasseledCabSextanteAlgorithm.java

View differences:

TasseledCabSextanteAlgorithm.java
1 1
package org.gvsig.raster.tasseledcab;
2 2

  
3
import java.util.HashMap;
4 3
import java.util.List;
5 4

  
6 5
import org.gvsig.fmap.dal.coverage.RasterLocator;
......
14 13
import org.gvsig.raster.algorithm.process.IProcessActions;
15 14
import org.gvsig.raster.algorithm.process.ProcessException;
16 15
import org.gvsig.raster.fmap.layers.FLyrRaster;
17
import org.gvsig.raster.tasseledcab.algorithm.PCStatsDataStructure;
18 16
import org.gvsig.raster.tasseledcab.algorithm.TasseledCabAlgorithmLibrary;
19 17
import org.gvsig.raster.tasseledcab.algorithm.TasseledCabProcess;
20 18

  
......
31 29
    public static final String RESULT            = "RESULT";
32 30
    public static final String LAYER             = TasseledCabProcess.RASTER_STORE;
33 31
    public static final String USE_ROI           = "USE_ROI";
32
    public static final String TYPE              = "TYPE";
34 33
    
34
    public static String[]     LANDSAT_TYPES     = new String[]{"Landsat MS" , "Landsat TM",  "Landsat ETM"};
35
    
36
    
35 37
    private boolean            useROI            = false;
36 38
    private DataProcess        taskStats         = null;
37 39
    private DataProcess        taskPC            = null;
40
    private int                type              = 0;
38 41
    
39 42

  
40 43
    public void defineCharacteristics() {
......
44 47
        try {
45 48
            m_Parameters.addInputRasterLayer(LAYER, getTranslation("Input_layer"), true);
46 49
            m_Parameters.addBoolean(USE_ROI, getTranslation("use_roi"), false);
50
            m_Parameters.addSelection(TYPE, getTranslation("type"), LANDSAT_TYPES);
47 51
        } catch (RepeatedParameterNameException e) {
48 52
            Sextante.addErrorToLog(e);
49 53
        }
......
58 62
    	
59 63
    	IRasterLayer input = m_Parameters.getParameterValueAsRasterLayer(LAYER);
60 64
		useROI = m_Parameters.getParameterValueAsBoolean(USE_ROI);
65
		String value = m_Parameters.getParameterValueAsString(TYPE);
66
		type = 0;
67
		for (int j = 0; j < LANDSAT_TYPES.length; j++) {
68
			if(LANDSAT_TYPES[j].equals(value))
69
				type = j;
70
		}
61 71
    	
62 72
    	FLyrRaster lyrRaster = ((FLyrRaster)input.getBaseDataObject());
63 73
    	IRasterLayer output = null;
......
71 81
    	String fileName = ((FLyrRasterIRasterLayer)output).getFileName(); //getOutPutFile(RESULT);
72 82

  
73 83
    	try {
74
    		setProgressText(getTranslation("stadistics"));
75
			taskStats = createStatisticsProcess(lyrRaster.getDataStore());
76
			taskStats.execute();
77
			HashMap<String, Object> params = taskStats.getResult();
78
			PCStatsDataStructure stats = (PCStatsDataStructure)params.get("STATS_RESULT");
79
			
80
			setProgressText(getTranslation("calc_components"));
81
			taskPC = createPCAProcess(lyrRaster.getDataStore(), fileName, stats);
84
			setProgressText(getTranslation("calculating"));
85
			taskPC = createTasseledCapProcess(lyrRaster.getDataStore(), fileName, type);
82 86
			taskPC.execute();
83
			params = taskPC.getResult();
84
			
85 87
			((FLyrRasterIRasterLayer)output).setBaseDataObject(fileName);
86 88
		} catch (ProcessInterruptedException e) {
87 89
			Sextante.addErrorToLog(e);
......
95 97
        return true;
96 98
    }
97 99
    
98
    /**
99
     * Creates a process to calculate statistics
100
     * @param inputStore
101
     * @return
102
     * @throws ProcessException
103
     */
104
    private DataProcess createStatisticsProcess(RasterDataStore inputStore) throws ProcessException {
105
    	DataProcess taskStats = RasterBaseAlgorithmLibrary.getManager().createRasterTask(TasseledCabAlgorithmLibrary.PC_STATS_PROCESS_LABEL);
106
    	taskStats.setActions(this);
107
    	List<String> params = taskStats.getRasterTaskInputParameters(TasseledCabAlgorithmLibrary.PC_STATS_PROCESS_LABEL);
108
    	for (int i = 0; i < params.size(); i++) {
109
    		String paramName = params.get(i);
110
    		Class<?> paramType = taskStats.getParameterTypeByProcess(TasseledCabAlgorithmLibrary.PC_STATS_PROCESS_LABEL, paramName);
111
    		if(paramType == RasterDataStore.class) {
112
    			taskStats.addParam(paramName, (RasterDataStore)inputStore);
113
    		}
114
    		if(paramName.equals("BANDS")) {
115
    			boolean[] bands = new boolean[inputStore.getBandCount()];
116
    			for (int j = 0; j < bands.length; j++) {
117
					bands[j] = true;
118
				}
119
    			taskStats.addParam(paramName, bands);
120
    		}
121

  
122
    		if(paramName.equals("ROI_EPSG") && useROI) {
123
    			taskStats.addParam(paramName, "EPSG:4326");
124
    		}
125
    		
126
    		if(paramName.equals("WINDOW")) {
127
    			AnalysisExtent ext = getAnalysisExtent();
128
    			Extent bbox = RasterLocator.getManager().getDataStructFactory().createExtent(
129
    					ext.getXMin(), ext.getYMax(), ext.getXMax(), ext.getYMin());
130
    			Extent inputBbox = inputStore.getExtent();
131
    			if(bbox.getULX() != inputBbox.getULX() || 
132
    				bbox.getULY() != inputBbox.getULY() || 
133
    				bbox.getLRX() != inputBbox.getLRX() || 
134
    				bbox.getLRY() != inputBbox.getLRY()) {
135
    				taskStats.addParam(paramName, bbox);
136
    			}
137
    		}
138
    	}
139
    	return taskStats;
140
    }
141
    
142
    private DataProcess createPCAProcess(RasterDataStore inputStore, String fileName, PCStatsDataStructure stats) throws ProcessException {
143
    	DataProcess taskPC = RasterBaseAlgorithmLibrary.getManager().createRasterTask(TasseledCabAlgorithmLibrary.PC_PROCESS_LABEL);
100
    private DataProcess createTasseledCapProcess(RasterDataStore inputStore, String fileName, int type) throws ProcessException {
101
    	DataProcess taskPC = RasterBaseAlgorithmLibrary.getManager().createRasterTask(TasseledCabAlgorithmLibrary.TASSELEDCAB_PROCESS_LABEL);
144 102
    	taskPC.setActions(this);
145
    	List<String> params = taskPC.getRasterTaskInputParameters(TasseledCabAlgorithmLibrary.PC_PROCESS_LABEL);
103
    	List<String> params = taskPC.getRasterTaskInputParameters(TasseledCabAlgorithmLibrary.TASSELEDCAB_PROCESS_LABEL);
146 104
    	for (int i = 0; i < params.size(); i++) {
147 105
    		String paramName = params.get(i);
148
    		Class<?> paramType = taskPC.getParameterTypeByProcess(TasseledCabAlgorithmLibrary.PC_PROCESS_LABEL, paramName);
106
    		Class<?> paramType = taskPC.getParameterTypeByProcess(TasseledCabAlgorithmLibrary.TASSELEDCAB_PROCESS_LABEL, paramName);
149 107
    		if(paramType == RasterDataStore.class) {
150 108
    			taskPC.addParam(paramName, (RasterDataStore)inputStore);
151 109
    		}
152 110
			
153 111
			if(paramType == Boolean[].class) {
154
    			boolean[] bands = new boolean[inputStore.getBandCount()];
112
    			boolean[] bands = new boolean[type == 0 ? 4 : 6];
155 113
    			for (int j = 0; j < bands.length; j++) {
156 114
					bands[j] = true;
157 115
				}
158 116
    			taskPC.addParam(paramName, bands);
159 117
			}
160 118
			
161
			if(paramType == PCStatsDataStructure.class) {
162
				taskPC.addParam(paramName, stats);
163
			}
164
			
165 119
			if(paramName.equals("PATH")) {
166 120
				taskPC.addParam(paramName, fileName);
167 121
			}

Also available in: Unified diff