开发者问题收集

QGIS 2 web openlayers - TypeError:无法读取 null 的属性

2021-09-15
2705

我想在 QGIS2web 插件生成的 OpenLayers 地图中绘制特征。由于一切似乎都很好,并且所有功能现在都已推出, 与最近的情况不同

我的完整代码在这里:

https://jsfiddle.net/go39r4j7/

但我对情况不太确定,因为我一直收到错误:

TypeError:无法读取 null 的属性(读取“get”)

在此处输入图像描述

指出了以下一段代码:

map.forEachFeatureAtPixel(pixel, function(feature, layer) {
    if (feature instanceof ol.Feature && (layer.get("interactive") || layer.get("interactive") 
   == undefined)) {
        var doPopup = false;
        for (k in layer.get('fieldImages')) {
            if (layer.get('fieldImages')[k] != "Hidden") {
                doPopup = true;
              }
          }

理论上,我知道我无法访问为空的对象:

https://idiallo.com/javascript/uncaught-typeerror-cannot-read-property-of-null

但我尝试过的任何选项(删除这段代码、删除 layer.get 属性、将 layer.get("interactive") 更改为我自己的 id( "draw" ))均未成功。

此外,这段代码似乎是标准的对于类似情况,如下所示:

https://gist.github.com/riccardoklinger/e3e2c512a366c8a6a296c10eef9c4162

我该如何修复此问题?该工具有效,但我担心将来的修改。

2个回答

https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html#forEachFeatureAtPixel

Feature callback. The callback will be called with two arguments. The first argument is one feature or render feature at the pixel, the second is the layer of the feature and will be null for unmanaged layers.

如果您有一个非管理图层(例如,Draw 交互使用的覆盖图层),则需要确保在使用 .get 之前您有一个图层:

if (feature instanceof ol.Feature && layer && (layer.get("interactive") || layer.get("interactive") == undefined)) {
Mike
2021-09-15

我通过这种方式解决了这个问题:

map.forEachFeatureAtPixel(pixel, function(feature, layer) {
            if (layer) { 
                var doPopup = false;
                for (k in layer.get('fieldImages')) {
                    if (layer.get('fieldImages')[k] != "Hidden") {
                        doPopup = true;
                    }
                }
andreaordonselli
2022-09-07