Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.buffer / org.gvsig.raster.lib.buffer.impl / src / main / java / org / gvsig / raster / lib / buffer / impl / ClippedBuffer.java @ 6220

History | View | Annotate | Download (2.66 KB)

1
package org.gvsig.raster.lib.buffer.impl;
2

    
3
import java.util.ArrayList;
4

    
5
import org.slf4j.Logger;
6
import org.slf4j.LoggerFactory;
7

    
8
import org.gvsig.fmap.geom.operation.GeometryOperationException;
9
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
10
import org.gvsig.fmap.geom.primitive.Envelope;
11
import org.gvsig.raster.lib.buffer.api.Band;
12
import org.gvsig.raster.lib.buffer.api.Buffer;
13
import org.gvsig.raster.lib.buffer.api.BufferLocator;
14
import org.gvsig.raster.lib.buffer.api.BufferManager;
15
import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
16
import org.gvsig.raster.lib.buffer.impl.exceptions.CreateBufferException;
17

    
18

    
19
/**
20
 * This is like a view over a raster buffer.
21
 * It's for rendering purposes only.
22
 *
23
 * @author fdiaz
24
 *
25
 */
26
public class ClippedBuffer extends AbstractBuffer implements Buffer {
27

    
28
    protected static final Logger logger = LoggerFactory.getLogger(ClippedBuffer.class);
29

    
30
    Buffer buffer;
31
    int firstRow;
32
    int firstColumn;
33

    
34

    
35
    /**
36
     * @param buffer
37
     * @param envelope
38
     * @throws CreateBufferException
39
     */
40
    public ClippedBuffer(Buffer buffer, Envelope envelope) throws CreateBufferException {
41
        this.buffer = buffer;
42
        try {
43
            this.envelope = buffer.getEnvelope().getGeometry().intersection(envelope.getGeometry()).getEnvelope();
44
        } catch (GeometryOperationNotSupportedException | GeometryOperationException e1) {
45
            throw new CreateBufferException(e1);
46
        }
47
        this.rows = (int)Math.round(this.envelope.getLength(1)/this.buffer.getPixelSizeY());
48
        this.columns = (int)Math.round(this.envelope.getLength(0)/this.buffer.getPixelSizeX());
49

    
50
        this.firstRow = (int)(Math.round((this.envelope.getMinimum(1)-this.buffer.getEnvelope().getMinimum(1))/this.buffer.getPixelSizeY()));
51
        this.firstColumn = (int)(Math.round((this.envelope.getMinimum(0)-this.buffer.getEnvelope().getMinimum(0))/this.buffer.getPixelSizeX()));
52

    
53
        this.projection = buffer.getProjection();
54

    
55
        this.bands = new ArrayList<Band>();
56

    
57
        try {
58
            createBands(buffer.getBands());
59
        } catch (Exception e) {
60
            throw new CreateBufferException(e);
61
        }
62

    
63

    
64

    
65
    }
66

    
67
    private void createBands(Band[] bands) throws BandException {
68
        BufferManager bufferManager = BufferLocator.getBufferManager();
69

    
70
        for (int i = 0; i < bands.length; i++) {
71
            Band band = bufferManager.createClippedBand(this, bands[i]);
72
            this.bands.add(band);
73
            band.addObserver(this);
74

    
75
        }
76
    }
77

    
78
    protected int getFirstRow(){
79
        return this.firstRow;
80
    }
81

    
82
    protected int getFirstColumn(){
83
        return this.firstColumn;
84
    }
85

    
86
}