Merge pull request #7209 from tschaub/work-with-z
Remove grid.getTileRangeForExtentAndResolution()
This commit is contained in:
@@ -147,8 +147,7 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = function(frameState, layer
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var tileRange = tileGrid.getTileRangeForExtentAndResolution(
|
var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
|
||||||
extent, tileResolution);
|
|
||||||
var imageExtent = tileGrid.getTileRangeExtent(z, tileRange);
|
var imageExtent = tileGrid.getTileRangeExtent(z, tileRange);
|
||||||
|
|
||||||
var tilePixelRatio = tileSource.getTilePixelRatio(pixelRatio);
|
var tilePixelRatio = tileSource.getTilePixelRatio(pixelRatio);
|
||||||
|
|||||||
@@ -186,8 +186,7 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerS
|
|||||||
|
|
||||||
var center = viewState.center;
|
var center = viewState.center;
|
||||||
var extent = frameState.extent;
|
var extent = frameState.extent;
|
||||||
var tileRange = tileGrid.getTileRangeForExtentAndResolution(
|
var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
|
||||||
extent, tileResolution);
|
|
||||||
|
|
||||||
var framebufferExtent;
|
var framebufferExtent;
|
||||||
if (this.renderedTileRange_ &&
|
if (this.renderedTileRange_ &&
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ ol.tilegrid.TileGrid.tmpTileCoord_ = [0, 0, 0];
|
|||||||
* Call a function with each tile coordinate for a given extent and zoom level.
|
* Call a function with each tile coordinate for a given extent and zoom level.
|
||||||
*
|
*
|
||||||
* @param {ol.Extent} extent Extent.
|
* @param {ol.Extent} extent Extent.
|
||||||
* @param {number} zoom Zoom level.
|
* @param {number} zoom Integer zoom level.
|
||||||
* @param {function(ol.TileCoord)} callback Function called with each tile coordinate.
|
* @param {function(ol.TileCoord)} callback Function called with each tile coordinate.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
@@ -206,7 +206,7 @@ ol.tilegrid.TileGrid.prototype.getMinZoom = function() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the origin for the grid at the given zoom level.
|
* Get the origin for the grid at the given zoom level.
|
||||||
* @param {number} z Z.
|
* @param {number} z Integer zoom level.
|
||||||
* @return {ol.Coordinate} Origin.
|
* @return {ol.Coordinate} Origin.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
@@ -221,7 +221,7 @@ ol.tilegrid.TileGrid.prototype.getOrigin = function(z) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the resolution for the given zoom level.
|
* Get the resolution for the given zoom level.
|
||||||
* @param {number} z Z.
|
* @param {number} z Integer zoom level.
|
||||||
* @return {number} Resolution.
|
* @return {number} Resolution.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
@@ -258,7 +258,8 @@ ol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange = function(tileCoord,
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {number} z Z.
|
* Get the extent for a tile range.
|
||||||
|
* @param {number} z Integer zoom level.
|
||||||
* @param {ol.TileRange} tileRange Tile range.
|
* @param {ol.TileRange} tileRange Tile range.
|
||||||
* @param {ol.Extent=} opt_extent Temporary ol.Extent object.
|
* @param {ol.Extent=} opt_extent Temporary ol.Extent object.
|
||||||
* @return {ol.Extent} Extent.
|
* @return {ol.Extent} Extent.
|
||||||
@@ -276,34 +277,20 @@ ol.tilegrid.TileGrid.prototype.getTileRangeExtent = function(z, tileRange, opt_e
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Get a tile range for the given extent and integer zoom level.
|
||||||
* @param {ol.Extent} extent Extent.
|
* @param {ol.Extent} extent Extent.
|
||||||
* @param {number} resolution Resolution.
|
* @param {number} z Integer zoom level.
|
||||||
* @param {ol.TileRange=} opt_tileRange Temporary tile range object.
|
|
||||||
* @return {ol.TileRange} Tile range.
|
|
||||||
*/
|
|
||||||
ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndResolution = function(extent, resolution, opt_tileRange) {
|
|
||||||
var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_;
|
|
||||||
this.getTileCoordForXYAndResolution_(
|
|
||||||
extent[0], extent[1], resolution, false, tileCoord);
|
|
||||||
var minX = tileCoord[1];
|
|
||||||
var minY = tileCoord[2];
|
|
||||||
this.getTileCoordForXYAndResolution_(
|
|
||||||
extent[2], extent[3], resolution, true, tileCoord);
|
|
||||||
return ol.TileRange.createOrUpdate(
|
|
||||||
minX, tileCoord[1], minY, tileCoord[2], opt_tileRange);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {ol.Extent} extent Extent.
|
|
||||||
* @param {number} z Z.
|
|
||||||
* @param {ol.TileRange=} opt_tileRange Temporary tile range object.
|
* @param {ol.TileRange=} opt_tileRange Temporary tile range object.
|
||||||
* @return {ol.TileRange} Tile range.
|
* @return {ol.TileRange} Tile range.
|
||||||
*/
|
*/
|
||||||
ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndZ = function(extent, z, opt_tileRange) {
|
ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndZ = function(extent, z, opt_tileRange) {
|
||||||
var resolution = this.getResolution(z);
|
var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_;
|
||||||
return this.getTileRangeForExtentAndResolution(
|
this.getTileCoordForXYAndZ_(extent[0], extent[1], z, false, tileCoord);
|
||||||
extent, resolution, opt_tileRange);
|
var minX = tileCoord[1];
|
||||||
|
var minY = tileCoord[2];
|
||||||
|
this.getTileCoordForXYAndZ_(extent[2], extent[3], z, true, tileCoord);
|
||||||
|
return ol.TileRange.createOrUpdate(
|
||||||
|
minX, tileCoord[1], minY, tileCoord[2], opt_tileRange);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -360,9 +347,11 @@ ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution = function(coor
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Note that this method should not be called for resolutions that correspond
|
||||||
|
* to an integer zoom level. Instead call the `getTileCoordForXYAndZ_` method.
|
||||||
* @param {number} x X.
|
* @param {number} x X.
|
||||||
* @param {number} y Y.
|
* @param {number} y Y.
|
||||||
* @param {number} resolution Resolution.
|
* @param {number} resolution Resolution (for a non-integer zoom level).
|
||||||
* @param {boolean} reverseIntersectionPolicy Instead of letting edge
|
* @param {boolean} reverseIntersectionPolicy Instead of letting edge
|
||||||
* intersections go to the higher tile coordinate, let edge intersections
|
* intersections go to the higher tile coordinate, let edge intersections
|
||||||
* go to the lower tile coordinate.
|
* go to the lower tile coordinate.
|
||||||
@@ -396,6 +385,45 @@ ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndResolution_ = function(
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Although there is repetition between this method and `getTileCoordForXYAndResolution_`,
|
||||||
|
* they should have separate implementations. This method is for integer zoom
|
||||||
|
* levels. The other method should only be called for resolutions corresponding
|
||||||
|
* to non-integer zoom levels.
|
||||||
|
* @param {number} x Map x coordinate.
|
||||||
|
* @param {number} y Map y coordinate.
|
||||||
|
* @param {number} z Integer zoom level.
|
||||||
|
* @param {boolean} reverseIntersectionPolicy Instead of letting edge
|
||||||
|
* intersections go to the higher tile coordinate, let edge intersections
|
||||||
|
* go to the lower tile coordinate.
|
||||||
|
* @param {ol.TileCoord=} opt_tileCoord Temporary ol.TileCoord object.
|
||||||
|
* @return {ol.TileCoord} Tile coordinate.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndZ_ = function(x, y, z, reverseIntersectionPolicy, opt_tileCoord) {
|
||||||
|
var origin = this.getOrigin(z);
|
||||||
|
var resolution = this.getResolution(z);
|
||||||
|
var tileSize = ol.size.toSize(this.getTileSize(z), this.tmpSize_);
|
||||||
|
|
||||||
|
var adjustX = reverseIntersectionPolicy ? 0.5 : 0;
|
||||||
|
var adjustY = reverseIntersectionPolicy ? 0 : 0.5;
|
||||||
|
var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);
|
||||||
|
var yFromOrigin = Math.floor((y - origin[1]) / resolution + adjustY);
|
||||||
|
var tileCoordX = xFromOrigin / tileSize[0];
|
||||||
|
var tileCoordY = yFromOrigin / tileSize[1];
|
||||||
|
|
||||||
|
if (reverseIntersectionPolicy) {
|
||||||
|
tileCoordX = Math.ceil(tileCoordX) - 1;
|
||||||
|
tileCoordY = Math.ceil(tileCoordY) - 1;
|
||||||
|
} else {
|
||||||
|
tileCoordX = Math.floor(tileCoordX);
|
||||||
|
tileCoordY = Math.floor(tileCoordY);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ol.tilecoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a tile coordinate given a map coordinate and zoom level.
|
* Get a tile coordinate given a map coordinate and zoom level.
|
||||||
* @param {ol.Coordinate} coordinate Coordinate.
|
* @param {ol.Coordinate} coordinate Coordinate.
|
||||||
@@ -405,9 +433,8 @@ ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndResolution_ = function(
|
|||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ = function(coordinate, z, opt_tileCoord) {
|
ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ = function(coordinate, z, opt_tileCoord) {
|
||||||
var resolution = this.getResolution(z);
|
return this.getTileCoordForXYAndZ_(
|
||||||
return this.getTileCoordForXYAndResolution_(
|
coordinate[0], coordinate[1], z, false, opt_tileCoord);
|
||||||
coordinate[0], coordinate[1], resolution, false, opt_tileCoord);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,14 +11,12 @@ goog.require('ol.tilegrid.TileGrid');
|
|||||||
|
|
||||||
|
|
||||||
describe('ol.tilegrid.TileGrid', function() {
|
describe('ol.tilegrid.TileGrid', function() {
|
||||||
var extent;
|
|
||||||
var resolutions;
|
var resolutions;
|
||||||
var origin;
|
var origin;
|
||||||
var tileSize;
|
var tileSize;
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
resolutions = [1000, 500, 250, 100];
|
resolutions = [1000, 500, 250, 100];
|
||||||
extent = [0, 0, 100000, 100000];
|
|
||||||
origin = [0, 0];
|
origin = [0, 0];
|
||||||
tileSize = 100;
|
tileSize = 100;
|
||||||
});
|
});
|
||||||
@@ -815,45 +813,6 @@ describe('ol.tilegrid.TileGrid', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getTileRangeForExtentAndResolution', function() {
|
|
||||||
it('returns the expected TileRange', function() {
|
|
||||||
var tileGrid = new ol.tilegrid.TileGrid({
|
|
||||||
resolutions: resolutions,
|
|
||||||
origin: origin,
|
|
||||||
tileSize: tileSize
|
|
||||||
});
|
|
||||||
var tileRange;
|
|
||||||
|
|
||||||
tileRange = tileGrid.getTileRangeForExtentAndResolution(extent,
|
|
||||||
resolutions[0]);
|
|
||||||
expect(tileRange.minY).to.eql(0);
|
|
||||||
expect(tileRange.minX).to.eql(0);
|
|
||||||
expect(tileRange.maxX).to.eql(0);
|
|
||||||
expect(tileRange.maxY).to.eql(0);
|
|
||||||
|
|
||||||
tileRange = tileGrid.getTileRangeForExtentAndResolution(extent,
|
|
||||||
resolutions[1]);
|
|
||||||
expect(tileRange.minX).to.eql(0);
|
|
||||||
expect(tileRange.minY).to.eql(0);
|
|
||||||
expect(tileRange.maxX).to.eql(1);
|
|
||||||
expect(tileRange.maxY).to.eql(1);
|
|
||||||
|
|
||||||
tileRange = tileGrid.getTileRangeForExtentAndResolution(extent,
|
|
||||||
resolutions[2]);
|
|
||||||
expect(tileRange.minX).to.eql(0);
|
|
||||||
expect(tileRange.minY).to.eql(0);
|
|
||||||
expect(tileRange.maxX).to.eql(3);
|
|
||||||
expect(tileRange.maxY).to.eql(3);
|
|
||||||
|
|
||||||
tileRange = tileGrid.getTileRangeForExtentAndResolution(extent,
|
|
||||||
resolutions[3]);
|
|
||||||
expect(tileRange.minX).to.eql(0);
|
|
||||||
expect(tileRange.minY).to.eql(0);
|
|
||||||
expect(tileRange.maxX).to.eql(9);
|
|
||||||
expect(tileRange.maxY).to.eql(9);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('getTileRangeForExtentAndZ', function() {
|
describe('getTileRangeForExtentAndZ', function() {
|
||||||
it('returns the expected TileRange', function() {
|
it('returns the expected TileRange', function() {
|
||||||
var tileGrid = new ol.tilegrid.TileGrid({
|
var tileGrid = new ol.tilegrid.TileGrid({
|
||||||
|
|||||||
Reference in New Issue
Block a user