Revision 6345
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.gdal/org.gvsig.raster.gdal.provider/src/main/java/org/gvsig/raster/gdal/provider/AbstractRasterGdalStoreProvider.java | ||
---|---|---|
101 | 101 |
protected Dataset gdalDataSet; |
102 | 102 |
protected Driver gdalDriver; |
103 | 103 |
|
104 |
private List<PageManager> pageManagers; |
|
105 |
|
|
106 |
private int[] bandDataTypes; |
|
107 |
|
|
108 |
private NoData[] bandNoDatas; |
|
109 |
|
|
104 | 110 |
/** |
105 | 111 |
* Dataset from gdal containing the raster data |
106 | 112 |
* @return Dataset |
... | ... | |
203 | 209 |
|
204 | 210 |
@Override |
205 | 211 |
public Buffer createBuffer(RasterQuery rasterQuery) throws BufferException { |
206 |
int bandCount=gdalDataSet.getRasterCount(); |
|
212 |
|
|
207 | 213 |
BufferManager bufferManager=BufferLocator.getBufferManager(); |
208 |
int[] bandDataTypes=new int[bandCount]; |
|
209 |
NoData[] bandNoData=new NoData[bandCount]; |
|
210 |
List<PageManager> pageManagers=new ArrayList<PageManager>(); |
|
211 |
|
|
212 |
for (int i=0;i<bandCount;i++){ |
|
213 |
//Gdal bands begin count in 1 |
|
214 |
int gdalBandNumber=i+1; |
|
215 |
org.gdal.gdal.Band gdalBand=gdalDataSet.GetRasterBand(gdalBandNumber); |
|
216 |
|
|
217 |
bandDataTypes[i]=getRasterBufTypeFromGdalType(gdalBand.getDataType()); |
|
218 |
Double noData=getNoData(gdalBand); |
|
219 |
if (noData!=null){ |
|
220 |
bandNoData[i]=bufferManager.createNoData(noData, noData); |
|
221 |
}else{ |
|
222 |
bandNoData[i]=null; |
|
223 |
} |
|
224 |
//Paginated |
|
225 |
pageManagers.add(new RasterGdalBandPageManager(gdalDataSet, gdalBandNumber)); |
|
226 |
//Tiled |
|
227 |
// pageManagers.add(new RasterGdalBandTileManager(gdalDataSet, gdalBandNumber, 256, 256)); |
|
228 |
} |
|
229 |
|
|
230 | 214 |
Buffer buffer = |
231 | 215 |
bufferManager.createBuffer(gdalDataSet.getRasterYSize(), gdalDataSet.getRasterXSize(), |
232 |
bandDataTypes, bandNoData, projection, envelope, pageManagers);
|
|
216 |
bandDataTypes, this.bandNoDatas, this.projection, envelope, this.pageManagers);
|
|
233 | 217 |
|
234 | 218 |
return buffer; |
235 | 219 |
} |
... | ... | |
267 | 251 |
return; |
268 | 252 |
} |
269 | 253 |
openEver(); |
270 |
} |
|
254 |
//Create the page managers |
|
255 |
BufferManager bufferManager=BufferLocator.getBufferManager(); |
|
271 | 256 |
|
272 |
protected void openEver() throws OpenException { |
|
273 |
//This method must be overwritten by subclasses than can open a raster |
|
274 |
throw new UnsupportedOperationException("This provider can't open the raster"); |
|
257 |
int bandCount=gdalDataSet.getRasterCount(); |
|
258 |
bandDataTypes = new int[bandCount]; |
|
259 |
bandNoDatas = new NoData[bandCount]; |
|
260 |
|
|
261 |
pageManagers = new ArrayList<PageManager>(); |
|
262 |
|
|
263 |
for (int i=0;i<bandCount;i++){ |
|
264 |
//Gdal bands begin count in 1 |
|
265 |
int gdalBandNumber=i+1; |
|
266 |
org.gdal.gdal.Band gdalBand=gdalDataSet.GetRasterBand(gdalBandNumber); |
|
267 |
|
|
268 |
bandDataTypes[i]=getRasterBufTypeFromGdalType(gdalBand.getDataType()); |
|
269 |
Double noData=getNoData(gdalBand); |
|
270 |
if (noData!=null){ |
|
271 |
bandNoDatas[i]=bufferManager.createNoData(noData, noData); |
|
272 |
}else{ |
|
273 |
bandNoDatas[i]=null; |
|
274 |
} |
|
275 |
//Paginated |
|
276 |
pageManagers.add(new RasterGdalBandPageManager(gdalDataSet, gdalBandNumber)); |
|
277 |
//Tiled |
|
278 |
// pageManagers.add(new RasterGdalBandTileManager(gdalDataSet, gdalBandNumber, 256, 256)); |
|
279 |
} |
|
280 |
|
|
281 |
|
|
275 | 282 |
} |
276 | 283 |
|
284 |
protected abstract void openEver() throws OpenException; |
|
285 |
|
|
277 | 286 |
protected Envelope createEnvelope(double[] geotransform){ |
278 | 287 |
|
279 | 288 |
double leftMostX = geotransform[0];/* top left x */ |
... | ... | |
311 | 320 |
|
312 | 321 |
@Override |
313 | 322 |
public void close() throws CloseException { |
323 |
this.gdalDataSet.delete(); |
|
314 | 324 |
this.gdalDataSet = null; |
315 | 325 |
} |
316 | 326 |
|
... | ... | |
349 | 359 |
*/ |
350 | 360 |
protected void doDispose() throws BaseException { |
351 | 361 |
super.doDispose(); |
362 |
if(gdalDataSet!=null){ |
|
363 |
gdalDataSet.delete(); |
|
364 |
gdalDataSet=null; |
|
365 |
} |
|
352 | 366 |
resource.removeConsumer(this); |
353 | 367 |
} |
354 | 368 |
|
Also available in: Unified diff