Make map methods tolerant of layers without renderers

This commit is contained in:
Tim Schaub
2018-11-15 12:35:54 +01:00
parent 96dd5417e3
commit 3f624ec0c0
2 changed files with 7 additions and 4 deletions
+3
View File
@@ -130,6 +130,9 @@ class CompositeMapRenderer extends MapRenderer {
const layer = layerState.layer; const layer = layerState.layer;
if (visibleAtResolution(layerState, viewResolution) && layerFilter.call(thisArg2, layer)) { if (visibleAtResolution(layerState, viewResolution) && layerFilter.call(thisArg2, layer)) {
const layerRenderer = this.getLayerRenderer(layer); const layerRenderer = this.getLayerRenderer(layer);
if (!layerRenderer) {
continue;
}
result = layerRenderer.forEachLayerAtCoordinate(coordinate, frameState, hitTolerance, callback, thisArg); result = layerRenderer.forEachLayerAtCoordinate(coordinate, frameState, hitTolerance, callback, thisArg);
if (result) { if (result) {
return result; return result;
+4 -4
View File
@@ -141,7 +141,7 @@ class MapRenderer extends Disposable {
if (visibleAtResolution(layerState, viewResolution) && layerFilter.call(thisArg2, layer)) { if (visibleAtResolution(layerState, viewResolution) && layerFilter.call(thisArg2, layer)) {
const layerRenderer = this.getLayerRenderer(layer); const layerRenderer = this.getLayerRenderer(layer);
const source = layer.getSource(); const source = layer.getSource();
if (source) { if (layerRenderer && source) {
result = layerRenderer.forEachFeatureAtCoordinate( result = layerRenderer.forEachFeatureAtCoordinate(
source.getWrapX() ? translatedCoordinate : coordinate, source.getWrapX() ? translatedCoordinate : coordinate,
frameState, hitTolerance, forEachFeatureAtCoordinate); frameState, hitTolerance, forEachFeatureAtCoordinate);
@@ -196,7 +196,7 @@ class MapRenderer extends Disposable {
/** /**
* @param {import("../layer/Layer.js").default} layer Layer. * @param {import("../layer/Layer.js").default} layer Layer.
* @protected * @protected
* @return {import("./Layer.js").default} Layer renderer. * @return {import("./Layer.js").default} Layer renderer. May return null.
*/ */
getLayerRenderer(layer) { getLayerRenderer(layer) {
const layerKey = getUid(layer); const layerKey = getUid(layer);
@@ -204,9 +204,9 @@ class MapRenderer extends Disposable {
return this.layerRenderers_[layerKey]; return this.layerRenderers_[layerKey];
} }
const renderer = layer.getRenderer(this); const renderer = layer.getRenderer();
if (!renderer) { if (!renderer) {
throw new Error('Unable to create renderer for layer'); return null;
} }
this.layerRenderers_[layerKey] = renderer; this.layerRenderers_[layerKey] = renderer;