Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.raster / org.gvsig.raster.gdal / org.gvsig.raster.gdal.provider / src / main / java / org / gvsig / raster / gdal / provider / RasterGdalBandPageManager.java @ 6302

History | View | Annotate | Download (3.65 KB)

1
package org.gvsig.raster.gdal.provider;
2

    
3
import java.io.IOException;
4
import java.nio.Buffer;
5
import java.nio.ByteBuffer;
6
import java.nio.DoubleBuffer;
7
import java.nio.FloatBuffer;
8
import java.nio.IntBuffer;
9
import java.nio.ShortBuffer;
10
import java.util.ArrayList;
11
import java.util.Hashtable;
12
import java.util.LinkedHashMap;
13
import java.util.Map;
14
import java.util.Set;
15

    
16
import org.gdal.gdal.Band;
17
import org.gdal.gdal.Dataset;
18
import org.gvsig.raster.lib.buffer.api.BandInfo;
19
import org.gvsig.raster.lib.buffer.api.BandPageManager;
20
import org.gvsig.raster.lib.buffer.api.BufferLocator;
21
import org.gvsig.raster.lib.buffer.api.BufferManager;
22

    
23
/**
24
 * Band Page Manager for a Memory Image
25
 * 
26
 * @author dmartinezizquierdo
27
 *
28
 */
29
public class RasterGdalBandPageManager implements BandPageManager {
30

    
31
    private Band gdalBand;
32
    private Dataset gdalDataSet;
33

    
34
    /**
35
     * @param gdalDataSet
36
     * @param bandNumber
37
     */
38
    public RasterGdalBandPageManager(Dataset gdalDataSet, int bandNumber) {
39
        this.gdalDataSet = gdalDataSet;
40
        this.gdalBand = gdalDataSet.GetRasterBand(bandNumber);
41
    }
42

    
43
    @Override
44
    public boolean isSupportedSave() {
45
        return false;
46
    }
47

    
48
    @Override
49
    public void load(Buffer buffer, int firstRow, int numberRows, int dataType) throws IOException {
50

    
51
        int xOffset = 0;
52
        int xSize = gdalDataSet.getRasterXSize();
53
        int yOffset = firstRow;
54
        int ySize = numberRows;
55

    
56
        switch (dataType) {
57
        case BufferManager.TYPE_INT:
58
            gdalBand.ReadRaster(xOffset, yOffset, xSize, ySize, ((IntBuffer) buffer).array());
59
            break;
60
        case BufferManager.TYPE_BYTE:
61
            gdalBand.ReadRaster(xOffset, yOffset, xSize, ySize, ((ByteBuffer) buffer).array());
62
            break;
63
        case BufferManager.TYPE_DOUBLE:
64
            gdalBand.ReadRaster(xOffset, yOffset, xSize, ySize, ((DoubleBuffer) buffer).array());
65
            break;
66
        case BufferManager.TYPE_FLOAT:
67
            gdalBand.ReadRaster(xOffset, yOffset, xSize, ySize, ((FloatBuffer) buffer).array());
68
            break;
69
        case BufferManager.TYPE_SHORT:
70
        case BufferManager.TYPE_USHORT:
71
            gdalBand.ReadRaster(xOffset, yOffset, xSize, ySize, ((ShortBuffer) buffer).array());
72
            break;
73
        }
74
    }
75

    
76
    @Override
77
    public void save(Buffer buffer, int row, int rows, int dataType) throws IOException {
78
        throw new UnsupportedOperationException();
79

    
80
    }
81

    
82
    @Override
83
    public BandInfo getBandInfo() {
84
        
85
        //TODO
86
        BufferManager bufferManager = BufferLocator.getBufferManager();
87
        String description = gdalBand.GetDescription();
88

    
89
        Map<Object, Object> values = new LinkedHashMap<Object, Object>();
90
        values.put("X size", gdalBand.getXSize());
91
        values.put("Y size", gdalBand.getYSize());
92
        values.put("Data type",
93
            RasterGdalStoreProvider.getRasterBufTypeFromGdalType(gdalBand.getDataType()));
94
        values.put("NoData value", this.getNoData(gdalBand));
95
        values.put("Block X size", gdalBand.GetBlockXSize());
96
        values.put("Block Y size", gdalBand.GetBlockYSize());
97
        values.put("Unit type", gdalBand.GetUnitType());
98

    
99
        Hashtable metadataDict = gdalBand.GetMetadata_Dict();
100
        Set keySet = metadataDict.keySet();
101
        for (Object object : keySet) {
102
            values.put(object, metadataDict.get(keySet));
103
        }
104

    
105
        return bufferManager.createBandInfo(gdalBand.GetBand(), String.valueOf(gdalBand.GetBand()),
106
            description, new ArrayList<Map.Entry<Object, Object>>(values.entrySet()));
107
    }
108

    
109
    private Object getNoData(Band gdalBand2) {
110
        // TODO Auto-generated method stub
111
        return null;
112
    }
113

    
114
}