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 |
}
|