Fix hit detection for images with missing size
This commit is contained in:
@@ -65,6 +65,10 @@ export function createHitDetectionImageData(size, transforms, features, styleFun
|
|||||||
const image = originalStyle.getImage();
|
const image = originalStyle.getImage();
|
||||||
if (image) {
|
if (image) {
|
||||||
const imgSize = image.getImageSize();
|
const imgSize = image.getImageSize();
|
||||||
|
if (!imgSize) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const canvas = document.createElement('canvas');
|
const canvas = document.createElement('canvas');
|
||||||
canvas.width = imgSize[0];
|
canvas.width = imgSize[0];
|
||||||
canvas.height = imgSize[1];
|
canvas.height = imgSize[1];
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import Feature from '../../../../src/ol/Feature.js';
|
|||||||
import Point from '../../../../src/ol/geom/Point.js';
|
import Point from '../../../../src/ol/geom/Point.js';
|
||||||
import Map from '../../../../src/ol/Map.js';
|
import Map from '../../../../src/ol/Map.js';
|
||||||
import View from '../../../../src/ol/View.js';
|
import View from '../../../../src/ol/View.js';
|
||||||
|
import ImageStyle from '../../../../src/ol/style/Image.js';
|
||||||
|
|
||||||
|
|
||||||
describe('ol.layer.Vector', function() {
|
describe('ol.layer.Vector', function() {
|
||||||
@@ -132,19 +133,41 @@ describe('ol.layer.Vector', function() {
|
|||||||
let map, layer;
|
let map, layer;
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
|
const source = new VectorSource({
|
||||||
|
features: [
|
||||||
|
new Feature({
|
||||||
|
geometry: new Point([-1000000, 0]),
|
||||||
|
name: 'feature1'
|
||||||
|
}),
|
||||||
|
new Feature({
|
||||||
|
geometry: new Point([1000000, 0]),
|
||||||
|
name: 'feature2'
|
||||||
|
})
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
const feature = new Feature({
|
||||||
|
geometry: new Point([-1000000, 0]),
|
||||||
|
name: 'feature with no size'
|
||||||
|
});
|
||||||
|
|
||||||
|
const testImage = new ImageStyle({
|
||||||
|
opacity: 1,
|
||||||
|
displacement: []
|
||||||
|
});
|
||||||
|
|
||||||
|
testImage.getImageState = () => {};
|
||||||
|
testImage.listenImageChange = () => {};
|
||||||
|
testImage.getImageSize = () => {};
|
||||||
|
|
||||||
|
feature.setStyle([new Style({
|
||||||
|
image: testImage
|
||||||
|
})]);
|
||||||
|
|
||||||
|
source.addFeature(feature);
|
||||||
|
|
||||||
layer = new VectorLayer({
|
layer = new VectorLayer({
|
||||||
source: new VectorSource({
|
source
|
||||||
features: [
|
|
||||||
new Feature({
|
|
||||||
geometry: new Point([-1000000, 0]),
|
|
||||||
name: 'feature1'
|
|
||||||
}),
|
|
||||||
new Feature({
|
|
||||||
geometry: new Point([1000000, 0]),
|
|
||||||
name: 'feature2'
|
|
||||||
})
|
|
||||||
]
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
const container = document.createElement('div');
|
const container = document.createElement('div');
|
||||||
container.style.width = '256px';
|
container.style.width = '256px';
|
||||||
@@ -171,6 +194,7 @@ describe('ol.layer.Vector', function() {
|
|||||||
map.renderSync();
|
map.renderSync();
|
||||||
const pixel = map.getPixelFromCoordinate([-1000000, 0]);
|
const pixel = map.getPixelFromCoordinate([-1000000, 0]);
|
||||||
layer.getFeatures(pixel).then(function(features) {
|
layer.getFeatures(pixel).then(function(features) {
|
||||||
|
expect(features.length).to.equal(1);
|
||||||
expect(features[0].get('name')).to.be('feature1');
|
expect(features[0].get('name')).to.be('feature1');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user