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
package org.gvsig.sextante.app.extension.core;
2

    
3
import java.awt.geom.Rectangle2D;
4

    
5
import org.cresques.cts.IProjection;
6
import org.gvsig.fmap.dal.store.raster.RasterStoreParameters;
7
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
        private IProjection     m_Projection      = null;
20
        private Grid            layerGrid         = null;
21
        private String          m_sFilename       = null;
22

    
23
        private double DEFAULT_NO_DATA_VALUE = -99999.;
24

    
25
        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
        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
                        //FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
148
                        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
                        //FLyrRasterSE layer = (FLyrRasterSE) m_BaseDataObject;
271
                        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
}