Merge pull request #114 from ahocevar/resolutions
Use validity extent to generate default resolutions. r=@twpayne,@elemoine
This commit is contained in:
@@ -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
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user