Get closest resolution.
This commit is contained in:
@@ -26,6 +26,12 @@ ol.renderer.TileLayerRenderer = function(container, layer) {
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.rendererdBounds_ = null;
|
this.rendererdBounds_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Array.<number>}
|
||||||
|
*/
|
||||||
|
this.layerResolutions_ = layer.getResolutions();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {number|undefined}
|
* @type {number|undefined}
|
||||||
@@ -43,7 +49,27 @@ ol.renderer.TileLayerRenderer = function(container, layer) {
|
|||||||
|
|
||||||
goog.inherits(ol.renderer.TileLayerRenderer, ol.renderer.LayerRenderer);
|
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}
|
* @return {goog.math.Size}
|
||||||
|
|||||||
@@ -15,5 +15,61 @@ describe("ol.renderer.TileLayerRenderer", function() {
|
|||||||
expect(ol.renderer.TileLayerRenderer.canRender(layer)).toBe(false);
|
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