Statistics
| Revision:

svn-gvsig-desktop / import / ext3D / trunk / ext3D / src / com / iver / ai2 / gvsig3d / cacheservices / CMSFileRasterService.java @ 15221

History | View | Annotate | Download (3.01 KB)

1
package com.iver.ai2.gvsig3d.cacheservices;
2

    
3
import java.awt.Image;
4
import java.awt.image.BufferedImage;
5
import java.io.File;
6
import java.io.IOException;
7

    
8
import javax.imageio.ImageIO;
9

    
10
import org.cresques.cts.ProjectionPool;
11
import org.cresques.io.GeoRasterFile;
12
import org.cresques.px.Extent;
13
import org.gvsig.cacheservice.CacheServiceException;
14
import org.gvsig.cacheservice.RasterCacheService;
15
import org.gvsig.cacheservice.TileNum;
16

    
17

    
18

    
19
public class CMSFileRasterService extends RasterCacheService {
20
        private GeoRasterFile _rasterFile;
21
        private boolean _loadFailed = true;
22
        private Extent _extent;
23
        public CMSFileRasterService(String planet, String name) {
24
                super(planet, name);
25
                // TODO Auto-generated constructor stub
26
                if(GeoRasterFile.fileIsSupported(name)) {
27
//                        System.out.println("CMTexture2D: loadFile: "+name);
28
                        /// loading Raster File with CMS
29
                        //_rasterFile = GeoRasterFile.openFile(ProjectionPool.get("EPSG:23030"),name);
30
                        if(_rasterFile != null) {
31
                                _rasterFile.setBand(GeoRasterFile.RED_BAND, 0);
32
                                _rasterFile.setBand(GeoRasterFile.GREEN_BAND, 1);
33
                                _rasterFile.setBand(GeoRasterFile.BLUE_BAND, 2);
34
                                _extent = _rasterFile.getExtent();
35
                                setFullExtent(_extent.toRectangle2D());
36
                                //setBounds( _extent.toRectangle2D());
37
                                _loadFailed = false;
38
                        }
39
                }
40
        }
41

    
42

    
43
        private Extent checkExtent(Extent sz) {
44
            double vx = sz.minX();
45
            double vy = sz.minY();
46
            double vx2 = sz.maxX();
47
            double vy2 = sz.maxY();
48
            if (sz.minX() < _extent.minX()) {
49
                vx = _extent.minX();
50
            }
51

    
52
            if (sz.minY() < _extent.minY()) {
53
                vy = _extent.minY();
54
            }
55

    
56
            if (sz.maxX() > _extent.maxX()) {
57
                vx2 = _extent.maxX();
58
            }
59

    
60
            if (sz.maxY() > _extent.maxY()) {
61
                vy2 = _extent.maxY();
62
            }
63

    
64
            return new Extent(vx, vy, vx2, vy2);
65
        }
66

    
67
        private Image getTileFromCMSFile(String fName)
68
        {
69
                BufferedImage awtImage = null;
70
                _rasterFile.setView(checkExtent(new Extent(getBounds())));
71
                awtImage = (BufferedImage)_rasterFile.updateImage(256,256,null);
72
                try {
73
                        ImageIO.write(awtImage, getFileExtension().substring(0),
74
                                new File(fName));
75
                } catch (IOException e1) {
76
                        // TODO Auto-generated catch block
77
                        e1.printStackTrace();
78
                        return null;
79
                }
80
                return awtImage;
81
        }
82

    
83
        public String getTileAsFName(TileNum t) throws CacheServiceException {
84
                if(_loadFailed) { throw new CacheServiceException(new Exception()); }
85
                String tileId = t.numToOpTileId();
86
                String fName = getTileFileName(t);
87
//                System.out.println("CMTexture2D: requestTexture: "+tileId);
88
                if (!new File(fName).exists()) {
89
                        if(getTileFromCMSFile(fName)==null) return null;
90
                }
91
                return fName;
92
        }
93

    
94
        public Image getTileAsImage(TileNum tileNum) throws CacheServiceException {
95
                if(_loadFailed) { throw new CacheServiceException(new Exception()); }
96
                String tileId = tileNum.numToOpTileId();
97
                String fName = getTileFileName(tileNum);
98
                System.out.println("CMTexture2D: requestTexture: "+tileId);
99
                return getTileFromCMSFile(fName);
100
        }
101

    
102
}