Revision 8841 org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.wms/org.gvsig.wms.provider/src/main/java/org/gvsig/wms/provider/WMSRasterProvider.java
WMSRasterProvider.java | ||
---|---|---|
62 | 62 |
import org.gvsig.remoteclient.wms.WMSStatus; |
63 | 63 |
import org.gvsig.remoteclient.wms.WMSStyle; |
64 | 64 |
import org.gvsig.tools.dataTypes.DataTypes; |
65 |
import org.gvsig.tools.dispose.Disposable; |
|
66 |
import org.gvsig.tools.dispose.DisposeUtils; |
|
65 | 67 |
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException; |
68 |
import org.gvsig.tools.exception.BaseException; |
|
66 | 69 |
import org.gvsig.tools.locator.LocatorException; |
67 | 70 |
|
68 | 71 |
/** |
... | ... | |
90 | 93 |
|
91 | 94 |
private int calculatedMaxZoomLevel = MAX_ZOOM_LEVEL; |
92 | 95 |
|
96 |
private TileStruct tileStruct; |
|
97 |
|
|
93 | 98 |
protected WMSRasterProvider(DataStoreParameters params, DataStoreProviderServices storeServices) throws InitializeException { |
94 | 99 |
super(params, storeServices, FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME)); |
95 | 100 |
initParams(); |
... | ... | |
379 | 384 |
|
380 | 385 |
@Override |
381 | 386 |
public TileStruct getTileStruct() { |
382 |
TileStruct tileStruct = new DefaultTileStruct(); |
|
383 |
tileStruct.setColumnsPerTile(DEFAULT_BUFFER_SIZE); |
|
384 |
tileStruct.setRowsPerTile(DEFAULT_BUFFER_SIZE); |
|
387 |
if (tileStruct == null) { |
|
388 |
tileStruct = new DefaultTileStruct(); |
|
389 |
tileStruct.setColumnsPerTile(DEFAULT_BUFFER_SIZE); |
|
390 |
tileStruct.setRowsPerTile(DEFAULT_BUFFER_SIZE); |
|
385 | 391 |
|
386 |
try { |
|
387 |
Envelope envelope = getEnvelope(); |
|
388 |
tileStruct.setEnvelope(envelope); |
|
392 |
try {
|
|
393 |
Envelope envelope = getEnvelope();
|
|
394 |
tileStruct.setEnvelope(envelope);
|
|
389 | 395 |
|
390 |
Map<Integer, Double> zoomLevels = new HashMap<Integer, Double>(); |
|
391 |
double pixelSize; |
|
392 |
double length; |
|
393 |
if (envelope.getLength(DIMENSIONS.X) >= envelope.getLength(DIMENSIONS.Y)) { |
|
394 |
length = envelope.getLength(DIMENSIONS.X); |
|
395 |
} else { |
|
396 |
length = envelope.getLength(DIMENSIONS.Y); |
|
396 |
Map<Integer, Double> zoomLevels = new HashMap<Integer, Double>(); |
|
397 |
double pixelSize; |
|
398 |
double length; |
|
399 |
if (envelope.getLength(DIMENSIONS.X) >= envelope.getLength(DIMENSIONS.Y)) { |
|
400 |
length = envelope.getLength(DIMENSIONS.X); |
|
401 |
} else { |
|
402 |
length = envelope.getLength(DIMENSIONS.Y); |
|
403 |
} |
|
404 |
pixelSize = length / DEFAULT_BUFFER_SIZE; |
|
405 |
for (int zoomLevel = 0; (zoomLevel <= MAX_ZOOM_LEVEL) && ((length / pixelSize) < Integer.MAX_VALUE); zoomLevel++) { |
|
406 |
zoomLevels.put(zoomLevel, pixelSize); |
|
407 |
pixelSize = pixelSize / 2; |
|
408 |
calculatedMaxZoomLevel = zoomLevel; |
|
409 |
} |
|
410 |
|
|
411 |
tileStruct.setPixelSizePerZoomLevel(zoomLevels); |
|
412 |
} catch (LocatorException e) { |
|
413 |
logger.warn("Can't create world extent of GoogleMaps", e); |
|
397 | 414 |
} |
398 |
pixelSize = length / DEFAULT_BUFFER_SIZE; |
|
399 |
for (int zoomLevel = 0; (zoomLevel <= MAX_ZOOM_LEVEL) && ((length/pixelSize)<Integer.MAX_VALUE); zoomLevel++) { |
|
400 |
zoomLevels.put(zoomLevel, pixelSize); |
|
401 |
pixelSize = pixelSize / 2; |
|
402 |
calculatedMaxZoomLevel = zoomLevel; |
|
403 |
} |
|
404 |
|
|
405 |
tileStruct.setPixelSizePerZoomLevel(zoomLevels); |
|
406 |
} catch (LocatorException e) { |
|
407 |
logger.warn("Can't create world extent of GoogleMaps", e); |
|
408 | 415 |
} |
409 | 416 |
return tileStruct; |
410 | 417 |
} |
... | ... | |
439 | 446 |
return this.dimensions; |
440 | 447 |
} |
441 | 448 |
|
449 |
@Override |
|
450 |
protected void doDispose() throws BaseException { |
|
451 |
super.doDispose(); |
|
452 |
if(this.tileStruct!=null) { |
|
453 |
DisposeUtils.dispose((Disposable) this.tileStruct); |
|
454 |
this.tileStruct = null; |
|
455 |
} |
|
456 |
} |
|
457 |
|
|
442 | 458 |
} |
Also available in: Unified diff