Javascript: "ReferenceError: icon is not defined"
Javascript: "ReferenceError: icon is not defined"
我正在使用 openlayers 向地图添加点并使用 stylefunction 为它们设置样式。这段代码在一周前工作,今天我加载它时没有任何更改并收到错误 "ReferenceError: icon is not defined".
该函数要求矢量的属性,然后根据该属性用不同的图像设置样式。
var styleFunction = function(feature, resolution) {
if(feature.get('class') === 'Artificial surface') {
icon = 'icons/Artificial_surfaces.svg'
} else if(feature.get('class') === 'Bare land') {
icon = 'icons/Barrenlands.svg'
} else if(feature.get('class') === 'Cultivated land') {
icon = 'icons/Cultivated_land.svg'
} else if(feature.get('class') === 'Forest') {
icon = 'icons/Forests.svg'
} else if(feature.get('class') === 'Grassland') {
icon = 'icons/Grasslands.svg'
} else if(feature.get('class') === 'Shrubland') {
icon = 'icons/Shrublands.svg'
} else if(feature.get('class') === 'Water body') {
icon = 'icons/Waterbodies.svg'
} else if(feature.get('class') === 'Wetland') {
icon = 'icons/Wetland.svg'
}
return [new ol.style.Style({
image: new ol.style.Icon({
src: icon,
scale: 0.7
})
})]
};
var points = new ol.layer.Vector ({
title: 'Gathered Points',
source: vectorTwo,
style: styleFunction
});
我对 javascript 很陌生,所以这可能是我面临的一个简单错误,但我没有找到解决方案,我有点困惑,因为它在一周前就起作用了,我没有应用任何更改。
您的代码需要一些语法调整。您缺少许多分号 ;
并且您的 icon
变量被声明为全局变量。有时我在这样做时遇到了麻烦,发现使用 var
关键字将其设置为本地清理了一切。如果您需要让该变量成为全局变量,只需在函数外部声明它而不赋值,然后在函数内赋值即可。这是我使用您的代码编写的更好语法版本:
var styleFunction = function(feature, resolution) {
var icon ;
if(feature.get('class') === 'Artificial surface') {
icon = 'icons/Artificial_surfaces.svg' ;
} else if(feature.get('class') === 'Bare land') {
icon = 'icons/Barrenlands.svg' ;
} else if(feature.get('class') === 'Cultivated land') {
icon = 'icons/Cultivated_land.svg' ;
} else if(feature.get('class') === 'Forest') {
icon = 'icons/Forests.svg' ;
} else if(feature.get('class') === 'Grassland') {
icon = 'icons/Grasslands.svg' ;
} else if(feature.get('class') === 'Shrubland') {
icon = 'icons/Shrublands.svg' ;
} else if(feature.get('class') === 'Water body') {
icon = 'icons/Waterbodies.svg' ;
} else if(feature.get('class') === 'Wetland') {
icon = 'icons/Wetland.svg' ;
}
return [new ol.style.Style({
image: new ol.style.Icon({
src: icon,
scale: 0.7
})
})] ;
};
var points = new ol.layer.Vector ({
title: 'Gathered Points',
source: vectorTwo,
style: styleFunction
}) ;
此外,我强烈建议在您使用的许多 if else
语句中使用 switch
语句。使代码更简洁,您只需要传递一个参数。您可以阅读 switch 语句 here。它们应该相当容易理解。
您肯定引入了一个新的 class
,该 class
返回给 feature.get('class')
如果 styleFunction
中的 none 条件为真,您将收到 ReferenceError: icon is not defined
错误,因为如果发生这种情况,则不会分配 icon
,因为您在 new ol.style.Icon
.
处抛出 ReferenceError
的任何地方都没有 icon
的定义
要解决该问题,您一方面必须使用 let
(或旧环境 var
)添加 icon
的定义,并且您可能希望使用 var
对其进行初始化默认值 if none 的 if 块评估为 true。
var styleFunction = function(feature, resolution) {
var icon /* = 'icons/Default.svg' */
if (feature.get('class') === 'Artificial surface') {
icon = 'icons/Artificial_surfaces.svg'
} else if (feature.get('class') === 'Bare land') {
icon = 'icons/Barrenlands.svg'
}
// ...
}
我正在使用 openlayers 向地图添加点并使用 stylefunction 为它们设置样式。这段代码在一周前工作,今天我加载它时没有任何更改并收到错误 "ReferenceError: icon is not defined".
该函数要求矢量的属性,然后根据该属性用不同的图像设置样式。
var styleFunction = function(feature, resolution) {
if(feature.get('class') === 'Artificial surface') {
icon = 'icons/Artificial_surfaces.svg'
} else if(feature.get('class') === 'Bare land') {
icon = 'icons/Barrenlands.svg'
} else if(feature.get('class') === 'Cultivated land') {
icon = 'icons/Cultivated_land.svg'
} else if(feature.get('class') === 'Forest') {
icon = 'icons/Forests.svg'
} else if(feature.get('class') === 'Grassland') {
icon = 'icons/Grasslands.svg'
} else if(feature.get('class') === 'Shrubland') {
icon = 'icons/Shrublands.svg'
} else if(feature.get('class') === 'Water body') {
icon = 'icons/Waterbodies.svg'
} else if(feature.get('class') === 'Wetland') {
icon = 'icons/Wetland.svg'
}
return [new ol.style.Style({
image: new ol.style.Icon({
src: icon,
scale: 0.7
})
})]
};
var points = new ol.layer.Vector ({
title: 'Gathered Points',
source: vectorTwo,
style: styleFunction
});
我对 javascript 很陌生,所以这可能是我面临的一个简单错误,但我没有找到解决方案,我有点困惑,因为它在一周前就起作用了,我没有应用任何更改。
您的代码需要一些语法调整。您缺少许多分号 ;
并且您的 icon
变量被声明为全局变量。有时我在这样做时遇到了麻烦,发现使用 var
关键字将其设置为本地清理了一切。如果您需要让该变量成为全局变量,只需在函数外部声明它而不赋值,然后在函数内赋值即可。这是我使用您的代码编写的更好语法版本:
var styleFunction = function(feature, resolution) {
var icon ;
if(feature.get('class') === 'Artificial surface') {
icon = 'icons/Artificial_surfaces.svg' ;
} else if(feature.get('class') === 'Bare land') {
icon = 'icons/Barrenlands.svg' ;
} else if(feature.get('class') === 'Cultivated land') {
icon = 'icons/Cultivated_land.svg' ;
} else if(feature.get('class') === 'Forest') {
icon = 'icons/Forests.svg' ;
} else if(feature.get('class') === 'Grassland') {
icon = 'icons/Grasslands.svg' ;
} else if(feature.get('class') === 'Shrubland') {
icon = 'icons/Shrublands.svg' ;
} else if(feature.get('class') === 'Water body') {
icon = 'icons/Waterbodies.svg' ;
} else if(feature.get('class') === 'Wetland') {
icon = 'icons/Wetland.svg' ;
}
return [new ol.style.Style({
image: new ol.style.Icon({
src: icon,
scale: 0.7
})
})] ;
};
var points = new ol.layer.Vector ({
title: 'Gathered Points',
source: vectorTwo,
style: styleFunction
}) ;
此外,我强烈建议在您使用的许多 if else
语句中使用 switch
语句。使代码更简洁,您只需要传递一个参数。您可以阅读 switch 语句 here。它们应该相当容易理解。
您肯定引入了一个新的 class
,该 class
返回给 feature.get('class')
如果 styleFunction
中的 none 条件为真,您将收到 ReferenceError: icon is not defined
错误,因为如果发生这种情况,则不会分配 icon
,因为您在 new ol.style.Icon
.
ReferenceError
的任何地方都没有 icon
的定义
要解决该问题,您一方面必须使用 let
(或旧环境 var
)添加 icon
的定义,并且您可能希望使用 var
对其进行初始化默认值 if none 的 if 块评估为 true。
var styleFunction = function(feature, resolution) {
var icon /* = 'icons/Default.svg' */
if (feature.get('class') === 'Artificial surface') {
icon = 'icons/Artificial_surfaces.svg'
} else if (feature.get('class') === 'Bare land') {
icon = 'icons/Barrenlands.svg'
}
// ...
}