Revision 6514 org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.googlemaps/org.gvsig.raster.googlemaps.provider/src/main/java/org/gvsig/raster/googlemaps/provider/GoogleMapsImage.java
GoogleMapsImage.java | ||
---|---|---|
1 | 1 |
package org.gvsig.raster.googlemaps.provider; |
2 | 2 |
|
3 | 3 |
import java.awt.image.BufferedImage; |
4 |
import java.awt.image.DataBuffer; |
|
5 |
import java.awt.image.Raster; |
|
6 |
import java.awt.image.SampleModel; |
|
7 | 4 |
import java.util.HashMap; |
8 | 5 |
import java.util.Iterator; |
9 | 6 |
import java.util.Map; |
10 | 7 |
import java.util.Map.Entry; |
11 | 8 |
import java.util.Set; |
12 | 9 |
|
13 |
import org.cresques.cts.ICoordTrans; |
|
14 | 10 |
import org.slf4j.Logger; |
15 | 11 |
import org.slf4j.LoggerFactory; |
16 | 12 |
|
17 |
import org.gvsig.fmap.crs.CRSFactory; |
|
18 | 13 |
import org.gvsig.fmap.dal.DataStoreParameters; |
19 | 14 |
import org.gvsig.fmap.dal.exception.DataException; |
20 | 15 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
... | ... | |
26 | 21 |
import org.gvsig.fmap.geom.exception.CreateGeometryException; |
27 | 22 |
import org.gvsig.fmap.geom.primitive.Envelope; |
28 | 23 |
import org.gvsig.fmap.geom.primitive.Point; |
29 |
import org.gvsig.googlemaps.lib.api.GoogleMapsLibrary; |
|
30 | 24 |
import org.gvsig.googlemaps.lib.api.GoogleMapsLocator; |
31 | 25 |
import org.gvsig.googlemaps.lib.api.GoogleMapsManager; |
32 | 26 |
import org.gvsig.googlemaps.lib.api.GoogleMapsRequest; |
... | ... | |
36 | 30 |
import org.gvsig.raster.lib.buffer.api.Band; |
37 | 31 |
import org.gvsig.raster.lib.buffer.api.Buffer; |
38 | 32 |
import org.gvsig.raster.lib.buffer.api.BufferLocator; |
39 |
import org.gvsig.raster.lib.buffer.api.BufferManager; |
|
40 |
import org.gvsig.raster.lib.buffer.api.NoData; |
|
41 | 33 |
import org.gvsig.raster.lib.buffer.api.TileStruct; |
42 | 34 |
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException; |
43 | 35 |
import org.gvsig.tools.ToolsLocator; |
... | ... | |
63 | 55 |
private GoogleMapsRasterProvider provider; |
64 | 56 |
|
65 | 57 |
/** |
66 |
* @param innerProvider
|
|
58 |
* @param provider
|
|
67 | 59 |
* @param query |
68 | 60 |
* @param tileStruct |
69 | 61 |
*/ |
... | ... | |
241 | 233 |
|
242 | 234 |
downloaded = false; |
243 | 235 |
|
244 |
int imageType = img.getType(); |
|
245 |
int bufferType; |
|
246 |
switch (imageType) { |
|
247 |
case BufferedImage.TYPE_3BYTE_BGR: |
|
248 |
case BufferedImage.TYPE_4BYTE_ABGR: |
|
249 |
case BufferedImage.TYPE_4BYTE_ABGR_PRE: |
|
250 |
case BufferedImage.TYPE_BYTE_BINARY: |
|
251 |
case BufferedImage.TYPE_BYTE_GRAY: |
|
252 |
case BufferedImage.TYPE_BYTE_INDEXED: |
|
253 |
bufferType = BufferManager.TYPE_BYTE; |
|
254 |
break; |
|
255 |
case BufferedImage.TYPE_INT_ARGB: |
|
256 |
case BufferedImage.TYPE_INT_ARGB_PRE: |
|
257 |
case BufferedImage.TYPE_INT_BGR: |
|
258 |
case BufferedImage.TYPE_INT_RGB: |
|
259 |
bufferType = BufferManager.TYPE_INT; |
|
260 |
break; |
|
261 |
case BufferedImage.TYPE_USHORT_555_RGB: |
|
262 |
case BufferedImage.TYPE_USHORT_565_RGB: |
|
263 |
case BufferedImage.TYPE_USHORT_GRAY: |
|
264 |
bufferType = BufferManager.TYPE_USHORT; |
|
265 |
break; |
|
266 |
default: |
|
267 |
bufferType = BufferManager.TYPE_UNDEFINED; |
|
268 |
break; |
|
269 |
} |
|
270 |
|
|
271 |
SampleModel sampleModel = img.getSampleModel(); |
|
272 |
int bands = sampleModel.getNumBands(); |
|
273 |
int[] bandDataTypes = new int[bands]; |
|
274 |
NoData[] bandNoData = new NoData[bands]; |
|
275 |
for (int i = 0; i < bandDataTypes.length; i++) { |
|
276 |
bandDataTypes[i] = bufferType; |
|
277 |
bandNoData[i] = null; |
|
278 |
} |
|
279 |
|
|
280 |
// FIXME: ?se hace as?? |
|
281 |
// Raster raster = img.getData(); |
|
282 | 236 |
try { |
237 |
|
|
283 | 238 |
this.buffer = |
284 |
BufferLocator.getBufferManager().createBuffer(img.getHeight(), img.getWidth(), bandDataTypes, |
|
285 |
bandNoData, GoogleMapsRasterProvider.GOOGLE_MAPS_PROJECTION, this.envelope, null); |
|
239 |
BufferLocator.getBufferManager().createBuffer(img, GoogleMapsRasterProvider.GOOGLE_MAPS_PROJECTION, |
|
240 |
this.envelope); |
|
241 |
|
|
286 | 242 |
} catch (LocatorException | BufferException e) { |
287 | 243 |
logger.warn("Can't create buffer to load downloaded image.", e); |
288 | 244 |
} |
289 | 245 |
|
290 |
// byte[] dataElements = (byte[]) raster.getDataElements(0, 0, img.getWidth(), img.getHeight(), null); |
|
291 |
// FIXME: For now img has only one band because format is default |
|
292 |
// (png) |
|
293 |
// Band band = this.buffer.getBand(0); |
|
294 |
// byte[] rowBuffer = (byte[]) band.createRowBuffer(); |
|
295 |
// for (int row = 0; row < img.getHeight(); row++) { |
|
296 |
// System.arraycopy(dataElements, row * img.getWidth(), rowBuffer, 0, img.getWidth()); |
|
297 |
// band.putRow(row, rowBuffer); |
|
298 |
// } |
|
299 |
// |
|
300 |
|
|
301 |
Raster raster = img.getData(); |
|
302 |
DataBuffer dataBuffer = raster.getDataBuffer(); |
|
303 |
for (int i = 0; i < bands; i++) { |
|
304 |
Band band = this.buffer.getBand(i); |
|
305 |
byte[] rowBuffer = (byte[]) band.createRowBuffer(); |
|
306 |
int[] intRowBuffer = new int[rowBuffer.length]; |
|
307 |
for (int row = 0; row < img.getHeight(); row++) { |
|
308 |
sampleModel.getSamples(0, row, img.getWidth(), 1, i, intRowBuffer, dataBuffer); |
|
309 |
for(int c=0; c<rowBuffer.length; c++) { |
|
310 |
rowBuffer[c] = (byte)intRowBuffer[c]; |
|
311 |
} |
|
312 |
band.putRow(row, rowBuffer); |
|
313 |
} |
|
314 |
// System.arraycopy(dataElements, row * img.getWidth(), rowBuffer, 0, img.getWidth()); |
|
315 |
// } |
|
316 |
|
|
317 |
} |
|
318 |
|
|
319 | 246 |
this.downloaded = true; |
320 | 247 |
logger.info("Tile listo : " + this.key); |
321 | 248 |
this.notify(); |
Also available in: Unified diff