Revision 11076

View differences:

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, 
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff