Revision 999
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestReadWindowAndCompareData.java | ||
---|---|---|
1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
|
2 |
|
|
3 |
import java.io.IOException; |
|
4 |
|
|
5 |
import junit.framework.TestCase; |
|
6 |
|
|
7 |
import org.gvsig.jgdal.GdalException; |
|
8 |
import org.gvsig.raster.cache.buffer.Buffer; |
|
9 |
import org.gvsig.raster.cache.buffer.BufferParam; |
|
10 |
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException; |
|
11 |
import org.gvsig.raster.cache.buffer.impl.BufferCacheManagerImpl; |
|
12 |
import org.gvsig.raster.cache.buffer.impl.BufferParamImpl; |
|
13 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
|
14 |
import org.gvsig.raster.cache.buffer.impl.memory.RasterMemoryBuffer; |
|
15 |
|
|
16 |
/** |
|
17 |
* Read a number from cache |
|
18 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
|
19 |
*/ |
|
20 |
public class TestReadWindowAndCompareData extends TestCase { |
|
21 |
private String in = "./src/test/resources/image/001m09_1_0.tif"; |
|
22 |
private int initX = 200; |
|
23 |
private int initY = 200; |
|
24 |
private int w = 400; |
|
25 |
private int h = 400; |
|
26 |
|
|
27 |
public void start() { |
|
28 |
this.setUp(); |
|
29 |
this.testStack(); |
|
30 |
} |
|
31 |
|
|
32 |
public void setUp() { |
|
33 |
System.err.println("ROCache TestReadTiffAndCompareData running..."); |
|
34 |
} |
|
35 |
|
|
36 |
public void testStack() { |
|
37 |
long t1 = System.currentTimeMillis(); |
|
38 |
GdalRead input = null; |
|
39 |
|
|
40 |
BufferCacheManagerImpl.cacheSize = 1; |
|
41 |
BufferCacheManagerImpl.pageSize = 0.2; |
|
42 |
|
|
43 |
Buffer buf1 = null; |
|
44 |
try { |
|
45 |
input = new GdalRead(in); |
|
46 |
|
|
47 |
Object dataIn = input.readBlock(initX, initY, w, h); |
|
48 |
|
|
49 |
//Create Buffer |
|
50 |
buf1 = new RasterMemoryBuffer(input.getRasterBufTypeFromGdalType(input.getDataType()), |
|
51 |
w, |
|
52 |
h, |
|
53 |
input.getBandCount(), |
|
54 |
true); |
|
55 |
|
|
56 |
//Set data to buffer |
|
57 |
setLines(dataIn, buf1); |
|
58 |
} catch (GdalException e1) { |
|
59 |
e1.printStackTrace(); |
|
60 |
} catch (IOException e1) { |
|
61 |
e1.printStackTrace(); |
|
62 |
} catch (InterruptedException e1) { |
|
63 |
e1.printStackTrace(); |
|
64 |
} catch (OperationNotSupportedException e1) { |
|
65 |
e1.printStackTrace(); |
|
66 |
} |
|
67 |
|
|
68 |
RasterReadOnlyBuffer buf = null; |
|
69 |
try { |
|
70 |
BufferParam p = new BufferParamImpl(in, initX, initY, w, h, new int[]{0, 1, 2}); |
|
71 |
buf = new RasterReadOnlyBuffer(p); |
|
72 |
} catch (IOException e) { |
|
73 |
e.printStackTrace(); |
|
74 |
} |
|
75 |
|
|
76 |
|
|
77 |
for (int iBand = 0; iBand < buf.getBandCount(); iBand++) { |
|
78 |
for (int row = 0; row < buf.getHeight(); row++) { |
|
79 |
for (int col = 0; col < buf.getWidth(); col++) { |
|
80 |
byte n = buf.getElemByte(row, col, iBand); |
|
81 |
byte m = buf1.getElemByte(row, col, iBand); |
|
82 |
if(n != m) |
|
83 |
System.out.println(row + " " + col); |
|
84 |
assertEquals(n, m); |
|
85 |
} |
|
86 |
} |
|
87 |
} |
|
88 |
|
|
89 |
try { |
|
90 |
buf.free(); |
|
91 |
} catch (IOException e) { |
|
92 |
// TODO Auto-generated catch block |
|
93 |
e.printStackTrace(); |
|
94 |
} |
|
95 |
|
|
96 |
long t2 = System.currentTimeMillis(); |
|
97 |
System.out.println("Tiempo ROCache TestRWOneValue: " + (t2 - t1) + " milisegundos"); |
|
98 |
} |
|
99 |
|
|
100 |
private void setLines(Object dataIn, Buffer buf) throws OperationNotSupportedException { |
|
101 |
if(dataIn instanceof byte[][][]) { |
|
102 |
byte[][][] d = (byte[][][])dataIn; |
|
103 |
for (int iBand = 0; iBand < d.length; iBand++) { |
|
104 |
for (int row = 0; row < d[iBand].length; row++) { |
|
105 |
buf.setLineInBandByte(d[iBand][row], row, iBand); |
|
106 |
} |
|
107 |
} |
|
108 |
} |
|
109 |
} |
|
110 |
|
|
111 |
} |
|
0 | 112 |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestReadTiffAndCompareData.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 | 7 |
import org.gvsig.jgdal.GdalException; |
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
10 | 8 |
import org.gvsig.raster.cache.buffer.Buffer; |
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 10 |
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException; |
12 | 11 |
import org.gvsig.raster.cache.buffer.impl.BufferCacheManagerImpl; |
13 | 12 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
... | ... | |
69 | 68 |
} catch (IOException e) { |
70 | 69 |
e.printStackTrace(); |
71 | 70 |
} |
72 |
RasterReadOnlyBuffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 2571, 1942, 3, ds);
|
|
71 |
RasterReadOnlyBuffer buf = new RasterReadOnlyBuffer(ds); |
|
73 | 72 |
|
74 | 73 |
for (int iBand = 0; iBand < buf.getBandCount(); iBand++) { |
75 | 74 |
for (int row = 0; row < buf.getHeight(); row++) { |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestAssignBand.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 | 7 |
import org.gvsig.jgdal.GdalException; |
9 | 8 |
import org.gvsig.raster.cache.buffer.Band; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 9 |
import org.gvsig.raster.cache.buffer.Buffer; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
12 | 11 |
import org.gvsig.raster.cache.buffer.exception.BandNotCompatibleException; |
13 |
import org.gvsig.raster.cache.buffer.impl.RasterBuffer; |
|
14 | 12 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
15 | 13 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
16 | 14 |
import org.gvsig.raster.cache.buffer.impl.io.GdalWrite; |
... | ... | |
48 | 46 |
} catch (IOException e) { |
49 | 47 |
e.printStackTrace(); |
50 | 48 |
} |
51 |
Buffer buf1 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
52 |
input1.getWidth(), |
|
53 |
input1.getHeight(), |
|
54 |
input1.getBandCount(), |
|
55 |
ds); |
|
49 |
Buffer buf1 = new RasterReadOnlyBuffer(ds); |
|
56 | 50 |
|
57 | 51 |
BufferDataSource ds1 = null; |
58 | 52 |
try { |
... | ... | |
60 | 54 |
} catch (IOException e) { |
61 | 55 |
e.printStackTrace(); |
62 | 56 |
} |
63 |
Buffer buf2 = new RasterReadOnlyBuffer(RasterBuffer.TYPE_BYTE, |
|
64 |
input1.getWidth(), |
|
65 |
input1.getHeight(), |
|
66 |
input1.getBandCount(), |
|
67 |
ds1); |
|
57 |
Buffer buf2 = new RasterReadOnlyBuffer(ds1); |
|
68 | 58 |
|
69 | 59 |
Band rb = buf2.getBand(2); |
70 | 60 |
try { |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestMultifile.java | ||
---|---|---|
1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
|
2 |
|
|
3 |
import java.io.IOException; |
|
4 |
|
|
5 |
import junit.framework.TestCase; |
|
6 |
|
|
7 |
import org.gvsig.jgdal.GdalException; |
|
8 |
import org.gvsig.raster.cache.buffer.Buffer; |
|
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
10 |
import org.gvsig.raster.cache.buffer.BufferParam; |
|
11 |
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException; |
|
12 |
import org.gvsig.raster.cache.buffer.impl.BufferParamImpl; |
|
13 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
|
14 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
|
15 |
import org.gvsig.raster.cache.buffer.impl.io.GdalWrite; |
|
16 |
|
|
17 |
/** |
|
18 |
* This test gets bands from a raster with the method getBufferWithOneBand() and compare |
|
19 |
* each band from original source with obtained bands |
|
20 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
|
21 |
*/ |
|
22 |
public class TestMultifile extends TestCase { |
|
23 |
private String rasterIn = "./src/test/resources/image/001m09_1_0.tif"; |
|
24 |
private String rasterOut1 = "/tmp/out-b1.tif"; |
|
25 |
private String rasterOut2 = "/tmp/out-b2.tif"; |
|
26 |
private String rasterOut3 = "/tmp/out-b3.tif"; |
|
27 |
private int x = 200; |
|
28 |
private int y = 200; |
|
29 |
private int w = 800; |
|
30 |
private int h = 800; |
|
31 |
|
|
32 |
public void start() { |
|
33 |
this.setUp(); |
|
34 |
this.testStack(); |
|
35 |
} |
|
36 |
|
|
37 |
public void setUp() { |
|
38 |
System.err.println("ROCache TestGetBufferWithOneBand running..."); |
|
39 |
} |
|
40 |
|
|
41 |
public void testStack() { |
|
42 |
long t1 = System.currentTimeMillis(); |
|
43 |
GdalRead input = null; |
|
44 |
try { |
|
45 |
//Read input data |
|
46 |
input = new GdalRead(rasterIn); |
|
47 |
|
|
48 |
BufferDataSource ds = null; |
|
49 |
try { |
|
50 |
ds = new BufferDataSourceImpl(rasterIn); |
|
51 |
} catch (IOException e) { |
|
52 |
e.printStackTrace(); |
|
53 |
} |
|
54 |
Buffer buf = new RasterReadOnlyBuffer(ds); |
|
55 |
|
|
56 |
Buffer b0 = buf.getBufferWithOneBand(0); |
|
57 |
Buffer b1 = buf.getBufferWithOneBand(1); |
|
58 |
Buffer b2 = buf.getBufferWithOneBand(2); |
|
59 |
|
|
60 |
//Write output file |
|
61 |
GdalWrite out1 = new GdalWrite(rasterOut1, 1, input.getDataType(), input.getWidth(), input.getHeight(), GdalWrite.COLOR_INTERP_GRAY); |
|
62 |
out1.writeBands(b0.getBands()); |
|
63 |
out1.close(); |
|
64 |
|
|
65 |
GdalWrite out2 = new GdalWrite(rasterOut2, 1, input.getDataType(), input.getWidth(), input.getHeight(), GdalWrite.COLOR_INTERP_GRAY); |
|
66 |
out2.writeBands(b1.getBands()); |
|
67 |
out2.close(); |
|
68 |
|
|
69 |
GdalWrite out3 = new GdalWrite(rasterOut3, 1, input.getDataType(), input.getWidth(), input.getHeight(), GdalWrite.COLOR_INTERP_GRAY); |
|
70 |
out3.writeBands(b2.getBands()); |
|
71 |
out3.close(); |
|
72 |
|
|
73 |
BufferParam params = new BufferParamImpl( |
|
74 |
new String[]{rasterOut1, rasterOut2, rasterOut3}, |
|
75 |
x, y, w, h, null); |
|
76 |
RasterReadOnlyBuffer multiband = new RasterReadOnlyBuffer(params); |
|
77 |
|
|
78 |
for (int row = 0; row < multiband.getHeight(); row++) { |
|
79 |
for (int col = 0; col < multiband.getWidth(); col++) { |
|
80 |
byte b_0 = multiband.getElemByte(row, col, 0); |
|
81 |
byte b_1 = multiband.getElemByte(row, col, 1); |
|
82 |
byte b_2 = multiband.getElemByte(row, col, 2); |
|
83 |
assertEquals(b_0, b0.getElemByte(row + y, col + x, 0)); |
|
84 |
assertEquals(b_1, b1.getElemByte(row + y, col + x, 0)); |
|
85 |
assertEquals(b_2, b2.getElemByte(row + y, col + x, 0)); |
|
86 |
} |
|
87 |
} |
|
88 |
|
|
89 |
b0.free(); |
|
90 |
b1.free(); |
|
91 |
b2.free(); |
|
92 |
buf.free(); |
|
93 |
|
|
94 |
} catch (GdalException e) { |
|
95 |
e.printStackTrace(); |
|
96 |
} catch (IOException e) { |
|
97 |
e.printStackTrace(); |
|
98 |
} catch (OperationNotSupportedException e) { |
|
99 |
e.printStackTrace(); |
|
100 |
} |
|
101 |
long t2 = System.currentTimeMillis(); |
|
102 |
System.out.println("Tiempo ROCache TestGetBufferWithOneBand: " + (t2 - t1) + " milisegundos"); |
|
103 |
} |
|
104 |
|
|
105 |
} |
|
0 | 106 |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/AllTests.java | ||
---|---|---|
14 | 14 |
suite.addTestSuite(TestSwapTwoBands.class); |
15 | 15 |
suite.addTestSuite(TestRemoveBand.class); |
16 | 16 |
suite.addTestSuite(TestGetBufferWithOneBand.class); |
17 |
suite.addTestSuite(TestReadWindowAndCompareData.class); |
|
17 | 18 |
suite.addTestSuite(TestAssignBand.class); |
18 | 19 |
suite.addTestSuite(TestCopyBand.class); |
19 | 20 |
suite.addTestSuite(TestAddBand.class); |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestGetBufferWithOneBand.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 | 7 |
import org.gvsig.jgdal.GdalException; |
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
10 | 8 |
import org.gvsig.raster.cache.buffer.Buffer; |
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 10 |
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException; |
12 | 11 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
13 | 12 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
... | ... | |
46 | 45 |
} catch (IOException e) { |
47 | 46 |
e.printStackTrace(); |
48 | 47 |
} |
49 |
Buffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
50 |
input.getWidth(), |
|
51 |
input.getHeight(), |
|
52 |
input.getBandCount(), |
|
53 |
ds); |
|
48 |
Buffer buf = new RasterReadOnlyBuffer(ds); |
|
54 | 49 |
|
55 | 50 |
Buffer b0 = buf.getBufferWithOneBand(0); |
56 | 51 |
Buffer b1 = buf.getBufferWithOneBand(1); |
... | ... | |
68 | 63 |
GdalWrite out3 = new GdalWrite(rasterOut3, 1, input.getDataType(), input.getWidth(), input.getHeight(), GdalWrite.COLOR_INTERP_GRAY); |
69 | 64 |
out3.writeBands(b2.getBands()); |
70 | 65 |
out3.close(); |
71 |
|
|
66 |
|
|
72 | 67 |
for (int row = 0; row < buf.getHeight(); row++) { |
73 | 68 |
for (int col = 0; col < buf.getWidth(); col++) { |
74 | 69 |
byte b_0 = buf.getElemByte(row, col, 0); |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestSwapTwoBands.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 |
import org.gvsig.jgdal.GdalException; |
|
9 | 7 |
import org.gvsig.raster.cache.buffer.Band; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 8 |
import org.gvsig.raster.cache.buffer.Buffer; |
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
12 | 10 |
import org.gvsig.raster.cache.buffer.exception.WrongParameterException; |
13 | 11 |
import org.gvsig.raster.cache.buffer.impl.BufferCacheManagerImpl; |
14 | 12 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
15 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
|
16 | 13 |
|
17 | 14 |
/** |
18 | 15 |
* This test swap two bands of a raster and save the result in other file. |
... | ... | |
34 | 31 |
|
35 | 32 |
public void testStack() { |
36 | 33 |
long t1 = System.currentTimeMillis(); |
37 |
GdalRead input1 = null; |
|
38 | 34 |
try { |
39 | 35 |
//Reducimos el tama?o de la cache para una prueba con menos datos |
40 | 36 |
BufferCacheManagerImpl.cacheSize = 2; |
41 | 37 |
BufferCacheManagerImpl.pageSize = 0.2; |
42 | 38 |
|
43 |
//Read input data |
|
44 |
input1 = new GdalRead(rasterIn); |
|
45 |
|
|
46 | 39 |
BufferDataSource ds = null; |
47 | 40 |
try { |
48 | 41 |
ds = new BufferDataSourceImpl(rasterIn); |
... | ... | |
51 | 44 |
} |
52 | 45 |
|
53 | 46 |
//Create Buffer |
54 |
Buffer buf1 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
55 |
input1.getWidth(), |
|
56 |
input1.getHeight(), |
|
57 |
input1.getBandCount(), |
|
58 |
ds); |
|
47 |
Buffer buf1 = new RasterReadOnlyBuffer(ds); |
|
59 | 48 |
|
60 |
Buffer buf2 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
61 |
input1.getWidth(), |
|
62 |
input1.getHeight(), |
|
63 |
input1.getBandCount(), |
|
64 |
ds); |
|
49 |
Buffer buf2 = new RasterReadOnlyBuffer(ds); |
|
65 | 50 |
|
66 | 51 |
try { |
67 | 52 |
buf2.swapBands(0, 2); |
... | ... | |
83 | 68 |
|
84 | 69 |
buf1.free(); |
85 | 70 |
buf2.free(); |
86 |
} catch (GdalException e) { |
|
87 |
e.printStackTrace(); |
|
88 | 71 |
} catch (IOException e) { |
89 | 72 |
e.printStackTrace(); |
90 | 73 |
} |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestAddBand.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 |
import org.gvsig.jgdal.GdalException; |
|
9 | 7 |
import org.gvsig.raster.cache.buffer.Band; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 8 |
import org.gvsig.raster.cache.buffer.Buffer; |
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
12 | 10 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
13 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
|
14 | 11 |
|
15 | 12 |
/** |
16 | 13 |
* This test add a band in a raster of 3 bands. As a result of this test a raster |
... | ... | |
34 | 31 |
|
35 | 32 |
public void testStack() { |
36 | 33 |
long t1 = System.currentTimeMillis(); |
37 |
GdalRead input = null; |
|
38 | 34 |
try { |
39 | 35 |
//Read input data |
40 |
input = new GdalRead(rasterIn); |
|
41 | 36 |
|
42 | 37 |
BufferDataSource ds = null; |
43 | 38 |
try { |
... | ... | |
45 | 40 |
} catch (IOException e) { |
46 | 41 |
e.printStackTrace(); |
47 | 42 |
} |
48 |
Buffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
49 |
input.getWidth(), |
|
50 |
input.getHeight(), |
|
51 |
input.getBandCount(), |
|
52 |
ds); |
|
43 |
Buffer buf = new RasterReadOnlyBuffer(ds); |
|
53 | 44 |
buf.addBand(1); |
54 | 45 |
|
55 | 46 |
Band band = buf.getBand(1); |
... | ... | |
61 | 52 |
} |
62 | 53 |
|
63 | 54 |
buf.free(); |
64 |
} catch (GdalException e) { |
|
65 |
e.printStackTrace(); |
|
66 | 55 |
} catch (IOException e) { |
67 | 56 |
e.printStackTrace(); |
68 | 57 |
} |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestReplicateBand.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 | 7 |
import org.gvsig.jgdal.GdalException; |
9 | 8 |
import org.gvsig.raster.cache.buffer.Band; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 9 |
import org.gvsig.raster.cache.buffer.Buffer; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
12 | 11 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
13 | 12 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
14 | 13 |
import org.gvsig.raster.cache.buffer.impl.io.GdalWrite; |
... | ... | |
47 | 46 |
} catch (IOException e) { |
48 | 47 |
e.printStackTrace(); |
49 | 48 |
} |
50 |
Buffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
51 |
input1.getWidth(), |
|
52 |
input1.getHeight(), |
|
53 |
input1.getBandCount(), |
|
54 |
ds); |
|
49 |
Buffer buf = new RasterReadOnlyBuffer(ds); |
|
55 | 50 |
|
56 | 51 |
buf.replicateBand(0, 3); |
57 | 52 |
|
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestCopyBand.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 |
import org.gvsig.jgdal.GdalException; |
|
9 | 7 |
import org.gvsig.raster.cache.buffer.Band; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 8 |
import org.gvsig.raster.cache.buffer.Buffer; |
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
12 | 10 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
13 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
|
14 | 11 |
|
15 | 12 |
/** |
16 | 13 |
* Copy the band 0 from a buffer over the band 2 in the same buffer using the |
... | ... | |
31 | 28 |
|
32 | 29 |
public void testStack() { |
33 | 30 |
long t1 = System.currentTimeMillis(); |
34 |
GdalRead input = null; |
|
35 | 31 |
|
36 | 32 |
try { |
37 |
//Read input data |
|
38 |
input = new GdalRead(rasterIn); |
|
39 |
|
|
40 | 33 |
BufferDataSource ds = null; |
41 | 34 |
try { |
42 | 35 |
ds = new BufferDataSourceImpl(rasterIn); |
43 | 36 |
} catch (IOException e) { |
44 | 37 |
e.printStackTrace(); |
45 | 38 |
} |
46 |
Buffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
47 |
input.getWidth(), |
|
48 |
input.getHeight(), |
|
49 |
input.getBandCount(), |
|
50 |
ds); |
|
39 |
Buffer buf = new RasterReadOnlyBuffer(ds); |
|
51 | 40 |
|
52 | 41 |
Band rb = buf.getBandCopy(0); |
53 | 42 |
|
... | ... | |
61 | 50 |
} |
62 | 51 |
|
63 | 52 |
buf.free(); |
64 |
} catch (GdalException e) { |
|
65 |
e.printStackTrace(); |
|
66 | 53 |
} catch (IOException e) { |
67 | 54 |
e.printStackTrace(); |
68 | 55 |
} |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestRemoveBand.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 | 7 |
import org.gvsig.jgdal.GdalException; |
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
10 | 8 |
import org.gvsig.raster.cache.buffer.Buffer; |
9 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 10 |
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException; |
12 | 11 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
13 | 12 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
... | ... | |
56 | 55 |
} catch (IOException e) { |
57 | 56 |
e.printStackTrace(); |
58 | 57 |
} |
59 |
Buffer buf2 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
60 |
input.getWidth(), |
|
61 |
input.getHeight(), |
|
62 |
input.getBandCount(), |
|
63 |
ds); |
|
58 |
Buffer buf2 = new RasterReadOnlyBuffer(ds); |
|
64 | 59 |
|
65 | 60 |
//Remove bands |
66 | 61 |
buf2.removeBand(1); |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestSwapBands.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl.rocache; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 | 7 |
import org.gvsig.jgdal.GdalException; |
9 | 8 |
import org.gvsig.raster.cache.buffer.Band; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 9 |
import org.gvsig.raster.cache.buffer.Buffer; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
12 | 11 |
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException; |
13 | 12 |
import org.gvsig.raster.cache.buffer.exception.WrongParameterException; |
14 | 13 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
... | ... | |
62 | 61 |
} catch (IOException e) { |
63 | 62 |
e.printStackTrace(); |
64 | 63 |
} |
65 |
RasterReadOnlyBuffer buf1 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
66 |
input1.getWidth(), |
|
67 |
input1.getHeight(), |
|
68 |
input1.getBandCount(), |
|
69 |
ds); |
|
64 |
RasterReadOnlyBuffer buf1 = new RasterReadOnlyBuffer(ds); |
|
70 | 65 |
try { |
71 | 66 |
buf2.swapBands(new int[]{2, 0, 1}); |
72 | 67 |
buf1.swapBands(new int[]{2, 0, 1}); |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/TestStatistics.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl; |
2 | 2 |
|
3 |
import java.awt.image.DataBuffer; |
|
4 | 3 |
import java.io.IOException; |
5 | 4 |
|
6 | 5 |
import junit.framework.TestCase; |
7 | 6 |
|
8 | 7 |
import org.gvsig.jgdal.GdalException; |
9 | 8 |
import org.gvsig.raster.cache.buffer.Band; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
11 | 9 |
import org.gvsig.raster.cache.buffer.Buffer; |
10 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
12 | 11 |
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException; |
13 | 12 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
14 | 13 |
import org.gvsig.raster.cache.buffer.impl.io.GdalRead; |
... | ... | |
75 | 74 |
} catch (IOException e) { |
76 | 75 |
e.printStackTrace(); |
77 | 76 |
} |
78 |
buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, |
|
79 |
input.getWidth(), |
|
80 |
input.getHeight(), |
|
81 |
input.getBandCount(), |
|
82 |
ds); |
|
77 |
buf = new RasterReadOnlyBuffer(ds); |
|
83 | 78 |
buf.getStatistics().calculate(); |
84 | 79 |
test(buf); |
85 | 80 |
buf.free(); |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/BufferCacheManagerImpl.java | ||
---|---|---|
79 | 79 |
params.getBandCount()); |
80 | 80 |
|
81 | 81 |
if (forceBuffer == BufferCacheManager.READ_ONLY_CACHE) |
82 |
return new RasterReadOnlyBuffer(params.getDataSource()); |
|
82 |
return new RasterReadOnlyBuffer(params.getDataSource(), |
|
83 |
params.getX(), |
|
84 |
params.getY(), |
|
85 |
params.getWidth(), |
|
86 |
params.getHeight(), |
|
87 |
params.getBandList()); |
|
83 | 88 |
|
84 | 89 |
if (forceBuffer == BufferCacheManager.MEMORY_BUFFER) { |
85 | 90 |
RasterMemoryBuffer b = new RasterMemoryBuffer(params.getDataType(), |
... | ... | |
99 | 104 |
|
100 | 105 |
if(forceBuffer == BufferCacheManager.DONT_FORCE) { |
101 | 106 |
if(params.getAccessType() == RasterBuffer.READ_ONLY) |
102 |
return new RasterReadOnlyBuffer(params.getDataSource()); |
|
107 |
return new RasterReadOnlyBuffer(params.getDataSource(), |
|
108 |
params.getX(), |
|
109 |
params.getY(), |
|
110 |
params.getWidth(), |
|
111 |
params.getHeight(), |
|
112 |
params.getBandList()); |
|
103 | 113 |
|
104 | 114 |
|
105 | 115 |
if(params.getAccessType() == RasterBuffer.READ_WRITE || params.getAccessType() == RasterBuffer.READ_WRITE_CVERT) { |
... | ... | |
198 | 208 |
|
199 | 209 |
/* |
200 | 210 |
* (non-Javadoc) |
211 |
* @see org.gvsig.raster.cache.buffer.BufferCacheManager#createBufferParams(java.lang.String, int, int, int, int) |
|
212 |
*/ |
|
213 |
public BufferParam createBufferParams(String file, int x, int y, int w, int h, int[] bands) throws IOException { |
|
214 |
return new BufferParamImpl(file, x, y, w, h, bands); |
|
215 |
} |
|
216 |
|
|
217 |
/* |
|
218 |
* (non-Javadoc) |
|
219 |
* @see org.gvsig.raster.cache.buffer.BufferCacheManager#createBufferParams(java.lang.String, int, int, int, int) |
|
220 |
*/ |
|
221 |
public BufferParam createBufferParams(String file, int x, int y, int w, int h) throws IOException { |
|
222 |
return new BufferParamImpl(file, x, y, w, h, null); |
|
223 |
} |
|
224 |
|
|
225 |
/* |
|
226 |
* (non-Javadoc) |
|
201 | 227 |
* @see org.gvsig.raster.cache.buffer.BufferCacheManager#createNoData(java.lang.Number, java.lang.Number, java.lang.String, int) |
202 | 228 |
*/ |
203 | 229 |
public BufferNoData createNoData(Number noData, Number nativeNoData, String fileName, int bandCount) { |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/BufferParamImpl.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.cache.buffer.impl; |
2 | 2 |
|
3 |
import java.io.IOException; |
|
4 |
|
|
3 | 5 |
import org.gvsig.raster.cache.buffer.Buffer; |
6 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
4 | 7 |
import org.gvsig.raster.cache.buffer.BufferParam; |
8 |
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl; |
|
9 |
import org.gvsig.raster.cache.buffer.impl.io.BufferMultiDataSourceImpl; |
|
5 | 10 |
|
6 | 11 |
/** |
7 | 12 |
* Buffer parameters. This class contains generic parameters. |
... | ... | |
13 | 18 |
public class BufferParamImpl extends PxTileImpl implements BufferParam { |
14 | 19 |
private static final long serialVersionUID = 1L; |
15 | 20 |
private int accessType = Buffer.READ_WRITE; |
21 |
private int[] bands = null; |
|
16 | 22 |
|
17 | 23 |
/** |
18 |
* Set size and position values
|
|
24 |
* Constructor
|
|
19 | 25 |
* @param w |
20 | 26 |
* Width |
21 | 27 |
* @param h |
... | ... | |
26 | 32 |
} |
27 | 33 |
|
28 | 34 |
/** |
35 |
* Constructor |
|
36 |
* @param file |
|
37 |
* file name |
|
38 |
* @param x |
|
39 |
* X position |
|
40 |
* @param y |
|
41 |
* Y position |
|
42 |
* @param w |
|
43 |
* Width |
|
44 |
* @param h |
|
45 |
* Height |
|
46 |
* @param bands |
|
47 |
* bands to load in the buffer |
|
48 |
* @throws IOException |
|
49 |
*/ |
|
50 |
public BufferParamImpl(String file, int x, int y, int w, int h, int[] bands) throws IOException { |
|
51 |
super(x, y, w, h); |
|
52 |
PxTileImpl pxTile = new PxTileImpl(x, y, w, h); |
|
53 |
BufferDataSourceImpl datasource = new BufferDataSourceImpl(file, pxTile); |
|
54 |
setDataSource(datasource); |
|
55 |
if(bands == null) { |
|
56 |
int bandCount = getDataSource().getBandCount(); |
|
57 |
this.bands = new int[bandCount]; |
|
58 |
for (int i = 0; i < bandCount; i++) { |
|
59 |
this.bands[i] = i; |
|
60 |
} |
|
61 |
} else |
|
62 |
this.bands = bands; |
|
63 |
setBandCount(this.bands.length); |
|
64 |
accessType = Buffer.READ_ONLY; |
|
65 |
} |
|
66 |
|
|
67 |
/** |
|
68 |
* Constructor for multifiles |
|
69 |
* @param file |
|
70 |
* file name |
|
71 |
* @param x |
|
72 |
* X position |
|
73 |
* @param y |
|
74 |
* Y position |
|
75 |
* @param w |
|
76 |
* Width in pixels |
|
77 |
* @param h |
|
78 |
* Height in pixels |
|
79 |
* @param bands |
|
80 |
* bands to load in the buffer. It can be null. In this case all bands will be used |
|
81 |
* @throws IOException |
|
82 |
*/ |
|
83 |
public BufferParamImpl(String[] file, int x, int y, int w, int h, int[] bands) throws IOException { |
|
84 |
super(x, y, w, h); |
|
85 |
PxTileImpl pxTile = new PxTileImpl(x, y, w, h); |
|
86 |
BufferDataSource datasource = new BufferMultiDataSourceImpl(file, pxTile); |
|
87 |
setDataSource(datasource); |
|
88 |
|
|
89 |
if(bands == null) { |
|
90 |
int bandCount = getDataSource().getBandCount(); |
|
91 |
this.bands = new int[bandCount]; |
|
92 |
for (int i = 0; i < bandCount; i++) { |
|
93 |
this.bands[i] = i; |
|
94 |
} |
|
95 |
} else |
|
96 |
this.bands = bands; |
|
97 |
setBandCount(this.bands.length); |
|
98 |
accessType = Buffer.READ_ONLY; |
|
99 |
} |
|
100 |
|
|
101 |
/** |
|
29 | 102 |
* Creates a parameter object for building a buffer. The buffer type is read-write. |
30 | 103 |
* This type could be changed after the creation of a {@link BufferParam} object. |
31 | 104 |
* @param w |
... | ... | |
45 | 118 |
} |
46 | 119 |
|
47 | 120 |
/* |
121 |
* |
|
48 | 122 |
* (non-Javadoc) |
49 | 123 |
* @see org.gvsig.raster.cache.buffer.BufferParam#setAccessType(int) |
50 | 124 |
*/ |
... | ... | |
59 | 133 |
public int getAccessType() { |
60 | 134 |
return accessType; |
61 | 135 |
} |
136 |
|
|
137 |
/* |
|
138 |
* (non-Javadoc) |
|
139 |
* @see org.gvsig.raster.cache.buffer.BufferParam#setFile(java.lang.String) |
|
140 |
*/ |
|
141 |
public void setBandList(int[] bands) { |
|
142 |
this.bands = bands; |
|
143 |
} |
|
144 |
|
|
145 |
/* |
|
146 |
* (non-Javadoc) |
|
147 |
* @see org.gvsig.raster.cache.buffer.BufferParam#getFile() |
|
148 |
*/ |
|
149 |
public int[] getBandList() { |
|
150 |
return bands; |
|
151 |
} |
|
62 | 152 |
} |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/rocache/RasterReadOnlyBuffer.java | ||
---|---|---|
7 | 7 |
import org.gvsig.raster.cache.buffer.Band; |
8 | 8 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
9 | 9 |
import org.gvsig.raster.cache.buffer.Buffer; |
10 |
import org.gvsig.raster.cache.buffer.BufferParam; |
|
10 | 11 |
import org.gvsig.raster.cache.buffer.PxTile; |
11 | 12 |
import org.gvsig.raster.cache.buffer.exception.BandNotCompatibleException; |
12 | 13 |
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException; |
... | ... | |
61 | 62 |
* Altura de la p?gina de cada banda en l?neas. |
62 | 63 |
*/ |
63 | 64 |
private int hPag = 1; |
64 |
private BufferDataSource dataSource = null; |
|
65 |
private BufferDataSource dataSource = null;
|
|
65 | 66 |
private ArrayList<PxTile> stripeList = null; |
66 |
|
|
67 |
|
|
67 | 68 |
/** |
68 | 69 |
* Constructor. Asigna las variables de inicializaci?n y crea la estructura de |
69 | 70 |
* la cach? con los datos pasados. |
... | ... | |
76 | 77 |
* @throws NotSupportedExtensionException |
77 | 78 |
* @throws FileNotFoundException |
78 | 79 |
*/ |
79 |
public RasterReadOnlyBuffer(int dataType, int width, int height, int nBand, BufferDataSource dataSource) {
|
|
80 |
super(0, 0, width, height, dataType, nBand);
|
|
80 |
public RasterReadOnlyBuffer(BufferDataSource dataSource, int x, int y, int w, int h, int[] bands) {
|
|
81 |
super(x, y, w, h, dataSource.getDataType(), bands.length);
|
|
81 | 82 |
this.dataSource = dataSource; |
82 |
|
|
83 | 83 |
stripeList = new ArrayList<PxTile>(); |
84 |
createStructure(); |
|
84 |
createStructure(bands);
|
|
85 | 85 |
} |
86 | 86 |
|
87 | 87 |
/** |
88 | 88 |
* Constructor. Asigna las variables de inicializaci?n y crea la estructura de |
89 | 89 |
* la cach? con los datos pasados. |
90 |
* @param datasource |
|
91 |
* Source of data |
|
92 |
* @param despX |
|
93 |
* Step from the upper left corner in horizontal |
|
94 |
* @param despY |
|
95 |
* Step from the upper left corner in vertical |
|
96 |
* @throws RasterDriverException |
|
97 |
* @throws NotSupportedExtensionException |
|
98 |
* @throws FileNotFoundException |
|
90 |
* @param dataSource |
|
91 |
* Datasource |
|
92 |
* @param bands |
|
99 | 93 |
*/ |
100 |
/*public RasterReadOnlyBuffer(IBufferDataSource dataSource, int despX, int despY) { |
|
101 |
super(0, 0, |
|
102 |
dataSource.getWidth() - despX, |
|
103 |
dataSource.getHeight() - despY, |
|
94 |
public RasterReadOnlyBuffer(BufferDataSource dataSource, int[] bands) { |
|
95 |
super( 0, |
|
96 |
0, |
|
97 |
dataSource.getWidth(), |
|
98 |
dataSource.getHeight(), |
|
104 | 99 |
dataSource.getDataType(), |
105 |
dataSource.getBandCount());
|
|
100 |
bands.length);
|
|
106 | 101 |
this.dataSource = dataSource; |
107 |
|
|
108 | 102 |
stripeList = new ArrayList<PxTile>(); |
109 |
createStructure(); |
|
110 |
}*/
|
|
111 |
|
|
103 |
createStructure(bands);
|
|
104 |
} |
|
105 |
|
|
112 | 106 |
/** |
113 | 107 |
* Constructor. Asigna las variables de inicializaci?n y crea la estructura de |
114 | 108 |
* la cach? con los datos pasados. |
115 |
* @param datasource |
|
116 |
* Source of data |
|
117 |
* @throws DriverException |
|
118 |
* @throws NotSupportedExtensionException |
|
119 |
* @throws FileNotFoundException |
|
109 |
* @param dataSource |
|
110 |
* Datasource |
|
120 | 111 |
*/ |
121 | 112 |
public RasterReadOnlyBuffer(BufferDataSource dataSource) { |
122 |
super(0, |
|
113 |
super( 0,
|
|
123 | 114 |
0, |
124 | 115 |
dataSource.getWidth(), |
125 | 116 |
dataSource.getHeight(), |
126 | 117 |
dataSource.getDataType(), |
127 | 118 |
dataSource.getBandCount()); |
128 | 119 |
this.dataSource = dataSource; |
129 |
|
|
130 | 120 |
stripeList = new ArrayList<PxTile>(); |
131 |
createStructure(); |
|
121 |
int[] bands = new int[dataSource.getBandCount()]; |
|
122 |
for (int i = 0; i < bands.length; i++) { |
|
123 |
bands[i] = i; |
|
124 |
} |
|
125 |
createStructure(bands); |
|
132 | 126 |
} |
133 | 127 |
|
134 | 128 |
/** |
129 |
* Constructor. Asigna las variables de inicializaci?n y crea la estructura de |
|
130 |
* la cach? con los datos pasados. |
|
131 |
* @param dataSource |
|
132 |
* Datasource |
|
133 |
*/ |
|
134 |
public RasterReadOnlyBuffer(BufferParam param) { |
|
135 |
super( param.getX(), |
|
136 |
param.getY(), |
|
137 |
param.getWidth(), |
|
138 |
param.getHeight(), |
|
139 |
param.getDataSource().getDataType(), |
|
140 |
param.getBandCount()); |
|
141 |
this.dataSource = param.getDataSource(); |
|
142 |
stripeList = new ArrayList<PxTile>(); |
|
143 |
createStructure(param.getBandList()); |
|
144 |
} |
|
145 |
|
|
146 |
/** |
|
135 | 147 |
* |
136 | 148 |
*/ |
137 |
private void createStructure() { |
|
149 |
private void createStructure(int[] bands) {
|
|
138 | 150 |
//Pasamos los megas a bytes |
139 | 151 |
double pageSize = BufferCacheManagerImpl.pageSize * 1048576; |
140 | 152 |
|
... | ... | |
176 | 188 |
int fullPages = (int)Math.floor((double)getHeight() / (double)hPag); |
177 | 189 |
|
178 | 190 |
//Calculamos la lista de franjas con sus coordenadas |
179 |
int y = 0; |
|
191 |
int y = 0; |
|
192 |
int x = 0; |
|
180 | 193 |
for (int i = 0; i < fullPages; i++) { |
181 |
stripeList.add(new PxTileImpl(0, y, getWidth(), hPag));
|
|
194 |
stripeList.add(new PxTileImpl(x, y, getWidth(), hPag));
|
|
182 | 195 |
y += hPag; |
183 | 196 |
} |
184 | 197 |
offset = hPag - 1; |
185 | 198 |
|
186 | 199 |
int hLastPage = getHeight() - (fullPages * hPag); |
187 |
for (int i = fullPages; i < nTotalPags; i++)
|
|
188 |
stripeList.add(new PxTileImpl(0, y, getWidth(), hLastPage));
|
|
200 |
for (int i = fullPages; i < nTotalPags; i++) |
|
201 |
stripeList.add(new PxTileImpl(x, y, getWidth(), hLastPage));
|
|
189 | 202 |
|
190 | 203 |
//Creamos las p?ginas en memoria |
191 | 204 |
//createMemoryPages(); |
192 |
createBands(); |
|
205 |
createBands(bands);
|
|
193 | 206 |
} |
194 | 207 |
|
195 |
private void createBands() { |
|
208 |
private void createBands(int[] bands) {
|
|
196 | 209 |
bandList = new ArrayList<ReadOnlyCacheBand>(); |
197 |
for (int i = 0; i < getBandCount(); i++) {
|
|
210 |
for (int i = 0; i < bands.length; i++) {
|
|
198 | 211 |
BufferDataSource ds = dataSource.clone(); |
199 |
ds.setSelectedBand(i);
|
|
212 |
ds.setSelectedBand(bands[i]);
|
|
200 | 213 |
switch (getDataType()) { |
201 | 214 |
case RasterBuffer.TYPE_BYTE: |
202 |
bandList.add(new ByteBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
|
|
215 |
bandList.add(new ByteBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
|
|
203 | 216 |
break; |
204 | 217 |
case RasterBuffer.TYPE_SHORT: |
205 |
bandList.add(new ShortBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
|
|
218 |
bandList.add(new ShortBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
|
|
206 | 219 |
break; |
207 | 220 |
case RasterBuffer.TYPE_INT: |
208 |
bandList.add(new IntBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
|
|
221 |
bandList.add(new IntBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
|
|
209 | 222 |
break; |
210 | 223 |
case RasterBuffer.TYPE_FLOAT: |
211 |
bandList.add(new FloatBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
|
|
224 |
bandList.add(new FloatBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
|
|
212 | 225 |
break; |
213 | 226 |
case RasterBuffer.TYPE_DOUBLE: |
214 |
bandList.add(new DoubleBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
|
|
227 |
bandList.add(new DoubleBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
|
|
215 | 228 |
break; |
216 | 229 |
} |
217 | 230 |
} |
... | ... | |
767 | 780 |
* @see org.gvsig.raster.buffer.IRasterBuffer#getBufferWithOneBand(int) |
768 | 781 |
*/ |
769 | 782 |
public Buffer getBufferWithOneBand(int nBand) throws IOException { |
770 |
BufferDataSource ds = ((ReadOnlyCacheBand)getBand(nBand)).dataSource.clone(); |
|
771 |
RasterReadOnlyBuffer result = new RasterReadOnlyBuffer(getDataType(), getWidth(), getHeight(), getBandCount(), ds); |
|
772 |
result.bandList.clear(); |
|
773 |
result.setBandCount(1); |
|
774 |
switch (getDataType()) { |
|
775 |
case RasterBuffer.TYPE_BYTE: |
|
776 |
ByteBand bb = new ByteBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight()); |
|
777 |
result.bandList.add(bb); |
|
778 |
break; |
|
779 |
case RasterBuffer.TYPE_SHORT: |
|
780 |
ShortBand sb = new ShortBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight()); |
|
781 |
result.bandList.add(sb); |
|
782 |
break; |
|
783 |
case RasterBuffer.TYPE_INT: |
|
784 |
IntBand ib = new IntBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight()); |
|
785 |
result.bandList.add(ib); |
|
786 |
break; |
|
787 |
case RasterBuffer.TYPE_FLOAT: |
|
788 |
FloatBand fb = new FloatBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight()); |
|
789 |
result.bandList.add(fb); |
|
790 |
break; |
|
791 |
case RasterBuffer.TYPE_DOUBLE: |
|
792 |
DoubleBand db = new DoubleBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight()); |
|
793 |
result.bandList.add(db); |
|
794 |
break; |
|
795 |
} |
|
796 |
return result; |
|
783 |
int[] bands = new int[]{nBand}; |
|
784 |
return new RasterReadOnlyBuffer(this.dataSource.clone(), bands); |
|
797 | 785 |
} |
798 | 786 |
|
799 | 787 |
/* |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/PxTileImpl.java | ||
---|---|---|
14 | 14 |
private static final long serialVersionUID = 1L; |
15 | 15 |
private String reference = null; |
16 | 16 |
private Rectangle2D selection = null; |
17 |
private BufferDataSource dataSource = null;
|
|
17 |
private BufferDataSource[] dataSource = null;
|
|
18 | 18 |
|
19 | 19 |
/** |
20 | 20 |
* Set size and position values |
... | ... | |
86 | 86 |
* @param dataSource |
87 | 87 |
*/ |
88 | 88 |
public void setDataSource(BufferDataSource dataSource) { |
89 |
this.dataSource = new BufferDataSource[]{dataSource}; |
|
90 |
} |
|
91 |
|
|
92 |
/** |
|
93 |
* Set the data source |
|
94 |
* @param dataSource |
|
95 |
*/ |
|
96 |
public void setDataSource(BufferDataSource[] dataSource) { |
|
89 | 97 |
this.dataSource = dataSource; |
90 | 98 |
} |
91 | 99 |
|
... | ... | |
94 | 102 |
* @return |
95 | 103 |
*/ |
96 | 104 |
public BufferDataSource getDataSource() { |
105 |
if(dataSource != null && dataSource.length >= 1) |
|
106 |
return dataSource[0]; |
|
107 |
return null; |
|
108 |
} |
|
109 |
|
|
110 |
/** |
|
111 |
* Get the data source |
|
112 |
* @return |
|
113 |
*/ |
|
114 |
public BufferDataSource[] getDataSourceList() { |
|
97 | 115 |
return dataSource; |
98 | 116 |
} |
99 | 117 |
|
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/io/BufferDataSourceImpl.java | ||
---|---|---|
20 | 20 |
import org.gvsig.raster.cache.buffer.impl.RasterBase; |
21 | 21 |
|
22 | 22 |
/** |
23 |
* Data Server for read only buffers. This server only read tiff data.
|
|
23 |
* Data Server for read only buffers. |
|
24 | 24 |
* |
25 |
* 02/11/2008 |
|
26 | 25 |
* @author Nacho Brodin nachobrodin@gmail.com |
27 | 26 |
*/ |
28 | 27 |
public class BufferDataSourceImpl extends RasterBase implements BufferDataSource { |
... | ... | |
49 | 48 |
} |
50 | 49 |
super.setWidth(reader.getWidth()); |
51 | 50 |
super.setHeight(reader.getHeight()); |
52 |
super.setDataType(reader.getDataType());
|
|
51 |
super.setDataType(reader.getRasterBufTypeFromGdalType(reader.getDataType()));
|
|
53 | 52 |
super.setBandCount(reader.getBandCount()); |
54 | 53 |
window = new PxTileImpl(0, 0, reader.getWidth(), reader.getHeight()); |
55 | 54 |
} |
... | ... | |
101 | 100 |
} |
102 | 101 |
|
103 | 102 |
/* |
104 |
* (non-Javadoc)
|
|
105 |
* @see org.gvsig.raster.dataaccess.cache.ICacheDataSource#getPath()
|
|
103 |
* (non-Javadoc) |
|
104 |
* @see org.gvsig.raster.cache.buffer.BufferDataSource#getPath()
|
|
106 | 105 |
*/ |
107 |
public String getPath() { |
|
108 |
return path;
|
|
106 |
public String[] getPath() {
|
|
107 |
return new String[]{path};
|
|
109 | 108 |
} |
110 | 109 |
|
111 | 110 |
/* |
112 |
* (non-Javadoc)
|
|
113 |
* @see org.gvsig.raster.dataaccess.cache.ICacheDataSource#setPath(java.lang.String)
|
|
111 |
* (non-Javadoc) |
|
112 |
* @see org.gvsig.raster.cache.buffer.BufferDataSource#setPath(java.lang.String[])
|
|
114 | 113 |
*/ |
114 |
public void setPath(String[] path) { |
|
115 |
if(path != null && path.length >= 1) |
|
116 |
this.path = path[0]; |
|
117 |
} |
|
118 |
|
|
119 |
/* |
|
120 |
* (non-Javadoc) |
|
121 |
* @see org.gvsig.raster.cache.buffer.BufferDataSource#setPath(java.lang.String) |
|
122 |
*/ |
|
115 | 123 |
public void setPath(String path) { |
116 | 124 |
this.path = path; |
117 | 125 |
} |
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/io/BufferMultiDataSourceImpl.java | ||
---|---|---|
1 |
package org.gvsig.raster.cache.buffer.impl.io; |
|
2 |
|
|
3 |
import java.io.IOException; |
|
4 |
|
|
5 |
import org.gvsig.jgdal.GdalException; |
|
6 |
import org.gvsig.raster.cache.buffer.Buffer; |
|
7 |
import org.gvsig.raster.cache.buffer.BufferDataSource; |
|
8 |
import org.gvsig.raster.cache.buffer.PxTile; |
|
9 |
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException; |
|
10 |
import org.gvsig.raster.cache.buffer.impl.PxTileImpl; |
|
11 |
|
|
12 |
/** |
|
13 |
* Data Server for read only buffers. |
|
14 |
* |
|
15 |
* @author Nacho Brodin nachobrodin@gmail.com |
|
16 |
*/ |
|
17 |
public class BufferMultiDataSourceImpl extends BufferDataSourceImpl implements BufferDataSource { |
|
18 |
private GdalRead[] reader = null; |
|
19 |
private String[] path = null; |
|
20 |
private PxTile window = null; |
|
21 |
private int selectedBand = -1; |
|
22 |
|
|
23 |
/** |
|
24 |
* This constructor is useful to use this class with a image reference. |
|
25 |
* Typically ReadOnlyCache |
|
26 |
* @param path |
|
27 |
* Path to the file |
|
28 |
* @throws IOException |
|
29 |
*/ |
|
30 |
public BufferMultiDataSourceImpl(String[] path) throws IOException { |
|
31 |
this.path = path; |
|
32 |
reader = new GdalRead[path.length]; |
|
33 |
int bandCount = 0; |
|
34 |
|
|
35 |
try { |
|
36 |
for (int i = 0; i < path.length; i++) { |
|
37 |
reader[i] = new GdalRead(path[i]); |
|
38 |
bandCount += reader[i].getBandCount(); |
|
39 |
} |
|
40 |
} catch (GdalException e) { |
|
41 |
throw new IOException(); |
|
42 |
} |
|
43 |
super.setWidth(reader[0].getWidth()); |
|
44 |
super.setHeight(reader[0].getHeight()); |
|
45 |
super.setDataType(reader[0].getRasterBufTypeFromGdalType(reader[0].getDataType())); |
|
46 |
super.setBandCount(bandCount); |
|
47 |
window = new PxTileImpl(0, 0, reader[0].getWidth(), reader[0].getHeight()); |
|
48 |
} |
|
49 |
|
|
50 |
/** |
|
51 |
* This constructor is useful to use this class with a image reference |
|
52 |
* .Typically ReadOnlyCache. |
|
53 |
* @param path |
|
54 |
* Path to the file |
|
55 |
* @throws IOException |
|
56 |
*/ |
|
57 |
public BufferMultiDataSourceImpl(String[] path, PxTileImpl window) throws IOException { |
|
58 |
this.path = path; |
|
59 |
this.window = window; |
|
60 |
reader = new GdalRead[path.length]; |
|
61 |
int bandCount = 0; |
|
62 |
|
|
63 |
try { |
|
64 |
for (int i = 0; i < path.length; i++) { |
|
65 |
reader[i] = new GdalRead(path[i]); |
|
66 |
bandCount += reader[i].getBandCount(); |
|
67 |
} |
|
68 |
} catch (GdalException e) { |
|
69 |
throw new IOException(); |
|
70 |
} |
|
71 |
super.setWidth(window.getWidth()); |
|
72 |
super.setHeight(window.getHeight()); |
|
73 |
super.setDataType(reader[0].getRasterBufTypeFromGdalType(reader[0].getDataType())); |
|
74 |
super.setBandCount(bandCount); |
|
75 |
} |
|
76 |
|
|
77 |
/* |
|
78 |
* (non-Javadoc) |
|
79 |
* @see org.cachete.buffer.IBufferDataSource#close() |
|
80 |
*/ |
|
81 |
public void close() throws IOException { |
|
82 |
for (int i = 0; i < reader.length; i++) { |
|
83 |
if(reader[i] != null) |
|
84 |
try { |
|
85 |
reader[i].close(); |
|
86 |
reader[i] = null; |
|
87 |
} catch (GdalException e) { |
|
88 |
throw new IOException(); |
|
89 |
} |
|
90 |
} |
|
91 |
} |
|
92 |
|
|
93 |
/* |
|
94 |
* (non-Javadoc) |
|
95 |
* @see org.gvsig.raster.cache.buffer.BufferDataSource#getPath() |
|
96 |
*/ |
|
97 |
public String[] getPath() { |
|
98 |
return path; |
|
99 |
} |
|
100 |
|
|
101 |
/* |
|
102 |
* (non-Javadoc) |
|
103 |
* @see org.gvsig.raster.cache.buffer.BufferDataSource#setPath(java.lang.String[]) |
|
104 |
*/ |
|
105 |
public void setPath(String[] path) { |
|
106 |
this.path = path; |
|
107 |
} |
|
108 |
|
|
109 |
/* |
|
110 |
* (non-Javadoc) |
|
111 |
* @see org.gvsig.raster.cache.buffer.BufferDataSource#setPath(java.lang.String) |
|
112 |
*/ |
|
113 |
public void setPath(String path) { |
|
114 |
this.path = new String[]{path}; |
|
115 |
} |
|
116 |
|
|
117 |
/* |
|
118 |
* (non-Javadoc) |
|
119 |
* @see org.gvsig.raster.buffer.rocache.ICacheDataSource#loadSelectedBand(org.gvsig.raster.buffer.IRasterBuffer, org.gvsig.raster.buffer.rocache.ReadOnlyStripe) |
|
120 |
*/ |
|
121 |
public void loadSelectedBand(Buffer rb, PxTile stripe) throws IOException, InterruptedException, OperationNotSupportedException { |
|
122 |
loadPage(rb, stripe, selectedBand); |
|
123 |
} |
|
124 |
|
|
125 |
/* |
|
126 |
* (non-Javadoc) |
|
127 |
* @see org.gvsig.raster.buffer.rocache.ICacheDataSource#loadPage(org.gvsig.raster.buffer.IRasterBuffer, org.gvsig.raster.buffer.rocache.ReadOnlyStripe) |
|
128 |
*/ |
|
129 |
public void loadPage(Buffer rb, PxTile stripe) throws IOException, InterruptedException, OperationNotSupportedException { |
|
130 |
try { |
|
131 |
int dataType = reader[0].getDataType(); |
|
132 |
|
|
133 |
if (dataType == GdalRead.GDT_Byte) { |
|
134 |
|
|
135 |
int last = 0; |
|
136 |
byte[][][] buf = new byte[rb.getBandCount()][][]; |
|
137 |
for (int i = 0; i < reader.length; i++) { |
|
138 |
Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight()); |
|
139 |
byte[][][] b = (byte[][][])dataObj; |
|
140 |
int k = 0; |
|
141 |
for (int j = last; j < b.length; j++) { |
|
142 |
buf[j] = b[k]; |
|
143 |
k ++; |
|
144 |
} |
|
145 |
last += b.length; |
|
146 |
} |
|
147 |
|
|
148 |
for (int iBand = 0; iBand < buf.length; iBand++) |
|
149 |
for (int iLine = 0; iLine < buf[iBand].length; iLine++) |
|
150 |
for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) |
|
151 |
rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]); |
|
152 |
|
|
153 |
} else if (dataType == GdalRead.GDT_CInt16 || dataType == GdalRead.GDT_Int16 || dataType == GdalRead.GDT_UInt16) { |
|
154 |
|
|
155 |
int last = 0; |
|
156 |
short[][][] buf = new short[rb.getBandCount()][][]; |
|
157 |
for (int i = 0; i < reader.length; i++) { |
|
158 |
Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight()); |
|
159 |
short[][][] b = (short[][][])dataObj; |
|
160 |
int k = 0; |
|
161 |
for (int j = last; j < b.length; j++) { |
|
162 |
buf[j] = b[k]; |
|
163 |
k ++; |
|
164 |
} |
|
165 |
last += b.length; |
|
166 |
} |
|
167 |
|
|
168 |
for (int iBand = 0; iBand < buf.length; iBand++) |
|
169 |
for (int iLine = 0; iLine < buf[iBand].length; iLine++) |
|
170 |
for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) |
|
171 |
rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]); |
|
172 |
|
|
173 |
} else if (dataType == GdalRead.GDT_CInt32 || dataType == GdalRead.GDT_Int32 || dataType == GdalRead.GDT_UInt32) { |
|
174 |
|
|
175 |
int last = 0; |
|
176 |
int[][][] buf = new int[rb.getBandCount()][][]; |
|
177 |
for (int i = 0; i < reader.length; i++) { |
|
178 |
Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight()); |
|
179 |
int[][][] b = (int[][][])dataObj; |
|
180 |
int k = 0; |
|
181 |
for (int j = last; j < b.length; j++) { |
|
182 |
buf[j] = b[k]; |
|
183 |
k ++; |
|
184 |
} |
|
185 |
last += b.length; |
|
186 |
} |
|
187 |
|
|
188 |
for (int iBand = 0; iBand < buf.length; iBand++) |
|
189 |
for (int iLine = 0; iLine < buf[iBand].length; iLine++) |
|
190 |
for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) |
|
191 |
rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]); |
|
192 |
|
|
193 |
} else if(dataType == GdalRead.GDT_Float32 || dataType == GdalRead.GDT_CFloat32) { |
|
194 |
|
|
195 |
int last = 0; |
|
196 |
float[][][] buf = new float[rb.getBandCount()][][]; |
|
197 |
for (int i = 0; i < reader.length; i++) { |
|
198 |
Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight()); |
|
199 |
float[][][] b = (float[][][])dataObj; |
|
200 |
int k = 0; |
|
201 |
for (int j = last; j < b.length; j++) { |
|
202 |
buf[j] = b[k]; |
|
203 |
k ++; |
|
204 |
} |
|
205 |
last += b.length; |
|
206 |
} |
|
207 |
|
|
208 |
for (int iBand = 0; iBand < buf.length; iBand++) |
|
209 |
for (int iLine = 0; iLine < buf[iBand].length; iLine++) |
|
210 |
for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) |
|
211 |
rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]); |
|
212 |
|
|
213 |
} else if(dataType == GdalRead.GDT_Float64 || dataType == GdalRead.GDT_CFloat64) { |
|
214 |
|
|
215 |
int last = 0; |
|
216 |
double[][][] buf = new double[rb.getBandCount()][][]; |
|
217 |
for (int i = 0; i < reader.length; i++) { |
|
218 |
Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight()); |
|
219 |
double[][][] b = (double[][][])dataObj; |
|
220 |
int k = 0; |
|
221 |
for (int j = last; j < b.length; j++) { |
|
222 |
buf[j] = b[k]; |
|
223 |
k ++; |
|
224 |
} |
|
225 |
last += b.length; |
|
226 |
} |
|
227 |
|
|
228 |
for (int iBand = 0; iBand < buf.length; iBand++) |
|
229 |
for (int iLine = 0; iLine < buf[iBand].length; iLine++) |
|
230 |
for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) |
|
231 |
rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]); |
|
232 |
|
|
233 |
} |
|
234 |
} catch (GdalException e) { |
|
235 |
throw new IOException("Error reading block."); |
|
236 |
} |
|
237 |
} |
|
238 |
|
|
239 |
/* |
|
240 |
* (non-Javadoc) |
|
241 |
* @see org.fv.raster.buffer.rocache.ICacheDataSource#loadPage(org.fv.raster.buffer.IRasterBuffer, org.fv.raster.buffer.rocache.ReadOnlyStripe, int) |
|
242 |
*/ |
|
243 |
public void loadPage(Buffer rb, PxTile stripe, int iBand) throws IOException, InterruptedException, OperationNotSupportedException { |
|
244 |
if(rb.getBandCount() != 1) |
|
245 |
throw new IOException("Wrong buffer"); |
|
246 |
|
|
247 |
int dataType = reader[0].getDataType(); |
|
248 |
int readerNum = 0; |
|
249 |
int bandInsideReader = 0; |
|
250 |
int accum = 0; |
|
251 |
for (int i = 0; i < reader.length; i++) { |
|
252 |
bandInsideReader = iBand - accum; |
|
253 |
accum += reader[i].getBandCount(); |
|
254 |
if(accum > iBand) { |
|
255 |
readerNum = i; |
|
256 |
break; |
|
257 |
} |
|
258 |
} |
|
259 |
|
|
260 |
try { |
|
261 |
Object dataObj = reader[readerNum].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight(), bandInsideReader); |
|
262 |
if (dataType == GdalRead.GDT_Byte) { |
|
263 |
byte[][] buf = (byte[][])dataObj; |
|
264 |
for (int iLine = 0; iLine < buf.length; iLine++) |
|
265 |
for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) |
|
266 |
rb.setElem(iLine, iColumn, 0, buf[iLine][iColumn]); |
|
267 |
|
|
268 |
} else if (dataType == GdalRead.GDT_CInt16 || dataType == GdalRead.GDT_Int16 || dataType == GdalRead.GDT_UInt16) { |
|
269 |
short[][] buf = (short[][])dataObj; |
|
270 |
for (int iLine = 0; iLine < buf.length; iLine++) |
|
271 |
for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) |
|
272 |
rb.setElem(iLine, iColumn, 0, buf[iLine][iColumn]); |
|
273 |
|
|
274 |
} else if (dataType == GdalRead.GDT_CInt32 || dataType == GdalRead.GDT_Int32 || dataType == GdalRead.GDT_UInt32) { |
|
275 |
int[][] buf = (int[][])dataObj; |
|
276 |
for (int iLine = 0; iLine < buf.length; iLine++) |
|
277 |
for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) |
|
278 |
rb.setElem(iLine, iColumn, 0, buf[iLine][iColumn]); |
|
279 |
|
|
280 |
} else if(dataType == GdalRead.GDT_Float32 || dataType == GdalRead.GDT_CFloat32) { |
|
281 |
float[][] buf = (float[][])dataObj; |
|
282 |
for (int iLine = 0; iLine < buf.length; iLine++) |
|
283 |
for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) |
|
284 |
rb.setElem(iLine, iColumn, iBand, buf[iLine][iColumn]); |
|
285 |
|
|
286 |
} else if(dataType == GdalRead.GDT_Float64 || dataType == GdalRead.GDT_CFloat64) { |
|
287 |
double[][] buf = (double[][])dataObj; |
|
288 |
for (int iLine = 0; iLine < buf.length; iLine++) |
|
289 |
for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) |
|
290 |
rb.setElem(iLine, iColumn, 0, buf[iLine][iColumn]); |
|
291 |
|
|
292 |
} |
|
293 |
} catch (GdalException e) { |
|
294 |
throw new IOException("Error reading block."); |
|
295 |
} |
|
296 |
} |
|
297 |
|
|
298 |
/* (non-Javadoc) |
|
299 |
* @see org.gvsig.fmap.dataaccess.cache.ICacheDataSource#loadPage(int, org.gvsig.fmap.dataaccess.cache.PageBuffer) |
|
300 |
*/ |
|
301 |
public void loadPage(Buffer buf, String inFileName) { |
|
302 |
for (int i = 0; i < buf.getBandCount(); i++) |
|
303 |
loadBand(buf.getBand(i), inFileName + i); |
|
304 |
} |
Also available in: Unified diff