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 / RasterGdalStoreProviderCreate.java @ 6697

History | View | Annotate | Download (3.29 KB)

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

    
3
import java.io.File;
4
import java.io.IOException;
5

    
6
import org.cresques.cts.ICRSFactory;
7
import org.cresques.cts.IProjection;
8
import org.gdal.gdal.Dataset;
9
import org.gdal.gdal.Driver;
10
import org.gvsig.fmap.dal.exception.CreateException;
11
import org.gvsig.fmap.dal.exception.InitializeException;
12
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
13
import org.gvsig.raster.lib.buffer.api.Buffer;
14
import org.gvsig.tools.dynobject.DynObject;
15

    
16
/**
17
 * Raster GDAL store provider that stores new raster through create method
18
 * @author dmartinezizquierdo
19
 *
20
 */
21
public class RasterGdalStoreProviderCreate extends DefaultRasterGdalStoreProvider {
22

    
23
    protected RasterGdalStoreProviderCreate(RasterGdalFileStoreParameters params,
24
        DataStoreProviderServices storeServices, DynObject metadata) throws InitializeException {
25
        super(params, storeServices, metadata);
26
    }
27

    
28
    /**
29
     * Constructor
30
     *
31
     * @param params
32
     * @param storeServices
33
     * @throws InitializeException
34
     */
35
    public RasterGdalStoreProviderCreate(RasterGdalFileStoreParameters params, DataStoreProviderServices storeServices)
36
        throws InitializeException {
37
        super(params, storeServices);
38
    }
39

    
40
    protected RasterGdalStoreProviderCreate(NewRasterGdalStoreParameters params, Driver gdalDriver) {
41
        super(params, gdalDriver);
42
    }
43

    
44
    @Override
45
    public void store(boolean overwrite) throws CreateException {
46
        NewRasterGdalStoreParameters newRasterParams = (NewRasterGdalStoreParameters) this.getParameters();
47
        File file = newRasterParams.getFile();
48
        Buffer buffer = newRasterParams.getBuffer();
49

    
50
        String[] options = getStoringOptions(newRasterParams);
51

    
52
        if (file.exists() && !overwrite) {
53
            throw new CreateException("File already exists: " + file.toString(), null);
54
        }
55
        Dataset gdalDataset = null;
56
        IProjection projection = buffer.getProjection();
57
        try {
58
            if (options.length == 0) {
59
                gdalDataset =
60
                    gdalDriver.Create(file.getAbsolutePath(), buffer.getColumns(), buffer.getRows(),
61
                        buffer.getBandCount(), getGdalTypeFromRasterBufType(buffer.getBandTypes()[0]));
62
            } else {
63
                gdalDataset =
64
                    gdalDriver.Create(file.getAbsolutePath(), buffer.getColumns(), buffer.getRows(),
65
                        buffer.getBandCount(), getGdalTypeFromRasterBufType(buffer.getBandTypes()[0]), options);
66
            }
67

    
68
            if (projection != null) {
69
                String wkt = projection.export(ICRSFactory.FORMAT_WKT_ESRI);
70
                gdalDataset.SetProjection(wkt);
71
            }
72
            gdalDataset.SetGeoTransform(createGeoTransform(buffer));
73

    
74
            fillDataset(buffer, gdalDataset);
75
            gdalDataset.FlushCache();
76
        } finally {
77
            if (gdalDataset != null) {
78
                gdalDataset.delete();
79
            }
80
        }
81
        // Create WLD
82
        try {
83
            createWorldFile(file, buffer);
84
        } catch (IOException e) {
85
            throw new CreateException("WLD File", e);
86
        }
87

    
88
        // Create PRJ file
89
        try {
90
            savePrjFile(file, projection);
91
        } catch (IOException e) {
92
            throw new CreateException("PRJ File", e);
93
        }
94
    }
95
}