Make map methods tolerant of layers without renderers
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user