root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.algorithm / src / main / java / es / unex / sextante / gridTools / changeDataType / ChangeDataTypeAlgorithm.java @ 59
History | View | Annotate | Download (2.96 KB)
1 | 59 | nbrodin | package es.unex.sextante.gridTools.changeDataType; |
---|---|---|---|
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 ChangeDataTypeAlgorithm |
||
10 | extends
|
||
11 | GeoAlgorithm { |
||
12 | |||
13 | public static final String INPUT = "INPUT"; |
||
14 | public static final String TYPE = "TYPE"; |
||
15 | public static final String RESULT = "RESULT"; |
||
16 | |||
17 | public static final int BYTE = 0; |
||
18 | public static final int SHORT = 0; |
||
19 | public static final int INT = 0; |
||
20 | public static final int FLOAT = 0; |
||
21 | public static final int DOUBLE = 0; |
||
22 | |||
23 | |||
24 | @Override
|
||
25 | public void defineCharacteristics() { |
||
26 | |||
27 | final String sTypes[] = { "Byte", "Short", "Int", "Float", "Double" }; |
||
28 | setName(Sextante.getText("Change_data_type"));
|
||
29 | setGroup(Sextante.getText("Basic_tools_for_raster_layers"));
|
||
30 | setUserCanDefineAnalysisExtent(true);
|
||
31 | |||
32 | try {
|
||
33 | m_Parameters.addInputRasterLayer(INPUT, Sextante.getText("Layer"), true); |
||
34 | m_Parameters.addSelection(TYPE, Sextante.getText("Data_type"), sTypes);
|
||
35 | addOutputRasterLayer(RESULT, Sextante.getText("Result"));
|
||
36 | } |
||
37 | catch (final RepeatedParameterNameException e) { |
||
38 | Sextante.addErrorToLog(e); |
||
39 | } |
||
40 | |||
41 | } |
||
42 | |||
43 | |||
44 | @Override
|
||
45 | public boolean processAlgorithm() throws GeoAlgorithmExecutionException { |
||
46 | |||
47 | int x, y;
|
||
48 | int iNX, iNY;
|
||
49 | int iType, iRasterType;
|
||
50 | double dValue;
|
||
51 | IRasterLayer input; |
||
52 | |||
53 | input = m_Parameters.getParameterValueAsRasterLayer(INPUT); |
||
54 | iType = m_Parameters.getParameterValueAsInt(TYPE); |
||
55 | |||
56 | switch (iType) {
|
||
57 | case 0: |
||
58 | iRasterType = IRasterLayer.RASTER_DATA_TYPE_BYTE; |
||
59 | break;
|
||
60 | case 1: |
||
61 | iRasterType = IRasterLayer.RASTER_DATA_TYPE_SHORT; |
||
62 | break;
|
||
63 | case 2: |
||
64 | iRasterType = IRasterLayer.RASTER_DATA_TYPE_INT; |
||
65 | break;
|
||
66 | case 3: |
||
67 | iRasterType = IRasterLayer.RASTER_DATA_TYPE_FLOAT; |
||
68 | break;
|
||
69 | case 4: |
||
70 | default:
|
||
71 | iRasterType = IRasterLayer.RASTER_DATA_TYPE_DOUBLE; |
||
72 | break;
|
||
73 | } |
||
74 | final IRasterLayer result = getNewRasterLayer(RESULT, Sextante.getText("Result"), iRasterType); |
||
75 | |||
76 | input.setWindowExtent(m_AnalysisExtent); |
||
77 | |||
78 | iNX = result.getWindowGridExtent().getNX(); |
||
79 | iNY = result.getWindowGridExtent().getNY(); |
||
80 | |||
81 | for (y = 0; (y < iNY) && setProgress(y, iNY); y++) { |
||
82 | for (x = 0; x < iNX; x++) { |
||
83 | dValue = input.getCellValueAsDouble(x, y); |
||
84 | if (!input.isNoDataValue(dValue)) {
|
||
85 | result.setCellValue(x, y, dValue); |
||
86 | } |
||
87 | else {
|
||
88 | result.setNoData(x, y); |
||
89 | } |
||
90 | } |
||
91 | } |
||
92 | |||
93 | return !m_Task.isCanceled();
|
||
94 | |||
95 | } |
||
96 | |||
97 | |||
98 | } |