Revision 11076
trunk/libraries/libRaster/src-test/org/gvsig/raster/AllTests.java | ||
---|---|---|
19 | 19 |
package org.gvsig.raster; |
20 | 20 |
import junit.framework.TestCase; |
21 | 21 |
|
22 |
import org.gvsig.raster.dataaccess.TDSDoubleAdjustToExtentBufferEcw; |
|
23 |
import org.gvsig.raster.dataaccess.TDSDoubleAdjustToExtentBufferGdal; |
|
24 |
import org.gvsig.raster.dataaccess.TDSDoubleAdjustToExtentEcw; |
|
25 |
import org.gvsig.raster.dataaccess.TDSDoubleAdjustToExtentGdal; |
|
26 |
import org.gvsig.raster.dataaccess.TDSIntBufferGdal; |
|
27 |
import org.gvsig.raster.dataaccess.TDSIntEcw; |
|
28 |
import org.gvsig.raster.dataaccess.TDSIntGdal; |
|
29 |
import org.gvsig.raster.dataaccess.TestDataSourceMultiFile; |
|
30 |
import org.gvsig.raster.dataaccess.TestGdalByteHistogram; |
|
31 |
import org.gvsig.raster.dataaccess.TestGdalByteMultiBandHistogram; |
|
32 |
import org.gvsig.raster.dataaccess.TestGdalClassHistogram; |
|
33 |
import org.gvsig.raster.dataaccess.cache.TestAssignInterchangeBandsCache; |
|
34 |
import org.gvsig.raster.dataaccess.cache.TestRasterCache; |
|
35 |
import org.gvsig.raster.dataaccess.cache.TestSaveAndLoadPages; |
|
36 |
import org.gvsig.raster.dataaccess.cache.TestStructCache; |
|
37 |
import org.gvsig.raster.dataaccess.cache.TestWorldCoordHDDPages; |
|
38 |
import org.gvsig.raster.driver.TestDataByPixelEcw; |
|
39 |
import org.gvsig.raster.driver.TestReadLineEcw; |
|
40 |
import org.gvsig.raster.driver.TestStatisticMultiFile; |
|
41 |
import org.gvsig.raster.driver.TestStatistics; |
|
22 |
import org.gvsig.raster.buffer.TDSDoubleAdjustToExtentBufferEcw; |
|
23 |
import org.gvsig.raster.buffer.TDSDoubleAdjustToExtentBufferGdal; |
|
24 |
import org.gvsig.raster.buffer.TDSDoubleAdjustToExtentEcw; |
|
25 |
import org.gvsig.raster.buffer.TDSDoubleAdjustToExtentGdal; |
|
26 |
import org.gvsig.raster.buffer.TDSIntBufferGdal; |
|
27 |
import org.gvsig.raster.buffer.TDSIntEcw; |
|
28 |
import org.gvsig.raster.buffer.TDSIntGdal; |
|
29 |
import org.gvsig.raster.buffer.TestDataSourceMultiFile; |
|
30 |
import org.gvsig.raster.buffer.TestGdalByteHistogram; |
|
31 |
import org.gvsig.raster.buffer.TestGdalByteMultiBandHistogram; |
|
32 |
import org.gvsig.raster.buffer.TestGdalClassHistogram; |
|
33 |
import org.gvsig.raster.buffer.cache.TestAssignInterchangeBandsCache; |
|
34 |
import org.gvsig.raster.buffer.cache.TestRasterCache; |
|
35 |
import org.gvsig.raster.buffer.cache.TestReadOnlyCache; |
|
36 |
import org.gvsig.raster.buffer.cache.TestSaveAndLoadPages; |
|
37 |
import org.gvsig.raster.buffer.cache.TestStructCache; |
|
38 |
import org.gvsig.raster.buffer.cache.TestWorldCoordHDDPages; |
|
39 |
import org.gvsig.raster.dataset.TestDataByPixelEcw; |
|
40 |
import org.gvsig.raster.dataset.TestReadLineEcw; |
|
41 |
import org.gvsig.raster.dataset.TestStatisticMultiFile; |
|
42 |
import org.gvsig.raster.dataset.TestStatistics; |
|
42 | 43 |
import org.gvsig.raster.grid.TGEmptyBufferForWrite; |
43 | 44 |
import org.gvsig.raster.grid.TGOperations; |
44 | 45 |
import org.gvsig.raster.grid.TGReadingFullDatasource; |
trunk/libraries/libRaster/src-test/org/gvsig/raster/grid/TGEmptyBufferForWrite.java | ||
---|---|---|
21 | 21 |
import junit.framework.TestCase; |
22 | 22 |
|
23 | 23 |
import org.gvsig.raster.RasterLibrary; |
24 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidAccessException;
|
|
25 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidException;
|
|
24 |
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException; |
|
25 |
import org.gvsig.raster.buffer.RasterBufferInvalidException; |
|
26 | 26 |
import org.gvsig.raster.dataset.IBuffer; |
27 | 27 |
import org.gvsig.raster.grid.Grid; |
28 | 28 |
import org.gvsig.raster.grid.GridExtent; |
trunk/libraries/libRaster/src-test/org/gvsig/raster/grid/TGReadingFullDatasourceSelectingBands.java | ||
---|---|---|
21 | 21 |
import junit.framework.TestCase; |
22 | 22 |
|
23 | 23 |
import org.gvsig.raster.RasterLibrary; |
24 |
import org.gvsig.raster.dataaccess.DataSource;
|
|
25 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidAccessException;
|
|
26 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidException;
|
|
24 |
import org.gvsig.raster.buffer.BufferFactory;
|
|
25 |
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException; |
|
26 |
import org.gvsig.raster.buffer.RasterBufferInvalidException; |
|
27 | 27 |
import org.gvsig.raster.dataset.NotSupportedExtensionException; |
28 | 28 |
import org.gvsig.raster.dataset.RasterDataset; |
29 | 29 |
import org.gvsig.raster.dataset.RasterDriverException; |
... | ... | |
54 | 54 |
private String path2 = baseDir + "miniRaster25x24.tif"; |
55 | 55 |
private RasterDataset f1 = null; |
56 | 56 |
private RasterDataset f2 = null; |
57 |
private DataSource ds1 = null;
|
|
58 |
private DataSource ds2 = null;
|
|
57 |
private BufferFactory ds1 = null;
|
|
58 |
private BufferFactory ds2 = null;
|
|
59 | 59 |
|
60 |
static{ |
|
60 |
static {
|
|
61 | 61 |
RasterLibrary.wakeUp(); |
62 | 62 |
} |
63 | 63 |
|
64 |
public void start(){ |
|
64 |
public void start() {
|
|
65 | 65 |
this.setUp(); |
66 | 66 |
this.testStack(); |
67 | 67 |
} |
... | ... | |
69 | 69 |
public void setUp() { |
70 | 70 |
System.err.println("TGReadingFullDatasourceSelectingBands running..."); |
71 | 71 |
try { |
72 |
f1 = RasterDataset.openFile(null, path1);
|
|
73 |
f2 = RasterDataset.openFile(null, path2);
|
|
72 |
f1 = RasterDataset.open(null, path1); |
|
73 |
f2 = RasterDataset.open(null, path2); |
|
74 | 74 |
} catch (NotSupportedExtensionException e) { |
75 | 75 |
e.printStackTrace(); |
76 | 76 |
} catch (RasterDriverException e) { |
77 | 77 |
e.printStackTrace(); |
78 | 78 |
} |
79 |
ds1 = new DataSource(f1);
|
|
80 |
ds2 = new DataSource(f2);
|
|
79 |
ds1 = new BufferFactory(f1);
|
|
80 |
ds2 = new BufferFactory(f2);
|
|
81 | 81 |
} |
82 | 82 |
|
83 |
public void testStack(){ |
|
83 |
public void testStack() {
|
|
84 | 84 |
int[] drawableBands = {0, 1, 2}; |
85 | 85 |
try { |
86 | 86 |
Grid g = new Grid(ds1, drawableBands); |
... | ... | |
138 | 138 |
* @param g |
139 | 139 |
* @throws RasterBufferInvalidAccessException |
140 | 140 |
*/ |
141 |
private void testCellBufferFloat(Grid g, int band) throws RasterBufferInvalidAccessException{ |
|
141 |
private void testCellBufferFloat(Grid g, int band) throws RasterBufferInvalidAccessException {
|
|
142 | 142 |
int nCols = f1.getWidth(); |
143 | 143 |
int nRows = f1.getHeight(); |
144 |
for(int i = 0; i < nRows; i ++){ |
|
144 |
for(int i = 0; i < nRows; i ++) {
|
|
145 | 145 |
for(int j = 0; j < nCols; j ++) |
146 | 146 |
assertEquals((int)g.getCellValueAsFloat(j, i), (int)ds1.getRasterBuf().getElemFloat(i, j, band)); |
147 | 147 |
} |
... | ... | |
153 | 153 |
* @param g |
154 | 154 |
* @throws RasterBufferInvalidAccessException |
155 | 155 |
*/ |
156 |
private void testCellBufferByte(Grid g, int band) throws RasterBufferInvalidAccessException{ |
|
156 |
private void testCellBufferByte(Grid g, int band) throws RasterBufferInvalidAccessException {
|
|
157 | 157 |
int nCols = f2.getWidth(); |
158 | 158 |
int nRows = f2.getHeight(); |
159 |
for(int i = 0; i < nRows; i ++){ |
|
159 |
for(int i = 0; i < nRows; i ++) {
|
|
160 | 160 |
for(int j = 0; j < nCols; j ++) |
161 | 161 |
assertEquals((int)g.getCellValueAsByte(j, i), (int)ds2.getRasterBuf().getElemByte(i, j, band)); |
162 | 162 |
} |
trunk/libraries/libRaster/src-test/org/gvsig/raster/grid/TGOperations.java | ||
---|---|---|
21 | 21 |
import junit.framework.TestCase; |
22 | 22 |
|
23 | 23 |
import org.gvsig.raster.RasterLibrary; |
24 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidAccessException;
|
|
25 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidException;
|
|
24 |
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException; |
|
25 |
import org.gvsig.raster.buffer.RasterBufferInvalidException; |
|
26 | 26 |
import org.gvsig.raster.dataset.IBuffer; |
27 | 27 |
import org.gvsig.raster.grid.Grid; |
28 | 28 |
import org.gvsig.raster.grid.GridCell; |
trunk/libraries/libRaster/src-test/org/gvsig/raster/grid/TGReadingFullDatasource.java | ||
---|---|---|
21 | 21 |
import junit.framework.TestCase; |
22 | 22 |
|
23 | 23 |
import org.gvsig.raster.RasterLibrary; |
24 |
import org.gvsig.raster.dataaccess.DataSource;
|
|
25 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidAccessException;
|
|
26 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidException;
|
|
24 |
import org.gvsig.raster.buffer.BufferFactory;
|
|
25 |
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException; |
|
26 |
import org.gvsig.raster.buffer.RasterBufferInvalidException; |
|
27 | 27 |
import org.gvsig.raster.dataset.NotSupportedExtensionException; |
28 | 28 |
import org.gvsig.raster.dataset.RasterDataset; |
29 | 29 |
import org.gvsig.raster.dataset.RasterDriverException; |
... | ... | |
47 | 47 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
48 | 48 |
* |
49 | 49 |
*/ |
50 |
public class TGReadingFullDatasource extends TestCase{ |
|
51 |
|
|
50 |
public class TGReadingFullDatasource extends TestCase {
|
|
51 |
|
|
52 | 52 |
private String baseDir = "./test-images/"; |
53 | 53 |
private String path1 = baseDir + "miniRaster28x25F32.tif"; |
54 | 54 |
private String path2 = baseDir + "miniRaster25x24.tif"; |
55 | 55 |
private RasterDataset f1 = null; |
56 | 56 |
private RasterDataset f2 = null; |
57 |
private DataSource ds1 = null;
|
|
58 |
private DataSource ds2 = null;
|
|
57 |
private BufferFactory ds1 = null;
|
|
58 |
private BufferFactory ds2 = null;
|
|
59 | 59 |
|
60 | 60 |
static{ |
61 | 61 |
RasterLibrary.wakeUp(); |
62 | 62 |
} |
63 | 63 |
|
64 |
public void start(){ |
|
64 |
public void start() {
|
|
65 | 65 |
this.setUp(); |
66 | 66 |
this.testStack(); |
67 | 67 |
} |
... | ... | |
69 | 69 |
public void setUp() { |
70 | 70 |
System.err.println("TGReadingFullDatasourceSelectingBands running..."); |
71 | 71 |
try { |
72 |
f1 = RasterDataset.openFile(null, path1);
|
|
73 |
f2 = RasterDataset.openFile(null, path2);
|
|
72 |
f1 = RasterDataset.open(null, path1); |
|
73 |
f2 = RasterDataset.open(null, path2); |
|
74 | 74 |
} catch (NotSupportedExtensionException e) { |
75 | 75 |
e.printStackTrace(); |
76 | 76 |
} catch (RasterDriverException e) { |
77 | 77 |
e.printStackTrace(); |
78 | 78 |
} |
79 |
ds1 = new DataSource(f1);
|
|
80 |
ds2 = new DataSource(f2);
|
|
79 |
ds1 = new BufferFactory(f1);
|
|
80 |
ds2 = new BufferFactory(f2);
|
|
81 | 81 |
} |
82 | 82 |
|
83 |
public void testStack(){ |
|
83 |
public void testStack() {
|
|
84 | 84 |
try { |
85 | 85 |
Grid g = new Grid(ds1); |
86 | 86 |
assertEquals(g.getDataType(), 4); //Tipo float |
... | ... | |
137 | 137 |
* @param g |
138 | 138 |
* @throws RasterBufferInvalidAccessException |
139 | 139 |
*/ |
140 |
private void testCellBufferFloat(Grid g, int band) throws RasterBufferInvalidAccessException{ |
|
140 |
private void testCellBufferFloat(Grid g, int band) throws RasterBufferInvalidAccessException {
|
|
141 | 141 |
int nCols = f1.getWidth(); |
142 | 142 |
int nRows = f1.getHeight(); |
143 |
for(int i = 0; i < nRows; i ++){ |
|
143 |
for(int i = 0; i < nRows; i ++) {
|
|
144 | 144 |
for(int j = 0; j < nCols; j ++) |
145 | 145 |
assertEquals((int)g.getCellValueAsFloat(j, i), (int)ds1.getRasterBuf().getElemFloat(i, j, band)); |
146 | 146 |
} |
... | ... | |
152 | 152 |
* @param g |
153 | 153 |
* @throws RasterBufferInvalidAccessException |
154 | 154 |
*/ |
155 |
private void testCellBufferByte(Grid g, int band) throws RasterBufferInvalidAccessException{ |
|
155 |
private void testCellBufferByte(Grid g, int band) throws RasterBufferInvalidAccessException {
|
|
156 | 156 |
int nCols = f2.getWidth(); |
157 | 157 |
int nRows = f2.getHeight(); |
158 |
for(int i = 0; i < nRows; i ++){ |
|
158 |
for(int i = 0; i < nRows; i ++) {
|
|
159 | 159 |
for(int j = 0; j < nCols; j ++) |
160 | 160 |
assertEquals((int)g.getCellValueAsByte(j, i), (int)ds2.getRasterBuf().getElemByte(i, j, band)); |
161 | 161 |
} |
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/IStatistics.java | ||
---|---|---|
18 | 18 |
*/ |
19 | 19 |
package org.gvsig.raster.dataset; |
20 | 20 |
|
21 |
import java.io.File; |
|
22 |
import java.util.Date; |
|
23 |
|
|
24 |
|
|
21 | 25 |
/** |
22 | 26 |
* Interfaz a implementar por las clases que ofrecen estadisticas raster. |
23 | 27 |
* |
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/RasterDataset.java | ||
---|---|---|
33 | 33 |
import org.cresques.cts.IProjection; |
34 | 34 |
import org.gvsig.i18n.Messages; |
35 | 35 |
import org.gvsig.raster.dataset.io.GdalDriver; |
36 |
import org.gvsig.raster.dataset.io.IRegistrableRasterFormat; |
|
37 |
import org.gvsig.raster.dataset.io.MemoryRasterDriver; |
|
36 | 38 |
import org.gvsig.raster.dataset.properties.DatasetColorInterpretation; |
37 | 39 |
import org.gvsig.raster.dataset.properties.DatasetHistogram; |
38 | 40 |
import org.gvsig.raster.dataset.properties.DatasetMetadata; |
... | ... | |
135 | 137 |
* @param fName Nombre del fichero. |
136 | 138 |
* @return GeoRasterFile, o null si hay problemas. |
137 | 139 |
*/ |
138 |
public static RasterDataset openFile(IProjection proj, String fName) throws NotSupportedExtensionException, RasterDriverException{ |
|
139 |
String ext = fName.toLowerCase().substring(fName.lastIndexOf('.')+1); |
|
140 |
public static RasterDataset open(IProjection proj, Object param) throws NotSupportedExtensionException, RasterDriverException{ |
|
141 |
String idFormat = null; |
|
142 |
|
|
143 |
if(param instanceof String) |
|
144 |
idFormat = ((String)param).toLowerCase().substring(((String)param).lastIndexOf('.') + 1); |
|
145 |
if(param instanceof IRegistrableRasterFormat) |
|
146 |
idFormat = ((IRegistrableRasterFormat)param).getFormatID(); |
|
147 |
|
|
140 | 148 |
RasterDataset grf = null; |
141 | 149 |
|
142 | 150 |
Class clase = null; |
143 |
ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
|
144 |
ExtensionPoint extensionPoint = (ExtensionPoint)extensionPoints.get("RasterDriver"); |
|
145 |
if(extensionPoint == null) |
|
146 |
return null; |
|
147 |
clase = (Class)extensionPoint.get(ext); |
|
148 |
|
|
151 |
if(param instanceof IBuffer) |
|
152 |
clase = MemoryRasterDriver.class; |
|
153 |
|
|
154 |
if(clase == null){ |
|
155 |
ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
|
156 |
ExtensionPoint extensionPoint = (ExtensionPoint)extensionPoints.get("RasterDriver"); |
|
157 |
if(extensionPoint == null) |
|
158 |
return null; |
|
159 |
clase = (Class)extensionPoint.get(idFormat); |
|
160 |
} |
|
161 |
|
|
149 | 162 |
if(clase == null) |
150 | 163 |
clase = GdalDriver.class; |
151 | 164 |
|
152 |
Class [] args = {IProjection.class, String.class};
|
|
165 |
Class [] args = {IProjection.class, Object.class};
|
|
153 | 166 |
try { |
154 | 167 |
Constructor hazNuevo = clase.getConstructor(args); |
155 |
Object [] args2 = {proj, fName};
|
|
168 |
Object [] args2 = {proj, param};
|
|
156 | 169 |
grf = (RasterDataset) hazNuevo.newInstance(args2); |
157 |
grf.setFileSize(new File(fName).length()); |
|
158 | 170 |
} catch (SecurityException e) { |
159 |
throw new RasterDriverException("Error SecurityException in openFile");
|
|
171 |
throw new RasterDriverException("Error SecurityException in open"); |
|
160 | 172 |
} catch (NoSuchMethodException e) { |
161 |
throw new RasterDriverException("Error NoSuchMethodException in openFile");
|
|
173 |
throw new RasterDriverException("Error NoSuchMethodException in open"); |
|
162 | 174 |
} catch (IllegalArgumentException e) { |
163 |
throw new RasterDriverException("Error IllegalArgumentException in openFile");
|
|
175 |
throw new RasterDriverException("Error IllegalArgumentException in open"); |
|
164 | 176 |
} catch (InstantiationException e) { |
165 |
throw new RasterDriverException("Error InstantiationException in openFile");
|
|
177 |
throw new RasterDriverException("Error InstantiationException in open"); |
|
166 | 178 |
} catch (IllegalAccessException e) { |
167 |
throw new RasterDriverException("Error IllegalAccessException in openFile");
|
|
179 |
throw new RasterDriverException("Error IllegalAccessException in open"); |
|
168 | 180 |
} catch (InvocationTargetException e) { |
169 |
throw new NotSupportedExtensionException("Error in openFile");
|
|
181 |
throw new NotSupportedExtensionException("Error in open"); |
|
170 | 182 |
} |
171 | 183 |
return grf; |
172 | 184 |
} |
... | ... | |
190 | 202 |
* @param proj Proyecci?n |
191 | 203 |
* @param name Nombre del fichero de imagen. |
192 | 204 |
*/ |
193 |
public RasterDataset(IProjection proj, String name) { |
|
194 |
super(proj, name); |
|
205 |
public RasterDataset(IProjection proj, Object param) { |
|
206 |
super(proj, param); |
|
207 |
if(param instanceof String) |
|
208 |
setFileSize(new File(((String)param)).length()); |
|
195 | 209 |
} |
196 | 210 |
|
197 | 211 |
/** |
... | ... | |
814 | 828 |
histogram = new DatasetHistogram(this); |
815 | 829 |
return histogram; |
816 | 830 |
} |
817 |
|
|
818 |
public void resetPercent() { |
|
819 |
if (histogram != null) histogram.resetPercent(); |
|
820 |
} |
|
821 |
|
|
822 |
public int getPercent() { |
|
823 |
if (histogram != null) return histogram.getPercent(); |
|
824 |
return 0; |
|
825 |
} |
|
826 |
|
|
827 |
public void setCanceled(boolean value) { |
|
828 |
if (histogram != null) histogram.setCanceled(value); |
|
829 |
} |
|
830 |
|
|
831 |
public boolean isCanceled() { |
|
832 |
if (histogram != null) return histogram.isCanceled(); |
|
833 |
return false; |
|
834 |
} |
|
835 |
} |
|
831 |
|
|
832 |
} |
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/RasterMultiDataset.java | ||
---|---|---|
20 | 20 |
|
21 | 21 |
import java.awt.geom.Point2D; |
22 | 22 |
import java.io.File; |
23 |
import java.lang.reflect.Constructor; |
|
24 |
import java.lang.reflect.InvocationTargetException; |
|
23 | 25 |
import java.util.ArrayList; |
24 | 26 |
|
25 |
import org.gvsig.raster.dataaccess.buffer.RasterBuffer; |
|
27 |
import org.cresques.cts.IProjection; |
|
28 |
import org.gvsig.raster.buffer.RasterBuffer; |
|
29 |
import org.gvsig.raster.dataset.io.GdalDriver; |
|
26 | 30 |
import org.gvsig.raster.dataset.properties.DatasetColorInterpretation; |
27 | 31 |
import org.gvsig.raster.dataset.properties.DatasetListHistogram; |
28 | 32 |
import org.gvsig.raster.dataset.properties.DatasetListStatistics; |
... | ... | |
34 | 38 |
import org.gvsig.raster.util.Histogram; |
35 | 39 |
import org.gvsig.raster.util.HistogramException; |
36 | 40 |
import org.gvsig.raster.util.IHistogramable; |
41 |
import org.gvsig.raster.util.extensionPoints.ExtensionPoint; |
|
42 |
import org.gvsig.raster.util.extensionPoints.ExtensionPoints; |
|
43 |
import org.gvsig.raster.util.extensionPoints.ExtensionPointsSingleton; |
|
37 | 44 |
|
38 | 45 |
|
39 | 46 |
/** |
... | ... | |
54 | 61 |
private ArrayList palettes = new ArrayList(); |
55 | 62 |
private DatasetListStatistics stats = null; |
56 | 63 |
private DatasetListHistogram histogram = null; |
64 |
int percent = 0; |
|
57 | 65 |
|
58 | 66 |
//TODO: FUNCIONALIDAD: Contructores igual a RasterDataset + String[] nameFiles |
59 |
public RasterMultiDataset(String name){ |
|
67 |
public RasterMultiDataset(String name) {
|
|
60 | 68 |
this.name = name; |
61 | 69 |
} |
62 | 70 |
|
63 | 71 |
/** |
72 |
* Abre un dataset pasando como par?metros la proyecci?n y un objeto identificador del dataset. Este |
|
73 |
* objeto puede ser una ruta a un fichero en disco. En este caso la extensi?n del fichero servir? para |
|
74 |
* buscar el driver que lo gestiona. Si proporcionamos un array de cadenas se tratar?n como la ruta a N ficheros |
|
75 |
* de disco. Tambi?n puede ser un buffer de datos en memoria o cualquier otro objeto |
|
76 |
* que pueda aceptar un driver. |
|
77 |
* @param proj PRoyecci?n |
|
78 |
* @param datasetOpenParam Par?metros al driver |
|
79 |
* @return RasterMultiDatset |
|
80 |
* @throws NotSupportedExtensionException |
|
81 |
* @throws RasterDriverException |
|
82 |
*/ |
|
83 |
public static RasterMultiDataset open(IProjection proj, Object datasetOpenParam) throws NotSupportedExtensionException, RasterDriverException{ |
|
84 |
RasterMultiDataset rmd = new RasterMultiDataset(null); |
|
85 |
if(datasetOpenParam instanceof String[]) { |
|
86 |
String[] param = (String[])datasetOpenParam; |
|
87 |
for (int dataset = 0; dataset < param.length; dataset++) |
|
88 |
try { |
|
89 |
rmd.addDataset(RasterDataset.open(proj, param[dataset])); |
|
90 |
} catch (FileFoundInListException e) { |
|
91 |
//No lo a?adimos en el dataset pq ya existe |
|
92 |
} |
|
93 |
} else if(datasetOpenParam instanceof IBuffer[]) { |
|
94 |
IBuffer[] param = (IBuffer[])datasetOpenParam; |
|
95 |
for (int dataset = 0; dataset < param.length; dataset++) |
|
96 |
try { |
|
97 |
rmd.addDataset(RasterDataset.open(proj, param[dataset])); |
|
98 |
} catch (FileFoundInListException e) { |
|
99 |
//No lo a?adimos en el dataset pq ya existe |
|
100 |
} |
|
101 |
} else { |
|
102 |
RasterDataset rd = RasterDataset.open(proj, datasetOpenParam); |
|
103 |
try { |
|
104 |
rmd.addDataset(rd); |
|
105 |
} catch (FileFoundInListException e) { |
|
106 |
//No lo a?adimos en el dataset pq ya existe |
|
107 |
} |
|
108 |
} |
|
109 |
return rmd; |
|
110 |
} |
|
111 |
|
|
112 |
/** |
|
64 | 113 |
* Add a file to the list. |
65 | 114 |
* @param f file to add. |
66 | 115 |
*/ |
67 |
public void addDataset(RasterDataset f)throws FileFoundInListException{ |
|
116 |
public void addDataset(RasterDataset f)throws FileFoundInListException {
|
|
68 | 117 |
if(findDataset(f)) |
69 | 118 |
throw new FileFoundInListException("The file already is in list."); |
70 | 119 |
files.add(f); |
... | ... | |
80 | 129 |
public void addDataset(String fileName)throws FileFoundInListException, NotSupportedExtensionException, RasterDriverException{ |
81 | 130 |
if(findDataset(fileName)) |
82 | 131 |
throw new FileFoundInListException("The file already is in list."); |
83 |
RasterDataset f = RasterDataset.openFile(null, fileName);
|
|
132 |
RasterDataset f = RasterDataset.open(null, fileName); |
|
84 | 133 |
files.add(f); |
85 | 134 |
addBands(f); |
86 | 135 |
stats = new DatasetListStatistics(files); |
... | ... | |
90 | 139 |
* A?ade el fichero a lista de georrasterfiles y sus bandas a la lista de bandas |
91 | 140 |
* @param grf |
92 | 141 |
*/ |
93 |
private void addBands(RasterDataset grf){ |
|
142 |
private void addBands(RasterDataset grf) {
|
|
94 | 143 |
if(grf == null) |
95 | 144 |
return; |
96 | 145 |
|
97 | 146 |
int dataType = grf.getDataType(); |
98 |
for(int i = 0; i < grf.getBandCount();i++){ |
|
99 |
try{ |
|
147 |
for(int i = 0; i < grf.getBandCount();i++) {
|
|
148 |
try {
|
|
100 | 149 |
Band band = new Band(grf.getFName(), i, dataType); |
101 | 150 |
bandList.addBand(band, i); |
102 |
}catch(BandFoundInListException ex){
|
|
151 |
} catch(BandFoundInListException ex) {
|
|
103 | 152 |
//No a?adimos la banda |
104 | 153 |
} |
105 | 154 |
} |
... | ... | |
109 | 158 |
* Elimina un fichero a la lista a partir de su nombre |
110 | 159 |
* @param fileName Nombre del fichero a eliminar. |
111 | 160 |
*/ |
112 |
public void removeDataset(String fileName){ |
|
113 |
for(int i=0;i<files.size();i++){ |
|
114 |
if(((RasterDataset)files.get(i)).getFName().equals(fileName)){ |
|
161 |
public void removeDataset(String fileName) {
|
|
162 |
for(int i=0;i<files.size();i++) {
|
|
163 |
if(((RasterDataset)files.get(i)).getFName().equals(fileName)) {
|
|
115 | 164 |
files.remove(i); |
116 | 165 |
bandList.removeBands(fileName); |
117 | 166 |
return; |
... | ... | |
123 | 172 |
* Elimina un fichero a la lista |
124 | 173 |
* @param file Fichero a eliminar |
125 | 174 |
*/ |
126 |
public void removeDataset(RasterDataset file){ |
|
127 |
for(int i=0;i<files.size();i++){ |
|
128 |
if(((RasterDataset)files.get(i)).getFName().equals(file.getFName())){ |
|
175 |
public void removeDataset(RasterDataset file) {
|
|
176 |
for(int i=0;i<files.size();i++) {
|
|
177 |
if(((RasterDataset)files.get(i)).getFName().equals(file.getFName())) {
|
|
129 | 178 |
files.remove(i); |
130 | 179 |
bandList.removeBands(file.getFName()); |
131 | 180 |
return; |
... | ... | |
137 | 186 |
* Obtiene el n?mero de ficheros en la lista |
138 | 187 |
* @return integer. |
139 | 188 |
*/ |
140 |
public int getDatasetCount(){ |
|
189 |
public int getDatasetCount() {
|
|
141 | 190 |
return files.size(); |
142 | 191 |
} |
143 | 192 |
|
... | ... | |
147 | 196 |
* @return true si se ha hallado el fichero y false si no se |
148 | 197 |
* ha encontrado |
149 | 198 |
*/ |
150 |
public boolean findDataset(RasterDataset file){ |
|
151 |
for(int i = 0;i<files.size();i++){ |
|
199 |
public boolean findDataset(RasterDataset file) {
|
|
200 |
for(int i = 0;i<files.size();i++) {
|
|
152 | 201 |
RasterDataset grf = (RasterDataset)files.get(i); |
153 | 202 |
if( grf.getFName().equals(file.getFName())) |
154 | 203 |
return true; |
... | ... | |
162 | 211 |
* @return true si se ha hallado el fichero y false si no se |
163 | 212 |
* ha encontrado |
164 | 213 |
*/ |
165 |
public boolean findDataset(String fileName){ |
|
166 |
for(int i = 0;i<files.size();i++){ |
|
214 |
public boolean findDataset(String fileName) {
|
|
215 |
for(int i = 0;i<files.size();i++) {
|
|
167 | 216 |
if(((RasterDataset)files.get(i)).getFName().equals(fileName)) |
168 | 217 |
return true; |
169 | 218 |
} |
... | ... | |
173 | 222 |
/** |
174 | 223 |
* @see org.javaGeoRaster.io.GeoInfo |
175 | 224 |
*/ |
176 |
public void close(){ |
|
225 |
public void close() {
|
|
177 | 226 |
for(int i = 0; i < files.size(); i++) |
178 | 227 |
((RasterDataset)files.get(i)).close(); |
179 | 228 |
} |
... | ... | |
182 | 231 |
* Obtiene en un array de String la lista de nombres de ficheros |
183 | 232 |
* @return lista de nombres de los ficheros del GeoRasterMultiFile |
184 | 233 |
*/ |
185 |
public String[] getNameDatasetStringList(){ |
|
234 |
public String[] getNameDatasetStringList() {
|
|
186 | 235 |
String[] list = new String[files.size()]; |
187 | 236 |
for(int i = 0; i < files.size(); i++) |
188 | 237 |
list[i] = ((RasterDataset)files.get(i)).getFName(); |
... | ... | |
194 | 243 |
* @param raster Buffer a inicializar |
195 | 244 |
* @param bandList Lista de bandas |
196 | 245 |
*/ |
197 |
private void initBufferToNoData(IBuffer raster, BandList bandList){ |
|
198 |
for(int i = 0; i < bandList.getDrawableBandsCount(); i++){ |
|
199 |
switch(getDataType()[0]){ |
|
246 |
private void initBufferToNoData(IBuffer raster, BandList bandList) {
|
|
247 |
for(int i = 0; i < bandList.getDrawableBandsCount(); i++) {
|
|
248 |
switch(getDataType()[0]) {
|
|
200 | 249 |
case IBuffer.TYPE_BYTE:raster.assign(i, raster.getByteNoDataValue());break; |
201 | 250 |
case IBuffer.TYPE_SHORT:raster.assign(i, raster.getShortNoDataValue());break; |
202 | 251 |
case IBuffer.TYPE_INT:raster.assign(i, raster.getIntNoDataValue());break; |
... | ... | |
825 | 874 |
* @see org.gvsig.raster.driver.datasetproperties.IHistogramable#getHistogram() |
826 | 875 |
*/ |
827 | 876 |
public Histogram getHistogram() throws HistogramException { |
877 |
percent = 0; |
|
828 | 878 |
if(histogram == null) |
829 | 879 |
histogram = new DatasetListHistogram(this); |
830 | 880 |
|
831 | 881 |
try { |
832 | 882 |
Histogram tmp = histogram.getHistogram(); |
883 |
percent = 100; |
|
833 | 884 |
return tmp; |
834 | 885 |
} catch (FileNotOpenException e) { |
835 | 886 |
throw new HistogramException("FileNotOpenException"); |
... | ... | |
860 | 911 |
* @see org.gvsig.raster.util.IHistogramable#getPercent() |
861 | 912 |
*/ |
862 | 913 |
public int getPercent() { |
863 |
if (histogram != null) return histogram.getPercent(); |
|
864 |
return 0; |
|
914 |
return percent; |
|
865 | 915 |
} |
866 |
|
|
867 |
/* |
|
868 |
* (non-Javadoc) |
|
869 |
* @see org.gvsig.raster.util.IHistogramable#resetPercent() |
|
870 |
*/ |
|
871 |
public void resetPercent() { |
|
872 |
if (histogram != null) histogram.resetPercent(); |
|
873 |
} |
|
874 |
|
|
875 |
/* |
|
876 |
* (non-Javadoc) |
|
877 |
* @see org.gvsig.raster.util.ICancellable#isCanceled() |
|
878 |
*/ |
|
879 |
public boolean isCanceled() { |
|
880 |
if (histogram != null) return histogram.isCanceled(); |
|
881 |
return false; |
|
882 |
} |
|
883 |
|
|
884 |
/* |
|
885 |
* (non-Javadoc) |
|
886 |
* @see org.gvsig.raster.util.ICancellable#setCanceled(boolean) |
|
887 |
*/ |
|
888 |
public void setCanceled(boolean value) { |
|
889 |
if (histogram != null) histogram.setCanceled(value); |
|
890 |
} |
|
891 |
} |
|
916 |
|
|
917 |
} |
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/IBuffer.java | ||
---|---|---|
20 | 20 |
|
21 | 21 |
import java.awt.image.DataBuffer; |
22 | 22 |
|
23 |
import org.gvsig.raster.dataaccess.buffer.IBand;
|
|
23 |
import org.gvsig.raster.buffer.IBand; |
|
24 | 24 |
import org.gvsig.raster.util.IHistogramable; |
25 | 25 |
|
26 | 26 |
/** |
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/GeoInfo.java | ||
---|---|---|
23 | 23 |
|
24 | 24 |
import org.cresques.cts.IProjection; |
25 | 25 |
import org.cresques.geo.Projected; |
26 |
import org.gvsig.raster.dataset.io.IRegistrableRasterFormat; |
|
26 | 27 |
import org.gvsig.raster.shared.Extent; |
27 | 28 |
|
28 | 29 |
|
... | ... | |
69 | 70 |
public GeoInfo() { |
70 | 71 |
} |
71 | 72 |
|
72 |
public GeoInfo(IProjection p, String n) {
|
|
73 |
public GeoInfo(IProjection p, Object param) {
|
|
73 | 74 |
proj = p; |
74 |
name = n; |
|
75 |
if(param instanceof String) |
|
76 |
name = ((String)param); |
|
77 |
else if(param instanceof IRegistrableRasterFormat) |
|
78 |
name = ((IRegistrableRasterFormat)param).getFormatID(); |
|
79 |
else |
|
80 |
name = String.valueOf(System.currentTimeMillis()); |
|
81 |
|
|
75 | 82 |
extent = new Extent(); |
76 | 83 |
transformRMF = new AffineTransform(); |
77 | 84 |
transformTFW = new AffineTransform(); |
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/io/GdalWriter.java | ||
---|---|---|
25 | 25 |
import java.io.IOException; |
26 | 26 |
|
27 | 27 |
import org.cresques.cts.IProjection; |
28 |
import org.gvsig.raster.dataaccess.buffer.RasterBuffer;
|
|
28 |
import org.gvsig.raster.buffer.RasterBuffer; |
|
29 | 29 |
import org.gvsig.raster.dataset.GeoRasterWriter; |
30 | 30 |
import org.gvsig.raster.dataset.IDataWriter; |
31 | 31 |
import org.gvsig.raster.dataset.NotSupportedExtensionException; |
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/io/MemoryRasterDriver.java | ||
---|---|---|
27 | 27 |
import java.awt.geom.Point2D; |
28 | 28 |
|
29 | 29 |
import org.cresques.cts.ICoordTrans; |
30 |
import org.cresques.cts.IProjection; |
|
30 | 31 |
import org.gvsig.raster.dataset.BandList; |
31 | 32 |
import org.gvsig.raster.dataset.FileNotOpenException; |
32 | 33 |
import org.gvsig.raster.dataset.GeoInfo; |
... | ... | |
36 | 37 |
import org.gvsig.raster.dataset.RasterDataset; |
37 | 38 |
import org.gvsig.raster.dataset.RasterDriverException; |
38 | 39 |
import org.gvsig.raster.shared.Extent; |
40 |
import org.gvsig.raster.util.extensionPoints.ExtensionPoints; |
|
41 |
import org.gvsig.raster.util.extensionPoints.ExtensionPointsSingleton; |
|
39 | 42 |
|
43 |
import es.gva.cit.jgdal.Gdal; |
|
44 |
import es.gva.cit.jgdal.GdalBuffer; |
|
45 |
import es.gva.cit.jgdal.GdalException; |
|
46 |
|
|
40 | 47 |
/** |
41 | 48 |
* Driver para datos cargados en un objeto IBuffer |
42 | 49 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
... | ... | |
47 | 54 |
private Extent v = null; |
48 | 55 |
private IBuffer buffer = null; |
49 | 56 |
|
50 |
public MemoryRasterDriver(Object buf, Extent ext)throws NotSupportedExtensionException{ |
|
57 |
static { |
|
58 |
ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
|
59 |
extensionPoints.add("RasterDriver", new MemoryRasterDriverParam().getFormatID(), MemoryRasterDriver.class); |
|
60 |
} |
|
61 |
|
|
62 |
/** |
|
63 |
* Constructor. Asigna el buffer de datos y la extensi?n |
|
64 |
* @param proj Proyecci?n |
|
65 |
* @param buf Buffer |
|
66 |
* @throws NotSupportedExtensionException |
|
67 |
*/ |
|
68 |
public MemoryRasterDriver(IProjection proj, Object buf)throws NotSupportedExtensionException { |
|
51 | 69 |
super(null, null); |
52 | 70 |
if(!(buf instanceof MemoryRasterDriverParam)) |
53 | 71 |
throw new NotSupportedExtensionException("Buffer not supported"); |
... | ... | |
69 | 87 |
setDataType(buffer.getDataType()); |
70 | 88 |
} |
71 | 89 |
|
72 |
/** |
|
73 |
* |
|
90 |
/* |
|
91 |
* (non-Javadoc) |
|
92 |
* @see org.gvsig.raster.dataset.GeoInfo#load() |
|
74 | 93 |
*/ |
75 | 94 |
public GeoInfo load() { |
76 | 95 |
return this; |
77 | 96 |
} |
78 | 97 |
|
79 |
/** |
|
80 |
* |
|
98 |
/* |
|
99 |
* (non-Javadoc) |
|
100 |
* @see org.gvsig.raster.dataset.GeoInfo#close() |
|
81 | 101 |
*/ |
82 | 102 |
public void close() { |
83 | 103 |
|
... | ... | |
151 | 171 |
} |
152 | 172 |
|
153 | 173 |
/* (non-Javadoc) |
154 |
* @see org.cresques.io.GeoRasterFile#updateImage(int, int, org.cresques.cts.ICoordTrans) |
|
155 |
*/ |
|
156 |
public Image updateImage(int width, int height, ICoordTrans rp) { |
|
157 |
return null; |
|
158 |
} |
|
159 |
|
|
160 |
public IBuffer getRaster(int width, int height, ICoordTrans rp) { |
|
161 |
IBuffer raster = null; |
|
162 |
|
|
163 |
Point2D begin = worldToRaster(new Point2D.Double(v.minX(), v.maxY())); |
|
164 |
Point2D end = worldToRaster(new Point2D.Double(v.maxX(), v.minY())); |
|
165 |
|
|
166 |
//Comprobaciones |
|
167 |
if(begin.getX() < 0) |
|
168 |
begin.setLocation(0, begin.getY()); |
|
169 |
if(begin.getY() > buffer.getHeight()) |
|
170 |
begin.setLocation(begin.getX(), buffer.getHeight()); |
|
171 |
if(end.getY() < 0) |
|
172 |
end.setLocation(begin.getX(), 0); |
|
173 |
if(end.getX() > buffer.getWidth()) |
|
174 |
begin.setLocation(buffer.getWidth(), begin.getY()); |
|
175 |
|
|
176 |
int alpha = 0;//(getAlpha() & 0xff) << 24; |
|
177 |
|
|
178 |
try { |
|
179 |
//Esta funci?n se usa para la renderizaci?n, por eso se crean 4 bandas a pi?on fijo |
|
180 |
//raster = RasterBuffer.getBuffer(getDataType(), width, height, 4, true); |
|
181 |
|
|
182 |
/*setBand(RED_BAND, rBandNr); |
|
183 |
setBand(GREEN_BAND, gBandNr); |
|
184 |
setBand(BLUE_BAND, bBandNr);*/ |
|
185 |
|
|
186 |
double w = Math.abs(end.getX() - begin.getX()); |
|
187 |
double h = Math.abs(end.getY() - begin.getY()); |
|
188 |
double stepX = w / ((double)width); |
|
189 |
double stepY = h / ((double)height); |
|
190 |
int endLine = (((int)end.getY() + 1) < buffer.getHeight()) ? ((int)end.getY() + 1) : buffer.getHeight(); |
|
191 |
int endCol = (((int)end.getX() + 1) < buffer.getWidth()) ? ((int)end.getX() + 1) : buffer.getWidth(); |
|
192 |
double initY = begin.getY() - (int)begin.getY(); |
|
193 |
double initX = begin.getX() - (int)begin.getX(); |
|
194 |
|
|
195 |
switch(getDataType()){ |
|
196 |
case IBuffer.TYPE_BYTE: |
|
197 |
//writeRasterBufByte(begin, end, alpha, raster, width, height, w, h, stepX, stepY, endLine, endCol, initY, initX); |
|
198 |
break; |
|
199 |
case IBuffer.TYPE_SHORT:; |
|
200 |
writeRasterBufShort(begin, end, alpha, raster, width, height, w, h, stepX, stepY, endLine, endCol, initY, initX); |
|
201 |
break; |
|
202 |
case IBuffer.TYPE_INT: |
|
203 |
//writeRasterBufInt(begin, end, alpha, raster, width, height, w, h, stepX, stepY, endLine, endCol, initY, initX); |
|
204 |
break; |
|
205 |
case IBuffer.TYPE_FLOAT: |
|
206 |
writeRasterBufFloat(begin, end, alpha, raster, width, height, w, h, stepX, stepY, endLine, endCol, initY, initX); |
|
207 |
break; |
|
208 |
case IBuffer.TYPE_DOUBLE: |
|
209 |
//writeRasterBufDouble(begin, end, alpha, raster, width, height, w, h, stepX, stepY, endLine, endCol, initY, initX); |
|
210 |
break; |
|
211 |
case IBuffer.TYPE_UNDEFINED:break; |
|
212 |
} |
|
213 |
|
|
214 |
} catch (Exception e) { |
|
215 |
e.printStackTrace(); |
|
216 |
} |
|
217 |
|
|
218 |
return raster; |
|
219 |
} |
|
220 |
|
|
221 |
private void writeRasterBufShort(Point2D begin, Point2D end, int alpha, IBuffer rb, int widthImg, int heightImg, |
|
222 |
double w, double h, double stepX, double stepY, int endLine, int endCol, double l, double initX){ |
|
223 |
short[][][] pRGBArray = new short[4][(int)Math.ceil(h) + 1][(int)Math.ceil(w) + 1]; |
|
224 |
|
|
225 |
int x = 0, y = 0; |
|
226 |
for (int line = (int)begin.getY(); line < endLine ; line ++) { |
|
227 |
x = 0; |
|
228 |
for (int col = (int)begin.getX(); col < endCol; col ++){ |
|
229 |
pRGBArray[0][y][x] = buffer.getElemShort(line, col, rBandNr); |
|
230 |
pRGBArray[1][y][x] = buffer.getElemShort(line, col, gBandNr); |
|
231 |
pRGBArray[2][y][x] = buffer.getElemShort(line, col, bBandNr); |
|
232 |
pRGBArray[3][y][x] = (short)alpha; |
|
233 |
x ++; |
|
234 |
} |
|
235 |
y ++; |
|
236 |
} |
|
237 |
for (int line = 0; line < heightImg; line ++) { |
|
238 |
double c = initX; |
|
239 |
for (int col = 0; col < widthImg; col ++){ |
|
240 |
try{ |
|
241 |
for(int band = 0; band < 4; band ++) |
|
242 |
rb.setElem(line, col, band, pRGBArray[band][(int)l][(int)c]); |
|
243 |
}catch(ArrayIndexOutOfBoundsException e){} |
|
244 |
c += stepX; |
|
245 |
} |
|
246 |
l += stepY; |
|
247 |
} |
|
248 |
|
|
249 |
} |
|
250 |
|
|
251 |
private void writeRasterBufFloat(Point2D begin, Point2D end, int alpha, IBuffer rb, int widthImg, int heightImg, |
|
252 |
double w, double h, double stepX, double stepY, int endLine, int endCol, double l, double initX){ |
|
253 |
float[][][] pRGBArray = new float[4][(int)Math.ceil(h) + 1][(int)Math.ceil(w) + 1]; |
|
254 |
|
|
255 |
int x = 0, y = 0; |
|
256 |
for (int line = (int)begin.getY(); line < endLine ; line ++) { |
|
257 |
x = 0; |
|
258 |
for (int col = (int)begin.getX(); col < endCol; col ++){ |
|
259 |
pRGBArray[0][y][x] = buffer.getElemFloat(line, col, rBandNr); |
|
260 |
pRGBArray[1][y][x] = buffer.getElemFloat(line, col, gBandNr); |
|
261 |
pRGBArray[2][y][x] = buffer.getElemFloat(line, col, bBandNr); |
|
262 |
pRGBArray[3][y][x] = (float)alpha; |
|
263 |
x ++; |
|
264 |
} |
|
265 |
y ++; |
|
266 |
} |
|
267 |
for (int line = 0; line < heightImg; line ++) { |
|
268 |
double c = initX; |
|
269 |
for (int col = 0; col < widthImg; col ++){ |
|
270 |
try{ |
|
271 |
for(int band = 0; band < 4; band ++) |
|
272 |
rb.setElem(line, col, band, pRGBArray[band][(int)l][(int)c]); |
|
273 |
}catch(ArrayIndexOutOfBoundsException e){} |
|
274 |
c += stepX; |
|
275 |
} |
|
276 |
l += stepY; |
|
277 |
} |
|
278 |
|
|
279 |
} |
|
280 |
|
|
281 |
|
|
282 |
/* (non-Javadoc) |
|
283 | 174 |
* @see org.cresques.io.GeoRasterFile#getData(int, int, int) |
284 | 175 |
*/ |
285 | 176 |
public Object getData(int x, int y, int band) { |
... | ... | |
324 | 215 |
} |
325 | 216 |
|
326 | 217 |
/** |
327 |
* Obtiene los par?metros de la transformaci?n af?n que corresponde con los elementos de |
|
328 |
* un fichero tfw. |
|
218 |
* Obtiene los par?metros de la transformaci?n af?n |
|
329 | 219 |
* <UL> |
330 | 220 |
* <LI>[1]tama?o de pixel en X</LI> |
331 | 221 |
* <LI>[2]rotaci?n en X</LI> |
... | ... | |
334 | 224 |
* <LI>[0]origen en X</LI> |
335 | 225 |
* <LI>[3]origen en Y</LI> |
336 | 226 |
* </UL> |
337 |
* Este m?todo debe ser reimplementado por el driver si tiene esta informaci?n. En principio |
|
338 |
* Gdal es capaz de proporcionarla de esta forma. |
|
339 |
* |
|
340 |
* En caso de que exista fichero .rmf asociado al raster pasaremos de la informaci?n de georreferenciaci?n |
|
341 |
* del .tfw y devolveremos la que est? asociada al rmf |
|
227 |
* Este m?todo debe ser reimplementado por el driver si tiene esta informaci?n. |
|
342 | 228 |
* @return vector de double con los elementos de la transformaci?n af?n. |
343 | 229 |
*/ |
344 | 230 |
public double[] getTransform(){ |
345 |
return null; |
|
231 |
return new double[]{extent.minX(), |
|
232 |
extent.width() / buffer.getWidth(), |
|
233 |
0.0, |
|
234 |
extent.maxY(), |
|
235 |
0.0, |
|
236 |
extent.height() / buffer.getHeight()}; |
|
346 | 237 |
} |
347 | 238 |
|
348 | 239 |
/* |
... | ... | |
374 | 265 |
return buffer.getDataType(); |
375 | 266 |
} |
376 | 267 |
|
268 |
/** |
|
269 |
* Ajusta los puntos pasados por par?metro a los l?mites del buffer. Es decir si alguno excede |
|
270 |
* los l?mites por arriba o por abajo los ajusta. |
|
271 |
* @param begin Punto inicial |
|
272 |
* @param end Punto final |
|
273 |
*/ |
|
274 |
private void adjustPointsToBufferLimits(Point2D begin, Point2D end) { |
|
275 |
if(begin.getX() < 0) |
|
276 |
begin.setLocation(0, begin.getY()); |
|
277 |
if(begin.getY() > buffer.getHeight()) |
|
278 |
begin.setLocation(begin.getX(), buffer.getHeight()); |
|
279 |
if(end.getY() < 0) |
|
280 |
end.setLocation(begin.getX(), 0); |
|
281 |
if(end.getX() > buffer.getWidth()) |
|
282 |
begin.setLocation(buffer.getWidth(), begin.getY()); |
|
283 |
} |
|
284 |
|
|
377 | 285 |
/* |
378 | 286 |
* (non-Javadoc) |
379 | 287 |
* @see org.gvsig.raster.dataset.RasterDataset#getWindowRaster(double, double, double, double, org.gvsig.raster.dataset.BandList, org.gvsig.raster.dataset.IBuffer, boolean) |
380 | 288 |
*/ |
381 | 289 |
public IBuffer getWindowRaster(double x, double y, double w, double h, BandList bandList, IBuffer rasterBuf, boolean adjustToExtent) { |
382 |
Point2D begin = worldToRaster(new Point2D.Double(x, y)); |
|
383 |
Point2D end = worldToRaster(new Point2D.Double(x + w, y - h)); |
|
384 |
return getWindowRaster(begin.getX(), begin.getY(), Math.abs(end.getX() - begin.getX()), Math.abs(end.getY() - begin.getY()), bandList, rasterBuf, adjustToExtent); |
|
290 |
Point2D begin = worldToRaster(new Point2D.Double(x, y)); |
|
291 |
Point2D end = worldToRaster(new Point2D.Double(x + w, y - h)); |
|
292 |
|
|
293 |
adjustPointsToBufferLimits(begin, end); |
|
294 |
|
|
295 |
switch(buffer.getDataType()){ |
|
296 |
case IBuffer.TYPE_BYTE: writeByteBuffer(rasterBuf, 1, 1, begin, bandList); break; |
|
297 |
case IBuffer.TYPE_SHORT: writeShortBuffer(rasterBuf, 1, 1, begin, bandList); break; |
|
298 |
case IBuffer.TYPE_INT: writeIntBuffer(rasterBuf, 1, 1, begin, bandList); break; |
|
299 |
case IBuffer.TYPE_FLOAT: writeFloatBuffer(rasterBuf, 1, 1, begin, bandList); break; |
|
300 |
case IBuffer.TYPE_DOUBLE: writeDoubleBuffer(rasterBuf, 1, 1, begin, bandList); break; |
|
301 |
} |
|
302 |
return rasterBuf; |
|
385 | 303 |
} |
386 | 304 |
|
387 | 305 |
/* |
... | ... | |
389 | 307 |
* @see org.gvsig.raster.dataset.RasterDataset#getWindowRaster(double, double, double, double, int, int, org.gvsig.raster.dataset.BandList, org.gvsig.raster.dataset.IBuffer, boolean) |
390 | 308 |
*/ |
391 | 309 |
public IBuffer getWindowRaster(double minX, double minY, double maxX, double maxY, int bufWidth, int bufHeight, BandList bandList, IBuffer rasterBuf, boolean adjustToExtent) { |
392 |
return null; |
|
310 |
Point2D begin = worldToRaster(new Point2D.Double(minX, maxY)); |
|
311 |
Point2D end = worldToRaster(new Point2D.Double(maxX, minY)); |
|
312 |
|
|
313 |
adjustPointsToBufferLimits(begin, end); |
|
314 |
|
|
315 |
//Ancho y alto en pixels (double) del area seleccionada. |
|
316 |
double w = Math.abs(end.getX() - begin.getX()); |
|
317 |
double h = Math.abs(end.getY() - begin.getY()); |
|
318 |
|
|
319 |
//Relaci?n entre el n?mero de pixels del buffer origen (area seleccionada) y el destino |
|
320 |
double stepX = w / ((double)bufWidth); |
|
321 |
double stepY = h / ((double)bufHeight); |
|
322 |
|
|
323 |
//Escritura separada en 5 llamadas para mejorar el rendimiento |
|
324 |
switch(buffer.getDataType()){ |
|
325 |
case IBuffer.TYPE_BYTE: writeByteBuffer(rasterBuf, stepX, stepY, begin, bandList); break; |
|
326 |
case IBuffer.TYPE_SHORT: writeShortBuffer(rasterBuf, stepX, stepY, begin, bandList); break; |
|
327 |
case IBuffer.TYPE_INT: writeIntBuffer(rasterBuf, stepX, stepY, begin, bandList); break; |
|
328 |
case IBuffer.TYPE_FLOAT: writeFloatBuffer(rasterBuf, stepX, stepY, begin, bandList); break; |
|
329 |
case IBuffer.TYPE_DOUBLE: writeDoubleBuffer(rasterBuf, stepX, stepY, begin, bandList); break; |
|
330 |
} |
|
331 |
|
|
332 |
/*int xPx = 0, yPx = 0; |
|
333 |
for (int iBand = 0; iBand < rasterBuf.getBandCount(); iBand++) { |
|
334 |
yPx = 0; |
|
335 |
for(double row = begin.getY(); yPx < bufHeight; row += stepY) { |
|
336 |
xPx = 0; |
|
337 |
for(double col = begin.getX(); xPx < bufWidth; col += stepX) { |
|
338 |
switch(buffer.getDataType()){ |
|
339 |
case IBuffer.TYPE_BYTE: rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemByte((int)row, (int)col, iBand)); break; |
|
340 |
case IBuffer.TYPE_SHORT: rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemShort((int)row, (int)col, iBand)); break; |
|
341 |
case IBuffer.TYPE_INT: rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemInt((int)row, (int)col, iBand)); break; |
|
342 |
case IBuffer.TYPE_FLOAT: rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemFloat((int)row, (int)col, iBand)); break; |
|
343 |
case IBuffer.TYPE_DOUBLE: rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemDouble((int)row, (int)col, iBand)); break; |
|
344 |
} |
|
345 |
xPx ++; |
|
346 |
} |
|
347 |
yPx ++; |
|
348 |
} |
|
349 |
}*/ |
|
350 |
return rasterBuf; |
|
393 | 351 |
} |
394 | 352 |
|
353 |
/** |
|
354 |
* Escribe sobre el buffer pasado por par?metro los valores solicitados, desde el buffer de la clase. Los valores |
|
355 |
* se solicitan a trav?s de los par?metros. En ellos se especifica el tama?o del buffer de destino, las bandas a |
|
356 |
* escribir, el punto inicial en coordenadas pixel (double) y el incremento. |
|
357 |
* @param rasterBuf Buffer donde se escriben los datos |
|
358 |
* @param stepX Incremento en X. Cada vez que se escribe un pixel en X se incrementa el contador en stepX pixels. Esto es necesario |
|
359 |
* ya que el buffer destino no tiene porque tener el mismo ancho que el de origen. Este valor suele ser ancho_buffer_origen / ancho_buffer_destino. |
|
360 |
* @param stepY Incremento en Y. Cada vez que se escribe un pixel en Y se incrementa el contador en stepY pixels. Esto es necesario |
|
361 |
* ya que el buffer destino no tiene porque tener el mismo alto que el de origen. Este valor suele ser alto_buffer_origen / alto_buffer_destino. |
|
362 |
* @param begin pixel donde se comienza a leer en el buffer de origen. Este valor es decimal ya que no tiene porque empezar a leerse al principio |
|
363 |
* del pixel. Esto es util cuando se supersamplea. |
|
364 |
*/ |
|
365 |
private void writeByteBuffer(IBuffer rasterBuf, double stepX, double stepY, Point2D begin, BandList bandList) { |
|
366 |
int xPx = 0, yPx = 0; |
|
367 |
for (int iBand = 0; iBand < buffer.getBandCount(); iBand++) { |
|
368 |
int[] drawableBands = bandList.getBufferBandToDraw(this.getFName(), iBand); |
|
369 |
if(drawableBands == null || (drawableBands.length == 1 && drawableBands[0] == -1)) |
|
370 |
continue; |
|
371 |
for(int drawBands = 0; drawBands < drawableBands.length; drawBands++) { |
|
372 |
yPx = 0; |
|
373 |
for(double row = begin.getY(); yPx < rasterBuf.getHeight(); row += stepY) { |
|
374 |
xPx = 0; |
|
375 |
for(double col = begin.getX(); xPx < rasterBuf.getWidth(); col += stepX) { |
|
376 |
rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemByte((int)row, (int)col, iBand)); |
|
377 |
xPx ++; |
|
378 |
} |
|
379 |
yPx ++; |
|
380 |
} |
|
381 |
} |
|
382 |
} |
|
383 |
} |
|
384 |
|
|
385 |
/** |
|
386 |
* Escribe sobre el buffer pasado por par?metro los valores solicitados, desde el buffer de la clase. Los valores |
|
387 |
* se solicitan a trav?s de los par?metros. En ellos se especifica el tama?o del buffer de destino, las bandas a |
|
388 |
* escribir, el punto inicial en coordenadas pixel (double) y el incremento. |
|
389 |
* @param rasterBuf Buffer donde se escriben los datos |
|
390 |
* @param stepX Incremento en X. Cada vez que se escribe un pixel en X se incrementa el contador en stepX pixels. Esto es necesario |
|
391 |
* ya que el buffer destino no tiene porque tener el mismo ancho que el de origen. Este valor suele ser ancho_buffer_origen / ancho_buffer_destino. |
|
392 |
* @param stepY Incremento en Y. Cada vez que se escribe un pixel en Y se incrementa el contador en stepY pixels. Esto es necesario |
|
393 |
* ya que el buffer destino no tiene porque tener el mismo alto que el de origen. Este valor suele ser alto_buffer_origen / alto_buffer_destino. |
|
394 |
* @param begin pixel donde se comienza a leer en el buffer de origen. Este valor es decimal ya que no tiene porque empezar a leerse al principio |
|
395 |
* del pixel. Esto es util cuando se supersamplea. |
|
396 |
*/ |
|
397 |
private void writeShortBuffer(IBuffer rasterBuf, double stepX, double stepY, Point2D begin, BandList bandList) { |
|
398 |
int xPx = 0, yPx = 0; |
|
399 |
for (int iBand = 0; iBand < buffer.getBandCount(); iBand++) { |
|
400 |
int[] drawableBands = bandList.getBufferBandToDraw(this.getFName(), iBand); |
|
401 |
if(drawableBands == null || (drawableBands.length == 1 && drawableBands[0] == -1)) |
|
402 |
continue; |
|
403 |
for(int drawBands = 0; drawBands < drawableBands.length; drawBands++) { |
|
404 |
yPx = 0; |
|
405 |
for(double row = begin.getY(); yPx < rasterBuf.getHeight(); row += stepY) { |
|
406 |
xPx = 0; |
|
407 |
for(double col = begin.getX(); xPx < rasterBuf.getWidth(); col += stepX) { |
|
408 |
rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemShort((int)row, (int)col, iBand)); |
|
409 |
xPx ++; |
|
410 |
} |
|
411 |
yPx ++; |
|
412 |
} |
|
413 |
} |
|
414 |
} |
|
415 |
} |
|
416 |
|
|
417 |
/** |
|
418 |
* Escribe sobre el buffer pasado por par?metro los valores solicitados, desde el buffer de la clase. Los valores |
|
419 |
* se solicitan a trav?s de los par?metros. En ellos se especifica el tama?o del buffer de destino, las bandas a |
|
420 |
* escribir, el punto inicial en coordenadas pixel (double) y el incremento. |
|
421 |
* @param rasterBuf Buffer donde se escriben los datos |
|
422 |
* @param stepX Incremento en X. Cada vez que se escribe un pixel en X se incrementa el contador en stepX pixels. Esto es necesario |
|
423 |
* ya que el buffer destino no tiene porque tener el mismo ancho que el de origen. Este valor suele ser ancho_buffer_origen / ancho_buffer_destino. |
|
424 |
* @param stepY Incremento en Y. Cada vez que se escribe un pixel en Y se incrementa el contador en stepY pixels. Esto es necesario |
|
425 |
* ya que el buffer destino no tiene porque tener el mismo alto que el de origen. Este valor suele ser alto_buffer_origen / alto_buffer_destino. |
|
426 |
* @param begin pixel donde se comienza a leer en el buffer de origen. Este valor es decimal ya que no tiene porque empezar a leerse al principio |
|
427 |
* del pixel. Esto es util cuando se supersamplea. |
|
428 |
*/ |
|
429 |
private void writeIntBuffer(IBuffer rasterBuf, double stepX, double stepY, Point2D begin, BandList bandList) { |
|
430 |
int xPx = 0, yPx = 0; |
|
431 |
for (int iBand = 0; iBand < buffer.getBandCount(); iBand++) { |
|
432 |
int[] drawableBands = bandList.getBufferBandToDraw(this.getFName(), iBand); |
|
433 |
if(drawableBands == null || (drawableBands.length == 1 && drawableBands[0] == -1)) |
|
434 |
continue; |
|
435 |
for(int drawBands = 0; drawBands < drawableBands.length; drawBands++) { |
|
436 |
yPx = 0; |
|
437 |
for(double row = begin.getY(); yPx < rasterBuf.getHeight(); row += stepY) { |
|
438 |
xPx = 0; |
|
439 |
for(double col = begin.getX(); xPx < rasterBuf.getWidth(); col += stepX) { |
|
440 |
rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemInt((int)row, (int)col, iBand)); |
|
441 |
xPx ++; |
|
442 |
} |
|
443 |
yPx ++; |
|
444 |
} |
|
445 |
} |
|
446 |
} |
|
447 |
} |
|
448 |
|
|
449 |
/** |
|
450 |
* Escribe sobre el buffer pasado por par?metro los valores solicitados, desde el buffer de la clase. Los valores |
|
451 |
* se solicitan a trav?s de los par?metros. En ellos se especifica el tama?o del buffer de destino, las bandas a |
|
452 |
* escribir, el punto inicial en coordenadas pixel (double) y el incremento. |
|
453 |
* @param rasterBuf Buffer donde se escriben los datos |
|
454 |
* @param stepX Incremento en X. Cada vez que se escribe un pixel en X se incrementa el contador en stepX pixels. Esto es necesario |
|
455 |
* ya que el buffer destino no tiene porque tener el mismo ancho que el de origen. Este valor suele ser ancho_buffer_origen / ancho_buffer_destino. |
|
456 |
* @param stepY Incremento en Y. Cada vez que se escribe un pixel en Y se incrementa el contador en stepY pixels. Esto es necesario |
|
457 |
* ya que el buffer destino no tiene porque tener el mismo alto que el de origen. Este valor suele ser alto_buffer_origen / alto_buffer_destino. |
|
458 |
* @param begin pixel donde se comienza a leer en el buffer de origen. Este valor es decimal ya que no tiene porque empezar a leerse al principio |
|
459 |
* del pixel. Esto es util cuando se supersamplea. |
|
460 |
*/ |
|
461 |
private void writeFloatBuffer(IBuffer rasterBuf, double stepX, double stepY, Point2D begin, BandList bandList) { |
|
462 |
int xPx = 0, yPx = 0; |
|
463 |
for (int iBand = 0; iBand < buffer.getBandCount(); iBand++) { |
|
464 |
int[] drawableBands = bandList.getBufferBandToDraw(this.getFName(), iBand); |
|
465 |
if(drawableBands == null || (drawableBands.length == 1 && drawableBands[0] == -1)) |
|
466 |
continue; |
|
467 |
for(int drawBands = 0; drawBands < drawableBands.length; drawBands++) { |
|
468 |
yPx = 0; |
|
469 |
for(double row = begin.getY(); yPx < rasterBuf.getHeight(); row += stepY) { |
|
470 |
xPx = 0; |
|
471 |
for(double col = begin.getX(); xPx < rasterBuf.getWidth(); col += stepX) { |
|
472 |
rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemFloat((int)row, (int)col, iBand)); |
|
473 |
xPx ++; |
|
474 |
} |
|
475 |
yPx ++; |
|
476 |
} |
|
477 |
} |
|
478 |
} |
|
479 |
} |
|
480 |
|
|
481 |
/** |
|
482 |
* Escribe sobre el buffer pasado por par?metro los valores solicitados, desde el buffer de la clase. Los valores |
|
483 |
* se solicitan a trav?s de los par?metros. En ellos se especifica el tama?o del buffer de destino, las bandas a |
|
484 |
* escribir, el punto inicial en coordenadas pixel (double) y el incremento. |
|
485 |
* @param rasterBuf Buffer donde se escriben los datos |
|
486 |
* @param stepX Incremento en X. Cada vez que se escribe un pixel en X se incrementa el contador en stepX pixels. Esto es necesario |
|
487 |
* ya que el buffer destino no tiene porque tener el mismo ancho que el de origen. Este valor suele ser ancho_buffer_origen / ancho_buffer_destino. |
|
488 |
* @param stepY Incremento en Y. Cada vez que se escribe un pixel en Y se incrementa el contador en stepY pixels. Esto es necesario |
|
489 |
* ya que el buffer destino no tiene porque tener el mismo alto que el de origen. Este valor suele ser alto_buffer_origen / alto_buffer_destino. |
|
490 |
* @param begin pixel donde se comienza a leer en el buffer de origen. Este valor es decimal ya que no tiene porque empezar a leerse al principio |
|
491 |
* del pixel. Esto es util cuando se supersamplea. |
|
492 |
*/ |
|
493 |
private void writeDoubleBuffer(IBuffer rasterBuf, double stepX, double stepY, Point2D begin, BandList bandList) { |
|
494 |
int xPx = 0, yPx = 0; |
|
495 |
for (int iBand = 0; iBand < buffer.getBandCount(); iBand++) { |
|
496 |
int[] drawableBands = bandList.getBufferBandToDraw(this.getFName(), iBand); |
|
497 |
if(drawableBands == null || (drawableBands.length == 1 && drawableBands[0] == -1)) |
|
498 |
continue; |
|
499 |
for(int drawBands = 0; drawBands < drawableBands.length; drawBands++) { |
|
500 |
yPx = 0; |
|
501 |
for(double row = begin.getY(); yPx < rasterBuf.getHeight(); row += stepY) { |
|
502 |
xPx = 0; |
|
503 |
for(double col = begin.getX(); xPx < rasterBuf.getWidth(); col += stepX) { |
|
504 |
rasterBuf.setElem(yPx, xPx, iBand, buffer.getElemDouble((int)row, (int)col, iBand)); |
|
505 |
xPx ++; |
|
506 |
} |
|
507 |
yPx ++; |
|
508 |
} |
|
509 |
} |
|
510 |
} |
|
511 |
} |
|
512 |
|
|
395 | 513 |
/* |
396 | 514 |
* (non-Javadoc) |
397 | 515 |
* @see org.gvsig.raster.dataset.RasterDataset#getWindowRaster(int, int, int, int, org.gvsig.raster.dataset.BandList, org.gvsig.raster.dataset.IBuffer) |
398 | 516 |
*/ |
399 | 517 |
public IBuffer getWindowRaster(int x, int y, int w, int h, BandList bandList, IBuffer rasterBuf) { |
400 | 518 |
for(int iBand = 0; iBand < buffer.getBandCount(); iBand ++){ |
401 |
int[] drawableBands = bandList.getBufferBandToDraw(null, iBand);
|
|
519 |
int[] drawableBands = bandList.getBufferBandToDraw(this.getFName(), iBand);
|
|
402 | 520 |
if(drawableBands == null || (drawableBands.length == 1 && drawableBands[0] == -1)) |
403 | 521 |
continue; |
404 |
if(buffer.getDataType() == IBuffer.TYPE_BYTE){ |
|
405 |
for(int drawBands = 0; drawBands < drawableBands.length; drawBands++){ |
|
522 |
if(buffer.getDataType() == IBuffer.TYPE_BYTE) {
|
|
523 |
for(int drawBands = 0; drawBands < drawableBands.length; drawBands++) {
|
|
406 | 524 |
for(int line = y; line < (y + h); line ++) |
407 | 525 |
for(int col = x; col < (x + w); col ++) |
408 | 526 |
rasterBuf.setElem((line - y), (col - x), drawableBands[drawBands], buffer.getElemByte(line, col, drawableBands[drawBands])); |
... | ... | |
441 | 559 |
* @see org.gvsig.raster.dataset.RasterDataset#getWindowRaster(int, int, int, int, int, int, org.gvsig.raster.dataset.BandList, org.gvsig.raster.dataset.IBuffer) |
442 | 560 |
*/ |
443 | 561 |
public IBuffer getWindowRaster(int x, int y, int w, int h, int bufWidth, int bufHeight, BandList bandList, IBuffer rasterBuf) { |
444 |
return null; |
|
562 |
//Relaci?n entre el n?mero de pixels del buffer origen (area seleccionada) y el destino |
|
563 |
double stepX = w / ((double)bufWidth); |
|
564 |
double stepY = h / ((double)bufHeight); |
|
565 |
switch(buffer.getDataType()){ |
|
566 |
case IBuffer.TYPE_BYTE: writeByteBuffer(rasterBuf, stepX, stepY, new Point2D.Double(x, y), bandList); break; |
|
567 |
case IBuffer.TYPE_SHORT: writeShortBuffer(rasterBuf, stepX, stepY, new Point2D.Double(x, y), bandList); break; |
|
568 |
case IBuffer.TYPE_INT: writeIntBuffer(rasterBuf, stepX, stepY, new Point2D.Double(x, y), bandList); break; |
|
569 |
case IBuffer.TYPE_FLOAT: writeFloatBuffer(rasterBuf, stepX, stepY, new Point2D.Double(x, y), bandList); break; |
|
570 |
case IBuffer.TYPE_DOUBLE: writeDoubleBuffer(rasterBuf, stepX, stepY, new Point2D.Double(x, y), bandList); break; |
|
571 |
} |
|
572 |
return rasterBuf; |
|
445 | 573 |
} |
446 | 574 |
|
447 | 575 |
/* |
... | ... | |
449 | 577 |
* @see org.gvsig.raster.dataset.RasterDataset#readCompleteLine(int, int) |
450 | 578 |
*/ |
451 | 579 |
public Object readCompleteLine(int line, int band) throws InvalidSetViewException, FileNotOpenException, RasterDriverException { |
580 |
switch(buffer.getDataType()){ |
|
581 |
case IBuffer.TYPE_BYTE: return buffer.getLineFromBandByte(line, band); |
|
582 |
case IBuffer.TYPE_SHORT: return buffer.getLineFromBandShort(line, band); |
|
583 |
case IBuffer.TYPE_INT: return buffer.getLineFromBandInt(line, band); |
|
584 |
case IBuffer.TYPE_FLOAT: return buffer.getLineFromBandFloat(line, band); |
|
585 |
case IBuffer.TYPE_DOUBLE: return buffer.getLineFromBandDouble(line, band); |
|
586 |
} |
|
452 | 587 |
return null; |
453 | 588 |
} |
589 |
|
|
454 | 590 |
} |
455 | 591 |
|
456 | 592 |
|
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/io/MemoryRasterDriverParam.java | ||
---|---|---|
27 | 27 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
28 | 28 |
* |
29 | 29 |
*/ |
30 |
public class MemoryRasterDriverParam { |
|
30 |
public class MemoryRasterDriverParam implements IRegistrableRasterFormat{ |
|
31 |
private final String id = "memory"; |
|
31 | 32 |
private IBuffer buffer = null; |
32 | 33 |
private Extent extent = null; |
33 | 34 |
|
34 | 35 |
/** |
36 |
* Constructor vacio |
|
37 |
*/ |
|
38 |
public MemoryRasterDriverParam() { |
|
39 |
} |
|
40 |
|
|
41 |
/** |
|
42 |
* Contructor |
|
43 |
* @param buf buffer del driver |
|
44 |
* @param ext extensi?n del buffer |
|
45 |
*/ |
|
46 |
public MemoryRasterDriverParam(IBuffer buf, Extent ext) { |
|
47 |
this.buffer = buf; |
|
48 |
this.extent = ext; |
|
49 |
} |
|
50 |
|
|
51 |
/** |
|
35 | 52 |
* Obtiene el buffer de datos |
36 | 53 |
* @return IBuffer |
37 | 54 |
*/ |
... | ... | |
56 | 73 |
} |
57 | 74 |
|
58 | 75 |
/** |
59 |
* ASigna la extensi?n del buffer de datos
|
|
76 |
* Asigna la extensi?n del buffer de datos
|
|
60 | 77 |
* @param extent |
61 | 78 |
*/ |
62 | 79 |
public void setExtent(Extent extent) { |
63 | 80 |
this.extent = extent; |
64 | 81 |
} |
82 |
|
|
83 |
/** |
|
84 |
* Obtiene el identificador del driver |
|
85 |
* @return String |
|
86 |
*/ |
|
87 |
public String getFormatID() { |
|
88 |
return id; |
|
89 |
} |
|
65 | 90 |
|
66 | 91 |
} |
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/io/EcwDriver.java | ||
---|---|---|
44 | 44 |
import com.ermapper.ecw.JNCSInvalidSetViewException; |
45 | 45 |
import com.ermapper.ecw.JNCSProgressiveUpdate; |
46 | 46 |
|
47 |
import es.gva.cit.jgdal.GdalException; |
|
48 |
|
|
49 |
|
|
47 | 50 |
/** |
48 | 51 |
* Driver de Ecw |
49 | 52 |
* |
... | ... | |
97 | 100 |
* @param fName Nombre del fichero ecw |
98 | 101 |
* @throws NotSupportedExtensionException |
99 | 102 |
*/ |
100 |
public EcwDriver(IProjection proj, String fName)throws NotSupportedExtensionException {
|
|
101 |
super(proj, fName);
|
|
103 |
public EcwDriver(IProjection proj, Object param)throws NotSupportedExtensionException {
|
|
104 |
super(proj, ((String)param));
|
|
102 | 105 |
extent = new Extent(); |
103 | 106 |
try { |
104 | 107 |
|
105 |
if (!new File(fName).exists() && !fName.startsWith("ecwp:"))
|
|
108 |
if (!new File(((String)param)).exists() && !((String)param).startsWith("ecwp:"))
|
|
106 | 109 |
throw new NotSupportedExtensionException("Extension not supported"); |
107 | 110 |
|
108 |
file = new JNCSFile(fName, false);
|
|
111 |
file = new JNCSFile(((String)param), false);
|
|
109 | 112 |
load(); |
110 | 113 |
//readGeoInfo(fName); |
111 | 114 |
bandCount = file.numBands; |
... | ... | |
149 | 152 |
* Calcula la bounding box en la que est? metido el raster teniendo en cuenta |
150 | 153 |
* el tama?o de pixel y la rotaci?n. |
151 | 154 |
*/ |
152 |
private void boundingBoxWithoutRotation(){ |
|
155 |
private void boundingBoxWithoutRotation() {
|
|
153 | 156 |
double ox = file.originX; |
154 | 157 |
double oy = file.originY; |
155 | 158 |
double resx = file.cellIncrementX; |
... | ... | |
224 | 227 |
* @param nHeight Alto en pixeles del buffer |
225 | 228 |
* @return desplazamiento dentro del buffer en X e Y |
226 | 229 |
*/ |
227 |
private int[] calcStepBuffer(Extent dataExtent, int nWidth, int nHeight, int[] stpBuffer){ |
|
230 |
private int[] calcStepBuffer(Extent dataExtent, int nWidth, int nHeight, int[] stpBuffer) {
|
|
228 | 231 |
Extent imageExtent = new Extent(bBoxWithoutRot.minX, bBoxWithoutRot.minY, bBoxWithoutRot.maxX, bBoxWithoutRot.maxY); |
229 | 232 |
Extent ajustDataExtent = RasterUtilities.calculateAdjustedView(dataExtent, imageExtent); |
230 |
if(!RasterUtilities.compareExtents(dataExtent, ajustDataExtent)){ |
|
233 |
if(!RasterUtilities.compareExtents(dataExtent, ajustDataExtent)) {
|
|
231 | 234 |
Point2D p1 = worldToRaster(new Point2D.Double(ajustDataExtent.minX(), ajustDataExtent.maxY())); |
232 | 235 |
Point2D p2 = worldToRaster(new Point2D.Double(ajustDataExtent.maxX(), ajustDataExtent.minY())); |
233 | 236 |
Point2D p3 = worldToRaster(new Point2D.Double(dataExtent.minX(), dataExtent.maxY())); |
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/io/GdalDriver.java | ||
---|---|---|
48 | 48 |
* @author Luis W. Sevilla |
49 | 49 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
50 | 50 |
*/ |
51 |
public class GdalDriver extends RasterDataset{ |
|
51 |
public class GdalDriver extends RasterDataset {
|
|
52 | 52 |
public final static int BAND_HEIGHT = 64; |
53 | 53 |
protected GdalNative file = null; |
54 | 54 |
|
... | ... | |
77 | 77 |
extensionPoints.add("RasterDriver", "map", GdalDriver.class); // PC Raster |
78 | 78 |
} |
79 | 79 |
|
80 |
public GdalDriver(IProjection proj, String fName)throws NotSupportedExtensionException{
|
|
81 |
super(proj, fName);
|
|
80 |
public GdalDriver(IProjection proj, Object param)throws NotSupportedExtensionException {
|
|
81 |
super(proj, param);
|
|
82 | 82 |
extent = new Extent(); |
83 | 83 |
try { |
84 |
file = new GdalNative(fName); |
|
85 |
load(); |
|
86 |
readGeoInfo(fName); |
|
84 |
if(param instanceof String) { |
|
85 |
file = new GdalNative(((String)param)); |
|
86 |
load(); |
|
87 |
readGeoInfo(((String)param)); |
|
88 |
}else { |
|
89 |
//TODO: FUNCIONALIDAD: Formatos gestionados por gdal que no tienen extensi?n. Estos tendr?n un objeto IRegistrableRasterFormat Por ej: Grass |
|
90 |
} |
|
87 | 91 |
stats.loadFromRmf(); |
88 | 92 |
bandCount = file.getRasterCount(); |
89 | 93 |
} catch (GdalException e) { |
90 | 94 |
e.printStackTrace(); |
91 | 95 |
throw new NotSupportedExtensionException("Extension not supported"); |
92 |
} catch(Exception e){ |
|
96 |
} catch(Exception e) {
|
|
93 | 97 |
System.out.println("Error en GdalOpen"); |
94 | 98 |
e.printStackTrace(); |
95 | 99 |
file = null; |
trunk/libraries/libRaster/src/org/gvsig/raster/grid/GridReader.java | ||
---|---|---|
18 | 18 |
*/ |
19 | 19 |
package org.gvsig.raster.grid; |
20 | 20 |
|
21 |
import org.gvsig.raster.dataaccess.IQueryableRaster; |
|
22 |
import org.gvsig.raster.dataaccess.buffer.RasterBuffer; |
|
23 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidAccessException; |
|
21 |
import org.gvsig.raster.buffer.BufferFactory; |
|
22 |
import org.gvsig.raster.buffer.BufferFactory; |
|
23 |
import org.gvsig.raster.buffer.RasterBuffer; |
|
24 |
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException; |
|
24 | 25 |
import org.gvsig.raster.dataset.IBuffer; |
25 | 26 |
|
26 | 27 |
/** |
27 | 28 |
* Clase abstracta para lectura de datos de un grid. Esta puede ser creada a partir de |
28 |
* una fuente de datos (IQueryableRaster) o a partir de un buffer de datos (RasterBuffer).
|
|
29 |
* una fuente de datos (BufferFactory) o a partir de un buffer de datos (RasterBuffer).
|
|
29 | 30 |
* Tiene las operaciones b?sicas de consulta. |
30 | 31 |
* |
31 | 32 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
... | ... | |
33 | 34 |
*/ |
34 | 35 |
public abstract class GridReader { |
35 | 36 |
|
36 |
protected IQueryableRaster dataSource = null;
|
|
37 |
protected BufferFactory dataSource = null;
|
|
37 | 38 |
protected RasterBuffer rasterBuf; |
38 | 39 |
protected int dataType = IBuffer.TYPE_UNDEFINED; |
39 | 40 |
protected int[] bands = null; |
... | ... | |
73 | 74 |
* @param windowExtent Extent |
74 | 75 |
* @param bands N?mero de bandas del origen |
75 | 76 |
*/ |
76 |
public GridReader( IQueryableRaster ds,
|
|
77 |
public GridReader( BufferFactory ds,
|
|
77 | 78 |
GridExtent layerExtent, |
78 | 79 |
GridExtent windowExtent, |
79 | 80 |
int[] bands){ |
trunk/libraries/libRaster/src/org/gvsig/raster/grid/IQueryableGrid.java | ||
---|---|---|
18 | 18 |
*/ |
19 | 19 |
package org.gvsig.raster.grid; |
20 | 20 |
|
21 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidAccessException;
|
|
21 |
import java.util.Arrays;
|
|
22 | 22 |
|
23 |
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException; |
|
24 |
|
|
23 | 25 |
/** |
24 | 26 |
* Interfaz que deben implementar los grid en los que se puede consultar sus datos. |
25 | 27 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
trunk/libraries/libRaster/src/org/gvsig/raster/grid/GridStatistic.java | ||
---|---|---|
18 | 18 |
*/ |
19 | 19 |
package org.gvsig.raster.grid; |
20 | 20 |
|
21 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidAccessException;
|
|
21 |
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException; |
|
22 | 22 |
|
23 | 23 |
|
24 | 24 |
/** |
trunk/libraries/libRaster/src/org/gvsig/raster/grid/GridNotInterpolated.java | ||
---|---|---|
19 | 19 |
|
20 | 20 |
package org.gvsig.raster.grid; |
21 | 21 |
|
22 |
import org.gvsig.raster.dataaccess.IQueryableRaster;
|
|
23 |
import org.gvsig.raster.dataaccess.buffer.RasterBuffer;
|
|
24 |
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidAccessException;
|
|
22 |
import org.gvsig.raster.buffer.BufferFactory;
|
|
23 |
import org.gvsig.raster.buffer.RasterBuffer; |
|
24 |
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException; |
|
25 | 25 |
|
26 | 26 |
/** |
27 | 27 |
* A grid wrapper that does not perform interpolation to |
... | ... | |
73 | 73 |
* @param windowExtent Extent |
74 | 74 |
* @param bands N?mero de bandas del origen |
75 | 75 |
*/ |
76 |
public GridNotInterpolated( IQueryableRaster ds, |
Also available in: Unified diff