From 3f624ec0c0098938cabc01a51c00e178ffa137df Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Thu, 15 Nov 2018 12:35:54 +0100 Subject: [PATCH 1/2] Make map methods tolerant of layers without renderers --- src/ol/renderer/Composite.js | 3 +++ src/ol/renderer/Map.js | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/ol/renderer/Composite.js b/src/ol/renderer/Composite.js index 0a94afe680..269ee6e560 100644 --- a/src/ol/renderer/Composite.js +++ b/src/ol/renderer/Composite.js @@ -130,6 +130,9 @@ class CompositeMapRenderer extends MapRenderer { const layer = layerState.layer; if (visibleAtResolution(layerState, viewResolution) && layerFilter.call(thisArg2, layer)) { const layerRenderer = this.getLayerRenderer(layer); + if (!layerRenderer) { + continue; + } result = layerRenderer.forEachLayerAtCoordinate(coordinate, frameState, hitTolerance, callback, thisArg); if (result) { return result; diff --git a/src/ol/renderer/Map.js b/src/ol/renderer/Map.js index dd8bff7c49..10cc048dad 100644 --- a/src/ol/renderer/Map.js +++ b/src/ol/renderer/Map.js @@ -141,7 +141,7 @@ class MapRenderer extends Disposable { if (visibleAtResolution(layerState, viewResolution) && layerFilter.call(thisArg2, layer)) { const layerRenderer = this.getLayerRenderer(layer); const source = layer.getSource(); - if (source) { + if (layerRenderer && source) { result = layerRenderer.forEachFeatureAtCoordinate( source.getWrapX() ? translatedCoordinate : coordinate, frameState, hitTolerance, forEachFeatureAtCoordinate); @@ -196,7 +196,7 @@ class MapRenderer extends Disposable { /** * @param {import("../layer/Layer.js").default} layer Layer. * @protected - * @return {import("./Layer.js").default} Layer renderer. + * @return {import("./Layer.js").default} Layer renderer. May return null. */ getLayerRenderer(layer) { const layerKey = getUid(layer); @@ -204,9 +204,9 @@ class MapRenderer extends Disposable { return this.layerRenderers_[layerKey]; } - const renderer = layer.getRenderer(this); + const renderer = layer.getRenderer(); if (!renderer) { - throw new Error('Unable to create renderer for layer'); + return null; } this.layerRenderers_[layerKey] = renderer; From edeb5d3e717c50646dd4fee2a24d26b9619337db Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Thu, 15 Nov 2018 12:36:31 +0100 Subject: [PATCH 2/2] Remove unused getLayerRenderersByKey method --- src/ol/renderer/Map.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/ol/renderer/Map.js b/src/ol/renderer/Map.js index 10cc048dad..a07f84354f 100644 --- a/src/ol/renderer/Map.js +++ b/src/ol/renderer/Map.js @@ -214,15 +214,6 @@ class MapRenderer extends Disposable { return renderer; } - /** - * @param {string} layerKey Layer key. - * @protected - * @return {import("./Layer.js").default} Layer renderer. - */ - getLayerRendererByKey(layerKey) { - return this.layerRenderers_[layerKey]; - } - /** * @protected * @return {Object} Layer renderers.