Merge pull request #7209 from tschaub/work-with-z

Remove grid.getTileRangeForExtentAndResolution()
This commit is contained in:
Tim Schaub
2017-09-02 15:14:17 -06:00
committed by GitHub
4 changed files with 60 additions and 76 deletions

View File

@@ -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);

View File

@@ -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_ &&

View File

@@ -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);
}; };

View File

@@ -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({