Merge pull request #13521 from mike-000/gutter
Include tile gutter in offsets for getData() methods
This commit is contained in:
@@ -120,6 +120,7 @@ class CanvasLayerRenderer extends LayerRenderer {
|
|||||||
pixelContext.drawImage(image, col, row, 1, 1, 0, 0, 1, 1);
|
pixelContext.drawImage(image, col, row, 1, 1, 0, 0, 1, 1);
|
||||||
data = pixelContext.getImageData(0, 0, 1, 1).data;
|
data = pixelContext.getImageData(0, 0, 1, 1).data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
pixelContext = null;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
|
|||||||
@@ -208,7 +208,11 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|||||||
tileCoord[2] * tileSize[1])
|
tileCoord[2] * tileSize[1])
|
||||||
);
|
);
|
||||||
|
|
||||||
return this.getImageData(tile.getImage(), col, row);
|
const gutter = Math.round(
|
||||||
|
tilePixelRatio * source.getGutterForProjection(viewState.projection)
|
||||||
|
);
|
||||||
|
|
||||||
|
return this.getImageData(tile.getImage(), col + gutter, row + gutter);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -397,10 +397,22 @@ class TileTexture extends EventTarget {
|
|||||||
|
|
||||||
let data;
|
let data;
|
||||||
const image = this.tile.getImage();
|
const image = this.tile.getImage();
|
||||||
|
const gutter = Math.round(this.tilePixelRatio_ * this.gutter_);
|
||||||
try {
|
try {
|
||||||
pixelContext.drawImage(image, col, row, 1, 1, 0, 0, 1, 1);
|
pixelContext.drawImage(
|
||||||
|
image,
|
||||||
|
col + gutter,
|
||||||
|
row + gutter,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
);
|
||||||
data = pixelContext.getImageData(0, 0, 1, 1).data;
|
data = pixelContext.getImageData(0, 0, 1, 1).data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
pixelContext = null;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 9.5 KiB |
@@ -1,6 +1,6 @@
|
|||||||
import TileLayer from '../../../../../src/ol/layer/Tile.js';
|
import TileLayer from '../../../../../src/ol/layer/Tile.js';
|
||||||
import {Map, View} from '../../../../../src/ol/index.js';
|
import {Map, View} from '../../../../../src/ol/index.js';
|
||||||
import {OSM, XYZ} from '../../../../../src/ol/source.js';
|
import {OSM, TileWMS, XYZ} from '../../../../../src/ol/source.js';
|
||||||
|
|
||||||
describe('ol/layer/Tile', function () {
|
describe('ol/layer/Tile', function () {
|
||||||
describe('constructor (defaults)', function () {
|
describe('constructor (defaults)', function () {
|
||||||
@@ -78,6 +78,77 @@ describe('ol/layer/Tile', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('gutter', () => {
|
||||||
|
let map, target, layer, data;
|
||||||
|
beforeEach((done) => {
|
||||||
|
target = document.createElement('div');
|
||||||
|
target.style.width = '256px';
|
||||||
|
target.style.height = '256px';
|
||||||
|
document.body.appendChild(target);
|
||||||
|
|
||||||
|
layer = new TileLayer({
|
||||||
|
source: new TileWMS({
|
||||||
|
params: {
|
||||||
|
LAYERS: 'layer',
|
||||||
|
},
|
||||||
|
gutter: 20,
|
||||||
|
url: 'spec/ol/data/wms20.png',
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
map = new Map({
|
||||||
|
target: target,
|
||||||
|
pixelRatio: 1,
|
||||||
|
layers: [layer],
|
||||||
|
view: new View({
|
||||||
|
center: [0, 0],
|
||||||
|
zoom: 0,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
map.once('rendercomplete', () => done());
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
map.setTarget(null);
|
||||||
|
document.body.removeChild(target);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('gets pixel data', () => {
|
||||||
|
data = layer.getData([76, 114]);
|
||||||
|
expect(data).to.be.a(Uint8ClampedArray);
|
||||||
|
expect(data.length).to.be(4);
|
||||||
|
expect(data[0]).to.be(77);
|
||||||
|
expect(data[1]).to.be(255);
|
||||||
|
expect(data[2]).to.be(77);
|
||||||
|
expect(data[3]).to.be(179);
|
||||||
|
|
||||||
|
data = layer.getData([76, 118]);
|
||||||
|
expect(data).to.be.a(Uint8ClampedArray);
|
||||||
|
expect(data.length).to.be(4);
|
||||||
|
expect(data[0]).to.be(255);
|
||||||
|
expect(data[1]).to.be(77);
|
||||||
|
expect(data[2]).to.be(77);
|
||||||
|
expect(data[3]).to.be(179);
|
||||||
|
|
||||||
|
data = layer.getData([80, 114]);
|
||||||
|
expect(data).to.be.a(Uint8ClampedArray);
|
||||||
|
expect(data.length).to.be(4);
|
||||||
|
expect(data[0]).to.be(255);
|
||||||
|
expect(data[1]).to.be(77);
|
||||||
|
expect(data[2]).to.be(77);
|
||||||
|
expect(data[3]).to.be(179);
|
||||||
|
|
||||||
|
data = layer.getData([80, 118]);
|
||||||
|
expect(data).to.be.a(Uint8ClampedArray);
|
||||||
|
expect(data.length).to.be(4);
|
||||||
|
expect(data[0]).to.be(77);
|
||||||
|
expect(data[1]).to.be(255);
|
||||||
|
expect(data[2]).to.be(77);
|
||||||
|
expect(data[3]).to.be(179);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('frameState.animate after tile transition with layer opacity', function () {
|
describe('frameState.animate after tile transition with layer opacity', function () {
|
||||||
let target, map;
|
let target, map;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import DataTileSource from '../../../../../src/ol/source/DataTile.js';
|
import DataTileSource from '../../../../../src/ol/source/DataTile.js';
|
||||||
import Map from '../../../../../src/ol/Map.js';
|
import Map from '../../../../../src/ol/Map.js';
|
||||||
|
import TileWMS from '../../../../../src/ol/source/TileWMS.js';
|
||||||
import View from '../../../../../src/ol/View.js';
|
import View from '../../../../../src/ol/View.js';
|
||||||
import WebGLHelper from '../../../../../src/ol/webgl/Helper.js';
|
import WebGLHelper from '../../../../../src/ol/webgl/Helper.js';
|
||||||
import WebGLTileLayer from '../../../../../src/ol/layer/WebGLTile.js';
|
import WebGLTileLayer from '../../../../../src/ol/layer/WebGLTile.js';
|
||||||
@@ -128,6 +129,77 @@ describe('ol/layer/WebGLTile', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('gutter', () => {
|
||||||
|
let map, target, layer, data;
|
||||||
|
beforeEach((done) => {
|
||||||
|
target = document.createElement('div');
|
||||||
|
target.style.width = '256px';
|
||||||
|
target.style.height = '256px';
|
||||||
|
document.body.appendChild(target);
|
||||||
|
|
||||||
|
layer = new WebGLTileLayer({
|
||||||
|
source: new TileWMS({
|
||||||
|
params: {
|
||||||
|
LAYERS: 'layer',
|
||||||
|
},
|
||||||
|
gutter: 20,
|
||||||
|
url: 'spec/ol/data/wms20.png',
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
map = new Map({
|
||||||
|
target: target,
|
||||||
|
pixelRatio: 1,
|
||||||
|
layers: [layer],
|
||||||
|
view: new View({
|
||||||
|
center: [0, 0],
|
||||||
|
zoom: 0,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
map.once('rendercomplete', () => done());
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
map.setTarget(null);
|
||||||
|
document.body.removeChild(target);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('gets pixel data', () => {
|
||||||
|
data = layer.getData([76, 114]);
|
||||||
|
expect(data).to.be.a(Uint8ClampedArray);
|
||||||
|
expect(data.length).to.be(4);
|
||||||
|
expect(data[0]).to.be(77);
|
||||||
|
expect(data[1]).to.be(255);
|
||||||
|
expect(data[2]).to.be(77);
|
||||||
|
expect(data[3]).to.be(179);
|
||||||
|
|
||||||
|
data = layer.getData([76, 118]);
|
||||||
|
expect(data).to.be.a(Uint8ClampedArray);
|
||||||
|
expect(data.length).to.be(4);
|
||||||
|
expect(data[0]).to.be(255);
|
||||||
|
expect(data[1]).to.be(77);
|
||||||
|
expect(data[2]).to.be(77);
|
||||||
|
expect(data[3]).to.be(179);
|
||||||
|
|
||||||
|
data = layer.getData([80, 114]);
|
||||||
|
expect(data).to.be.a(Uint8ClampedArray);
|
||||||
|
expect(data.length).to.be(4);
|
||||||
|
expect(data[0]).to.be(255);
|
||||||
|
expect(data[1]).to.be(77);
|
||||||
|
expect(data[2]).to.be(77);
|
||||||
|
expect(data[3]).to.be(179);
|
||||||
|
|
||||||
|
data = layer.getData([80, 118]);
|
||||||
|
expect(data).to.be.a(Uint8ClampedArray);
|
||||||
|
expect(data.length).to.be(4);
|
||||||
|
expect(data[0]).to.be(77);
|
||||||
|
expect(data[1]).to.be(255);
|
||||||
|
expect(data[2]).to.be(77);
|
||||||
|
expect(data[3]).to.be(179);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('dispose()', () => {
|
describe('dispose()', () => {
|
||||||
it('calls dispose on the renderer', () => {
|
it('calls dispose on the renderer', () => {
|
||||||
const renderer = layer.getRenderer();
|
const renderer = layer.getRenderer();
|
||||||
|
|||||||
Reference in New Issue
Block a user