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
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