Statistics
| Revision:

gvsig-geoprocess / org.gvsig.sextante / trunk / org.gvsig.sextante.app / org.gvsig.sextante.app.extension / src / main / java / org / gvsig / sextante / app / extension / core / gvRasterLayer.java @ 31

History | View | Annotate | Download (9.82 KB)

1 20 nbrodin
package org.gvsig.sextante.app.extension.core;
2
3
import java.awt.geom.Rectangle2D;
4
5
import org.cresques.cts.IProjection;
6 31 nbrodin
import org.gvsig.fmap.dal.store.raster.RasterStoreParameters;
7 20 nbrodin
import org.gvsig.fmap.geom.primitive.Envelope;
8
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
9
import org.gvsig.raster.buffer.RasterBuffer;
10
import org.gvsig.raster.grid.Grid;
11
import org.gvsig.raster.grid.GridException;
12
13
import es.unex.sextante.dataObjects.AbstractRasterLayer;
14
import es.unex.sextante.dataObjects.IRasterLayer;
15
import es.unex.sextante.rasterWrappers.GridExtent;
16
17
public class gvRasterLayer extends AbstractRasterLayer {
18
19 31 nbrodin
        private IProjection     m_Projection      = null;
20
        private Grid            layerGrid         = null;
21
        private String          m_sFilename       = null;
22 20 nbrodin
23
        private double DEFAULT_NO_DATA_VALUE = -99999.;
24
25 31 nbrodin
        public void create(String sName, Object inputParams,
26
                        GridExtent ge, int iDataType,
27
                        int iNumBands, Object crs) {
28
                if(inputParams instanceof RasterStoreParameters) {
29
                        create( sName, ((RasterStoreParameters)inputParams).getFileName(),
30
                                        ge, iDataType, iNumBands, crs);
31
                }
32
        }
33
34 20 nbrodin
        public void create(String sName, String sFilename,
35
                                                GridExtent ge, int iDataType,
36
                                                int iNumBands, Object crs) {
37
38
                RasterMemoryDriver rmd = new RasterMemoryDriver(ge, iDataType, iNumBands);
39
                rmd.setName(sName);
40
                //rmd.setProjection((IProjection) crs);
41
                rmd.setNoDataValue(DEFAULT_NO_DATA_VALUE);
42
43
                m_BaseDataObject = rmd;
44
45
                m_sFilename = sFilename;
46
47
                if(crs instanceof IProjection)
48
                        m_Projection = (IProjection) crs;
49
50
        }
51
52
        public void create(String sName, String sFilename,
53
                        GridExtent ge, int iDataType, Object crs) {
54
55
                create(sName, sFilename, ge, iDataType, 1, crs);
56
57
        }
58
59
        public void create(Object obj) {
60
61
                if (obj instanceof FLyrRasterSE){
62
                        m_BaseDataObject = obj;
63
                        m_Projection = ((FLyrRasterSE)obj).getProjection();
64
                }
65
66
        }
67
68
        public int getDataType() {
69
70
                if (m_BaseDataObject instanceof FLyrRasterSE) {
71
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
72
                        return layer.getDataType()[0];
73
                }
74
                else if (m_BaseDataObject instanceof RasterMemoryDriver) {
75
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
76
                        return layer.getRasterBuf().getDataType();
77
                }
78
79
                return 0;
80
        }
81
82
        public void assign(double dValue) {
83
84
                if (m_BaseDataObject instanceof RasterMemoryDriver) {
85
                        super.assign(dValue);
86
                }
87
88
        }
89
90
        public void assign(IRasterLayer layer) {
91
92
                if (m_BaseDataObject instanceof RasterMemoryDriver) {
93
                        super.assign(layer);
94
                }
95
96
        }
97
98
        public void setCellValue(int x, int y, int iBand, double dValue) {
99
100
                if (m_BaseDataObject instanceof RasterMemoryDriver) {
101
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
102
                        layer.setCellValue(x,y, iBand, dValue);
103
                }
104
105
        }
106
107
        public void setNoDataValue(double dNoDataValue) {
108
109
                if (m_BaseDataObject instanceof RasterMemoryDriver) {
110
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
111
                        layer.setNoDataValue(dNoDataValue);
112
                }
113
                else if (m_BaseDataObject instanceof FLyrRasterSE) {
114
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
115
                        layer.setNoDataValue(dNoDataValue);
116
                }
117
118
        }
119
120
        public void setNoData(int x, int y) {
121
122
                if (m_BaseDataObject instanceof RasterMemoryDriver) {
123
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
124
                        layer.setNoData(x, y);
125
                }
126
127
        }
128
129
        public double getNoDataValue(){
130
131
                if (m_BaseDataObject instanceof RasterMemoryDriver) {
132
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
133
                        return layer.getNoDataValue();
134
                }
135
                else if (m_BaseDataObject instanceof FLyrRasterSE) {
136
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
137
                        return layer.getNoDataValue();
138
                }
139
140
                return 0;
141
142
        }
143
144
        public double getCellValueInLayerCoords(int x, int y, int band) {
145
146
                if (m_BaseDataObject instanceof FLyrRasterSE) {
147 31 nbrodin
                        //FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
148 20 nbrodin
                        int iType = layerGrid.getDataType();
149
150
                        if (iType == RasterBuffer.TYPE_DOUBLE) {
151
                                return  layerGrid.getRasterBuf().getElemDouble(y, x, band);
152
                        } else if (iType == RasterBuffer.TYPE_INT) {
153
                                return (double)  layerGrid.getRasterBuf().getElemInt(y, x, band);
154
                        } else if (iType == RasterBuffer.TYPE_FLOAT) {
155
                                return (double)  layerGrid.getRasterBuf().getElemFloat(y, x, band);
156
                        } else if (iType == RasterBuffer.TYPE_BYTE) {
157
                                return (double) ( layerGrid.getRasterBuf().getElemByte(y, x, band) & 0xff);
158
                        } else if ((iType == RasterBuffer.TYPE_SHORT) | (iType == RasterBuffer.TYPE_USHORT)) {
159
                                return (double)  layerGrid.getRasterBuf().getElemShort(y, x, band);
160
                        }
161
162
                        return layerGrid.getNoDataValue();
163
                }
164
                else if (m_BaseDataObject instanceof RasterMemoryDriver) {
165
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
166
                        return layer.getCellValue(x, y, band);
167
                }
168
169
                return getNoDataValue();
170
171
        }
172
173
        public int getBandsCount() {
174
175
                if (m_BaseDataObject instanceof FLyrRasterSE) {
176
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
177
                        return layer.getBandCount();
178
                }
179
                else if (m_BaseDataObject instanceof RasterMemoryDriver) {
180
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
181
                        return layer.getRasterBuf().getBandCount();
182
                }
183
184
                return 0;
185
186
        }
187
188
        public void fitToGridExtent(GridExtent ge){
189
190
                int iNX, iNY;
191
                int x, y;
192
                int iBand;
193
194
                if (ge != null){
195
                        if (!ge.equals(getWindowGridExtent()) ){
196
                                if (m_BaseDataObject instanceof RasterMemoryDriver) {
197
                                        RasterMemoryDriver gvSIGDriver = (RasterMemoryDriver) m_BaseDataObject;
198
199
                                        FLyrRasterSE gvSIGLayer = gvSIGDriver.getRasterLayer(Long.toString(System.currentTimeMillis()).toString(),
200
                                                        m_Projection);
201
                                        gvRasterLayer orgLayer = new gvRasterLayer();
202
                                        orgLayer.create(gvSIGLayer);
203
204
                                        iNX = ge.getNX();
205
                                        iNY = ge.getNY();
206
207
                                        m_BaseDataObject = null;
208
209
                                        create(this.getName(), m_sFilename, ge, this.getDataType(), this.getBandsCount());
210
                                        for (iBand = 0; iBand < this.getBandsCount(); iBand++){
211
                                                for (y = 0; y < iNY; y++){
212
                                                        for (x = 0; x < iNX; x++){
213
                                                                setCellValue(x, y, iBand, orgLayer.getCellValueAsDouble(x, y, iBand));
214
                                                        }
215
                                                }
216
                                        }
217
                                }
218
                        }
219
                }
220
        }
221
222
        public String getName() {
223
224
                if (m_BaseDataObject instanceof FLyrRasterSE) {
225
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
226
                        return layer.getName();
227
                }
228
                else if (m_BaseDataObject instanceof RasterMemoryDriver) {
229
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
230
                        return layer.getName();
231
                }
232
233
                return null;
234
235
        }
236
237
        public void postProcess() {
238
239
                if (m_BaseDataObject instanceof RasterMemoryDriver) {
240
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
241
                        if (layer.export(m_sFilename, m_Projection)){
242
                                FLyrRasterSE rasterLayer = (FLyrRasterSE) FileTools.openLayer(m_sFilename,
243
                                                                                        layer.getName(), null);
244
                                create(rasterLayer);
245
                                rasterLayer.setNoDataValue(layer.getNoDataValue());
246
                                System.gc();
247
                        }
248
                }
249
250
        }
251
252
        public void open() {
253
254
                if (m_BaseDataObject instanceof FLyrRasterSE) {
255
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
256
                        try {
257
                                layerGrid = layer.getReadOnlyFullGrid(false);
258
                        } catch (GridException e) {
259
                                e.printStackTrace();
260
                        } catch (InterruptedException e) {
261
                                e.printStackTrace();
262
                        }
263
                }
264
265
        }
266
267
        public void close() {
268
269
                if (m_BaseDataObject instanceof FLyrRasterSE) {
270 31 nbrodin
                        //FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
271 20 nbrodin
                        if(layerGrid != null)
272
                                layerGrid.getRasterBuf().free();
273
                        layerGrid = null;
274
                }
275
276
        }
277
278
        public Rectangle2D getFullExtent() {
279
280
                if (m_BaseDataObject instanceof FLyrRasterSE) {
281
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
282
                        try{
283
                                Envelope env=layer.getFullEnvelope();
284
                                return new Rectangle2D.Double(env.getMinimum(0),env.getMinimum(1),env.getLength(0),env.getLength(1));
285
                        }catch(Exception e){
286
                                return null;
287
                        }
288
                }
289
                else if (m_BaseDataObject instanceof RasterMemoryDriver) {
290
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
291
                        return layer.getGridExtent().getAsRectangle2D();
292
                }
293
294
                return null;
295
296
        }
297
298
        public GridExtent getLayerGridExtent() {
299
300
                if (m_BaseDataObject instanceof FLyrRasterSE) {
301
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
302
                        try{
303
                                GridExtent extent = new GridExtent();
304
                                extent.setXRange(layer.getMinX(), layer.getMaxX());
305
                                extent.setYRange(layer.getMinY(), layer.getMaxY());
306
                                extent.setCellSize(layer.getCellSize());
307
                                return extent;
308
                        }catch(Exception e){
309
                                return null;
310
                        }
311
                }
312
                else if (m_BaseDataObject instanceof RasterMemoryDriver) {
313
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
314
                        return layer.getGridExtent();
315
                }
316
317
                return null;
318
319
        }
320
321
        public double getLayerCellSize() {
322
323
                if (m_BaseDataObject instanceof FLyrRasterSE) {
324
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
325
                        return layer.getCellSize();
326
                }
327
                else if (m_BaseDataObject instanceof RasterMemoryDriver) {
328
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
329
                        return layer.getGridExtent().getCellSize();
330
                }
331
332
                return 0;
333
334
        }
335
336
        public String getFilename() {
337
338
                if (m_BaseDataObject instanceof FLyrRasterSE) {
339
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
340
                        return layer.getDataSource().getDataset(0)[0].getFName();
341
                }
342
                else if (m_BaseDataObject instanceof RasterMemoryDriver) {
343
                        return m_sFilename;
344
                }
345
346
                return "";
347
348
        }
349
350
351
        public Object getCRS() {
352
353
                return m_Projection;
354
355
        }
356
357
358
        public void setName(String name) {
359
360
                if (m_BaseDataObject instanceof FLyrRasterSE) {
361
                        FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
362
                        layer.setName(name);
363
                }
364
                else if (m_BaseDataObject instanceof RasterMemoryDriver) {
365
                        RasterMemoryDriver layer = (RasterMemoryDriver) m_BaseDataObject;
366
                        layer.setName(name);
367
                };
368
369
        }
370
371
}