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 @ 6489

History | View | Annotate | Download (3.01 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)
25
        throws InitializeException {
26
        super(params, storeServices, metadata);
27
    }
28

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

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

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

    
52
        String[] options = getStoringOptions(newRasterParams);
53

    
54

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

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

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