Get closest resolution.
This commit is contained in:
@@ -26,6 +26,12 @@ ol.renderer.TileLayerRenderer = function(container, layer) {
|
||||
* @private
|
||||
*/
|
||||
this.rendererdBounds_ = null;
|
||||
|
||||
/**
|
||||
* @type {Array.<number>}
|
||||
*/
|
||||
this.layerResolutions_ = layer.getResolutions();
|
||||
|
||||
|
||||
/**
|
||||
* @type {number|undefined}
|
||||
@@ -43,7 +49,27 @@ ol.renderer.TileLayerRenderer = function(container, layer) {
|
||||
|
||||
goog.inherits(ol.renderer.TileLayerRenderer, ol.renderer.LayerRenderer);
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} resolution
|
||||
* @return {Array.<number>}
|
||||
*/
|
||||
ol.renderer.TileLayerRenderer.prototype.getPreferredResAndZ_ = function(resolution) {
|
||||
var minDiff = Number.POSITIVE_INFINITY;
|
||||
var candidate, diff, z, r;
|
||||
for (var i=0, ii=this.layerResolutions_.length; i<ii; ++i) {
|
||||
// assumes sorted resolutions
|
||||
candidate = this.layerResolutions_[i];
|
||||
diff = Math.abs(resolution - candidate);
|
||||
if (diff < minDiff) {
|
||||
z = i;
|
||||
r = candidate;
|
||||
minDiff = diff;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return [r, z];
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {goog.math.Size}
|
||||
|
||||
@@ -15,5 +15,61 @@ describe("ol.renderer.TileLayerRenderer", function() {
|
||||
expect(ol.renderer.TileLayerRenderer.canRender(layer)).toBe(false);
|
||||
});
|
||||
|
||||
describe("getPreferredResAndZ_", function() {
|
||||
var layer = new ol.layer.TileLayer();
|
||||
var resolutions = [100, 80, 50, 10, 1, 0.1];
|
||||
layer.setResolutions(resolutions);
|
||||
|
||||
var container = document.createElement("div");
|
||||
var renderer = new ol.renderer.TileLayerRenderer(container, layer);
|
||||
|
||||
it("gets the max resolution", function() {
|
||||
var pair = renderer.getPreferredResAndZ_(100);
|
||||
expect(pair[0]).toBe(100);
|
||||
expect(pair[1]).toBe(0);
|
||||
});
|
||||
|
||||
it("gets the min resolution", function() {
|
||||
var pair = renderer.getPreferredResAndZ_(0.1);
|
||||
expect(pair[0]).toBe(0.1);
|
||||
expect(pair[1]).toBe(5);
|
||||
});
|
||||
|
||||
it("gets the max when bigger", function() {
|
||||
var pair = renderer.getPreferredResAndZ_(200);
|
||||
expect(pair[0]).toBe(100);
|
||||
expect(pair[1]).toBe(0);
|
||||
});
|
||||
|
||||
it("gets the min when smaller", function() {
|
||||
var pair = renderer.getPreferredResAndZ_(0.01);
|
||||
expect(pair[0]).toBe(0.1);
|
||||
expect(pair[1]).toBe(5);
|
||||
});
|
||||
|
||||
it("gets the first when in the middle", function() {
|
||||
var pair = renderer.getPreferredResAndZ_(90);
|
||||
expect(pair[0]).toBe(100);
|
||||
expect(pair[1]).toBe(0);
|
||||
});
|
||||
|
||||
it("gets the closer when elsewhere", function() {
|
||||
var pair = renderer.getPreferredResAndZ_(89);
|
||||
expect(pair[0]).toBe(80);
|
||||
expect(pair[1]).toBe(1);
|
||||
|
||||
pair = renderer.getPreferredResAndZ_(49);
|
||||
expect(pair[0]).toBe(50);
|
||||
expect(pair[1]).toBe(2);
|
||||
|
||||
pair = renderer.getPreferredResAndZ_(0.5);
|
||||
expect(pair[0]).toBe(0.1);
|
||||
expect(pair[1]).toBe(5);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user