Revision 1055 org.gvsig.geoprocess/branches/refactor-2018/org.gvsig.geoprocess/org.gvsig.geoprocess.lib/org.gvsig.geoprocess.lib.sextante/src/main/java/org/gvsig/geoprocess/lib/sextante/dataObjects/RasterDriver.java

View differences:

RasterDriver.java
23 23
 */
24 24
package org.gvsig.geoprocess.lib.sextante.dataObjects;
25 25

  
26
import java.awt.geom.AffineTransform;
27 26
import java.awt.image.DataBuffer;
28 27
import java.io.File;
29 28

  
......
33 32
import org.cresques.cts.IProjection;
34 33

  
35 34
import org.gvsig.andami.Utilities;
36
import org.gvsig.fmap.dal.coverage.RasterLocator;
37
import org.gvsig.fmap.dal.coverage.RasterManager;
38
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
39
import org.gvsig.fmap.dal.coverage.datastruct.NoData;
40
import org.gvsig.fmap.dal.coverage.datastruct.Params;
41
import org.gvsig.fmap.dal.coverage.store.DataServerWriter;
42
import org.gvsig.fmap.dal.coverage.store.RasterWriter;
35
import org.gvsig.fmap.dal.DALLocator;
36
import org.gvsig.fmap.dal.DataManager;
37
import org.gvsig.fmap.dal.DataServerExplorerParameters;
38
import org.gvsig.fmap.dal.raster.api.NewRasterStoreParameters;
39
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
40
import org.gvsig.raster.lib.buffer.api.Buffer;
41
import org.gvsig.raster.lib.buffer.api.BufferLocator;
42
import org.gvsig.raster.lib.buffer.api.BufferManager;
43
import org.gvsig.raster.lib.buffer.api.NoData;
44
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
43 45

  
46

  
44 47
public class RasterDriver {
45 48

  
46 49
    public static final int RASTER_DATA_TYPE_FLOAT = DataBuffer.TYPE_FLOAT;
......
54 57
    private String name = null;
55 58

  
56 59
    public RasterDriver(final AnalysisExtent ae, final int iDataType,
57
        final int iNumBands) {
60
        final int iNumBands) throws BufferException {
58 61

  
59 62
        super();
60

  
61
        buf =
62
            RasterLocator.getManager().createBuffer(iDataType,
63
                ae.getNX(),
64
                ae.getNY(),
65
                iNumBands, true);
63
        IProjection projection = null; //TODO check create bufefr without projection
64
        int[] listDataType; //TODO check how listDataType is made.
65
        listDataType = new int[1];
66
        listDataType[0] = (iDataType);
67
        buf = BufferLocator.getBufferManager().createBuffer(ae.getNX(), ae.getNY(), listDataType, projection);
66 68
        m_GridExtent = ae;
67 69

  
68 70
    }
69 71

  
70
    public RasterDriver(final AnalysisExtent ae, final int iDataType) {
72
    public RasterDriver(final AnalysisExtent ae, final int iDataType) throws BufferException {
71 73
        this(ae, iDataType, 1);
72 74
    }
73 75

  
......
99 101
        final double dValue) {
100 102

  
101 103
        if (isInGrid(x, y) && (iBand < buf.getBandCount())) {
102
            switch (buf.getDataType()) {
103
            case Buffer.TYPE_BYTE:
104
                buf.setElem(y, x, iBand, (byte) dValue);
104
            switch (buf.getBand(iBand).getDataType()) {
105
            case BufferManager.TYPE_BYTE:
106
                buf.getBand(iBand).set(y,x, (byte) dValue);
105 107
                break;
106
            case Buffer.TYPE_SHORT:
107
                buf.setElem(y, x, iBand, (short) dValue);
108
            case BufferManager.TYPE_SHORT:
109
                buf.getBand(iBand).set(y, x,(short) dValue);
108 110
                break;
109
            case Buffer.TYPE_INT:
110
                buf.setElem(y, x, iBand, (int) dValue);
111
            case BufferManager.TYPE_INT:
112
                buf.getBand(iBand).set(y, x, (int) dValue);
111 113
                break;
112
            case Buffer.TYPE_FLOAT:
113
                buf.setElem(y, x, iBand, (float) dValue);
114
            case BufferManager.TYPE_FLOAT:
115
                buf.getBand(iBand).set(y, x,(float) dValue);
114 116
                break;
115
            case Buffer.TYPE_DOUBLE:
117
            case BufferManager.TYPE_DOUBLE:
116 118
            default:
117
                buf.setElem(y, x, iBand, dValue);
119
                buf.getBand(iBand).set(y, x, dValue);
118 120
                break;
119 121
            }
120 122
        }
121 123
    }
122 124

  
123 125
    public double getNoDataValue() {
124
        NoData nodata = buf.getNoDataValue();
126
        NoData nodata;
127
        nodata = buf.getBandNoData()[0];
125 128
        return nodata != null ? (nodata.getValue() != null ? nodata.getValue()
126 129
            .doubleValue() : 0.0d) : 0.0d;
127 130
    }
128 131

  
129 132
    public void setNoDataValue(final double dNoDataValue) {
130 133
        // TODO: hablar con NACHO
131
        if (buf.getNoDataValue() == null) {
132
            NoData nodata =
133
                RasterLocator.getManager().getDataStructFactory()
134
                    .createNoData(dNoDataValue, null, null);
135
            buf.setNoDataValue(nodata);
136
        } else {
137
            buf.getNoDataValue().setValue(dNoDataValue);
134
        for (int i = 0; i < buf.getBandCount(); i++) {
135
                if (buf.getBand(i).getNoData()== null) {
136
                    NoData nodata = BufferLocator.getBufferManager().createNoData(dNoDataValue, null);
137
                    buf.getBand(i).getNoData().setValue(nodata.getValue());
138
                } else {
139
                    buf.getBand(i).getNoData().setValue(dNoDataValue);
140
                }
138 141
        }
139 142
    }
140 143

  
......
145 148
    public double getCellValue(final int x, final int y, final int iBand) {
146 149

  
147 150
        if (isInGrid(x, y) && (iBand < buf.getBandCount())) {
148
            switch (buf.getDataType()) {
149
            case Buffer.TYPE_BYTE:
150
                return buf.getElemByte(y, x, iBand);
151
            case Buffer.TYPE_SHORT:
152
                return buf.getElemShort(y, x, iBand);
153
            case Buffer.TYPE_INT:
154
                return buf.getElemInt(y, x, iBand);
155
            case Buffer.TYPE_FLOAT:
156
                return buf.getElemFloat(y, x, iBand);
157
            case Buffer.TYPE_DOUBLE:
158
                return buf.getElemDouble(y, x, iBand);
151
            switch (buf.getBand(iBand).getDataType()) {
152
            case BufferManager.TYPE_BYTE:
153
                return buf.getBandByte(iBand).getValue(y, x);
154
            case BufferManager.TYPE_SHORT:
155
                return buf.getBandShort(iBand).getValue(y, x);
156
            case BufferManager.TYPE_INT:
157
                return buf.getBandInt(iBand).getValue(y,x);
158
            case BufferManager.TYPE_FLOAT:
159
                return buf.getBandFloat(iBand).getValue(y,x);
160
            case BufferManager.TYPE_DOUBLE:
161
                return buf.getBandDouble(iBand).getValue(y,x);
159 162
            default:
160 163
                return getNoDataValue();
161 164
            }
......
174 177
        if ((x < 0) || (y < 0)) {
175 178
            return false;
176 179
        }
177

  
180
        
178 181
        if ((x >= m_GridExtent.getNX()) || (y >= m_GridExtent.getNY())) {
179 182
            return false;
180 183
        }
......
220 223

  
221 224
    public boolean export(final String sFilename, final IProjection projection) {
222 225

  
223
        try {
224
            RasterManager manager = RasterLocator.getManager();
225
            final DataServerWriter writerBufferServer =
226
                manager.createDataServerWriter();
227
            writerBufferServer.setBuffer(buf, -1);
228
            final Params params = manager.createWriterParams(sFilename);
229
            final AffineTransform affineTransform =
230
                new AffineTransform(m_GridExtent.getCellSize(), 0, 0,
231
                    -m_GridExtent.getCellSize(), m_GridExtent.getXMin(),
232
                    m_GridExtent.getYMax());
233 226

  
234
            final RasterWriter writer =
235
                manager.createWriter(writerBufferServer, sFilename,
236
                    buf.getBandCount(), affineTransform, buf.getWidth(),
237
                    buf.getHeight(), buf.getDataType(), params, projection);
238
            writer.dataWrite();
239
            writer.writeClose();
240

  
241
        } catch (final Exception e) {
227
        try {
228
            final DataManager dm = DALLocator.getDataManager();
229
            DataServerExplorerParameters serverParameters = dm.createServerExplorerParameters(FilesystemServerExplorer.NAME);
230
            FilesystemServerExplorer server = (FilesystemServerExplorer) dm.openServerExplorer(FilesystemServerExplorer.NAME, serverParameters);
231
            File file = new File(sFilename);
232
            NewRasterStoreParameters parameters = (NewRasterStoreParameters) server.getAddParameters(file);
233
            parameters.setDynValue("crs", projection);
234
            parameters.setBuffer(buf);
235
            server.add(parameters.getDataStoreName(), parameters, true);
236
            
237
            return true;
238
        } catch (Exception e) {
242 239
            Sextante.addErrorToLog(e);
243
            return false;
244 240
        }
245

  
246
        return true;
247

  
241
        return false;
248 242
    }
249 243

  
250 244
    public void setName(final String name) {

Also available in: Unified diff