Merge pull request #114 from ahocevar/resolutions

Use validity extent to generate default resolutions. r=@twpayne,@elemoine
This commit is contained in:
ahocevar
2013-01-16 07:17:10 -08:00
4 changed files with 37 additions and 19 deletions

View File

@@ -52,7 +52,6 @@ var layers = new ol.Collection([
]); ]);
var map = new ol.Map({ var map = new ol.Map({
projection: epsg21781,
// By setting userProjection to the same as projection, we do not need // By setting userProjection to the same as projection, we do not need
// proj4js because we do not need any transforms. // proj4js because we do not need any transforms.
userProjection: epsg21781, userProjection: epsg21781,
@@ -60,7 +59,8 @@ var map = new ol.Map({
renderers: ol.RendererHints.createFromQueryData(), renderers: ol.RendererHints.createFromQueryData(),
target: 'map', target: 'map',
view: new ol.View2D({ view: new ol.View2D({
projection: epsg21781,
center: new ol.Coordinate(660000, 190000), center: new ol.Coordinate(660000, 190000),
zoom: 9 zoom: 2
}) })
}); });

View File

@@ -35,20 +35,8 @@ ol.source.TiledWMS = function(tiledWMSOptions) {
if (goog.isDef(tiledWMSOptions.tileGrid)) { if (goog.isDef(tiledWMSOptions.tileGrid)) {
tileGrid = tiledWMSOptions.tileGrid; tileGrid = tiledWMSOptions.tileGrid;
} else { } else {
// FIXME Factor this out to a more central/generic place. tileGrid = ol.tilegrid.createForProjection(projection,
var size = Math.max( tiledWMSOptions.maxZoom);
projectionExtent.maxX - projectionExtent.minX,
projectionExtent.maxY - projectionExtent.minY);
var maxZoom = goog.isDef(tiledWMSOptions.maxZoom) ?
tiledWMSOptions.maxZoom : 18;
var resolutions = new Array(maxZoom + 1);
for (var z = 0, zz = resolutions.length; z < zz; ++z) {
resolutions[z] = ol.Projection.EPSG_3857_HALF_SIZE / (128 << z);
}
tileGrid = new ol.tilegrid.TileGrid({
origin: projectionExtent.getTopLeft(),
resolutions: resolutions
});
} }
var baseParams = { var baseParams = {

View File

@@ -316,3 +316,26 @@ ol.tilegrid.TileGrid.prototype.getTileSize = function() {
ol.tilegrid.TileGrid.prototype.getZForResolution = function(resolution) { ol.tilegrid.TileGrid.prototype.getZForResolution = function(resolution) {
return ol.array.linearFindNearest(this.resolutions_, resolution); return ol.array.linearFindNearest(this.resolutions_, resolution);
}; };
/**
* @param {ol.Projection} projection Projection.
* @param {number=} opt_maxZoom Maximum zoom level (optional). Default is 18.
* @return {ol.tilegrid.TileGrid} TileGrid instance.
*/
ol.tilegrid.createForProjection = function(projection, opt_maxZoom) {
var projectionExtent = projection.getExtent();
var size = Math.max(
projectionExtent.maxX - projectionExtent.minX,
projectionExtent.maxY - projectionExtent.minY);
var maxZoom = goog.isDef(opt_maxZoom) ?
opt_maxZoom : 18;
var resolutions = new Array(maxZoom + 1);
for (var z = 0, zz = resolutions.length; z < zz; ++z) {
resolutions[z] = size / (256 << z);
}
return new ol.tilegrid.TileGrid({
origin: projectionExtent.getTopLeft(),
resolutions: resolutions
});
};

View File

@@ -48,8 +48,11 @@ ol.View2D = function(opt_view2DOptions) {
if (goog.isDef(view2DOptions.resolution)) { if (goog.isDef(view2DOptions.resolution)) {
values[ol.View2DProperty.RESOLUTION] = view2DOptions.resolution; values[ol.View2DProperty.RESOLUTION] = view2DOptions.resolution;
} else if (goog.isDef(view2DOptions.zoom)) { } else if (goog.isDef(view2DOptions.zoom)) {
values[ol.View2DProperty.RESOLUTION] = var projectionExtent = values[ol.View2DProperty.PROJECTION].getExtent();
ol.Projection.EPSG_3857_HALF_SIZE / (128 << view2DOptions.zoom); var size = Math.max(
projectionExtent.maxX - projectionExtent.minX,
projectionExtent.maxY - projectionExtent.minY);
values[ol.View2DProperty.RESOLUTION] = size / (256 << view2DOptions.zoom);
} }
values[ol.View2DProperty.ROTATION] = view2DOptions.rotation; values[ol.View2DProperty.ROTATION] = view2DOptions.rotation;
this.setValues(values); this.setValues(values);
@@ -322,7 +325,11 @@ ol.View2D.createConstraints_ = function(view2DOptions) {
numZoomLevels = view2DOptions.numZoomLevels; numZoomLevels = view2DOptions.numZoomLevels;
zoomFactor = view2DOptions.zoomFactor; zoomFactor = view2DOptions.zoomFactor;
} else { } else {
maxResolution = ol.Projection.EPSG_3857_HALF_SIZE / 128; var projectionExtent = ol.Projection.createProjection(
view2DOptions.projection, 'EPSG:3857').getExtent();
maxResolution = Math.max(
projectionExtent.maxX - projectionExtent.minX,
projectionExtent.maxY - projectionExtent.minY) / 256;
// number of steps we want between two data resolutions // number of steps we want between two data resolutions
var numSteps = 4; var numSteps = 4;
numZoomLevels = 29 * numSteps; numZoomLevels = 29 * numSteps;